//★ obj_loader のテスト(Applet) 前田 稔
import java.applet.Applet;
import java.awt.*;
import javax.swing.*;
import javax.media.j3d.*;
import javax.vecmath.*;
import com.sun.j3d.utils.universe.*;
import com.sun.j3d.loaders.Scene;
import com.sun.j3d.utils.behaviors.mouse.*;
import com.sun.j3d.utils.applet.MainFrame;
import java.net.URL;
public class obj_applet extends Applet
{ private SimpleUniverse universe;
// main Method
public static void main(String[] args)
{ new MainFrame(new obj_applet(), 300, 300); }
// Constructor
public obj_applet() { }
// Applet 初期化
public void init()
{ setLayout(new BorderLayout());
// Java3D 関係の設定
GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration();
Canvas3D canvas = new Canvas3D(config);
add("Center", canvas);
// SimpleUniverseを生成
universe = new SimpleUniverse(canvas);
universe.getViewingPlatform().setNominalViewingTransform();
// Scene を生成
universe.addBranchGraph(createSceneGraph(getCodeBase(),"cube_texture.obj"));
setVisible(true);
}
// Scene の生成
public BranchGroup createSceneGraph(URL url, String file)
{ BranchGroup objRoot = new BranchGroup();
// Light の設定
BoundingSphere bounds = new BoundingSphere(new Point3d(),100.0);
DirectionalLight dlight =
new DirectionalLight(true, new Color3f(1.0f,1.0f,1.0f), new Vector3f(0.3f,-0.3f,-0.3f));
dlight.setInfluencingBounds(bounds);
objRoot.addChild(dlight);
AmbientLight alight = new AmbientLight();
alight.setInfluencingBounds(bounds);
objRoot.addChild(alight);
// Mouse 操作の設定
TransformGroup trans = new TransformGroup();
SetMouse(objRoot, trans);
objRoot.addChild(trans);
// モデルの入力
obj_loader f = new obj_loader(obj_loader.RESIZE);
Scene s = null;
try
{ if (url!=null)
{ URL u = new URL(url+file);
s = f.load(u);
}
else
{ s = f.load(file); }
}
catch(Exception e)
{ e.printStackTrace();
System.exit(1);
}
trans.addChild(s.getSceneGroup());
// 背景色の設定
Color3f bgColor = new Color3f(0.05f, 0.2f, 0.05f);
Background bgNode = new Background(bgColor);
bgNode.setApplicationBounds(bounds);
objRoot.addChild(bgNode);
return objRoot;
}
// Mouse 操作の設定
public void SetMouse(BranchGroup objRoot, TransformGroup trans)
{
// Model の修正を許可
trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// 回転を設定
BoundingSphere bounds = new BoundingSphere(new Point3d(), 100.0);
MouseRotate rotator = new MouseRotate(trans);
rotator.setSchedulingBounds(bounds);
objRoot.addChild(rotator);
// 移動を設定
MouseTranslate translator = new MouseTranslate(trans);
translator.setSchedulingBounds(bounds);
objRoot.addChild(translator);
// ズームを設定
MouseZoom zoomer = new MouseZoom(trans);
zoomer.setSchedulingBounds(bounds);
objRoot.addChild(zoomer);
}
// 終了処理
public void destroy()
{ universe.cleanup(); }
}
|