/*--------------*/ /* Ex53.java */ /*--------------*/ import java.applet.Applet; import java.awt.*; //BorderLayout,GraphicsConfiguration,event import javax.media.j3d.*; //Java3d import com.sun.j3d.utils.applet.MainFrame; //MainFrame import com.sun.j3d.utils.universe.*; //SimpleUniverse import com.sun.j3d.utils.geometry.*; //Primitive import com.sun.j3d.utils.behaviors.mouse.*; //Mouse import com.sun.j3d.utils.behaviors.keyboard.*;//Keyboard import javax.vecmath.*; //Point3f,Color3f public class Ex53 extends Applet{ private SimpleUniverse simpleU; private BoundingSphere bounds = new BoundingSphere(new Point3d(), 10.0); public void init(){ //アプレットの中央にCanvas3Dを追加 setLayout(new BorderLayout()); Canvas3D canvas = new Canvas3D(SimpleUniverse.getPreferredConfiguration()); add(canvas, BorderLayout.CENTER); //シーングラフの生成 simpleU = new SimpleUniverse(canvas); simpleU.getViewingPlatform().setNominalViewingTransform(); //シーングラフの作成 simpleU.addBranchGraph(createSceneGraph()); } private BranchGroup createSceneGraph(){ BranchGroup branchG0 = new BranchGroup(); //背景色の設定(設定が無い場合は黒) Background background = new Background(new Color3f(0.3f, 0.3f, 0.3f)); background.setApplicationBounds(bounds); branchG0.addChild(background); //左のノード Transform3D trans1 = new Transform3D(); trans1.set(new Vector3f(-0.4f, 0.0f, 0.0f)); TransformGroup transG1 = new TransformGroup(trans1); branchG0.addChild(transG1); //右のノード Transform3D trans2 = new Transform3D(); trans2.set(new Vector3f( 0.4f, 0.0f, 0.0f)); TransformGroup transG2 = new TransformGroup(trans2); branchG0.addChild(transG2); //ColorCubeの生成 ColorCube colorCube1 = new ColorCube(0.2f); transG1.addChild(colorCube1); //左 ColorCube colorCube2 = new ColorCube(0.2f); transG2.addChild(colorCube2); //右 //マウスによる物体移動(左) transG1.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); transG1.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); MouseRotate mouseRot = new MouseRotate(transG1); MouseTranslate mouseTrans = new MouseTranslate(transG1); MouseZoom mouseZoom = new MouseZoom(transG1); mouseRot.setSchedulingBounds(bounds); mouseTrans.setSchedulingBounds(bounds); mouseZoom.setSchedulingBounds(bounds); transG1.addChild(mouseRot); transG1.addChild(mouseTrans); transG1.addChild(mouseZoom); //キーボードによる物体移動(右) transG2.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); transG2.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); KeyNavigatorBehavior keybehavior = new KeyNavigatorBehavior(transG2); keybehavior.setSchedulingBounds(bounds); transG1.addChild(keybehavior); branchG0.compile(); return branchG0; } public void destroy(){ simpleU.cleanup(); } public static void main(String[] args){ //Application MainFrame frame = new MainFrame(new Ex53(), 512, 512); } }