/*------------*/ /* Ex32.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 javax.vecmath.*; //Point3f,Color3f public class Ex32 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); /* 全体をx方向に平行移動、y軸回りに回転後、縮小する */ /*--mulメソッドによる合成変換------------------------------ Transform3D trans = new Transform3D(); Transform3D rot = new Transform3D(); Transform3D scale = new Transform3D(); trans.setTranslation(new Vector3f(0.2f, -0.5f, 0.0f)); rot.rotX(Math.PI/4); scale.setScale(new Vector3d(2.0d, 0.5d, 1.0d)); trans.mul(rot); trans.mul(scale); TransformGroup transG1 = new TransformGroup(trans); branchG0.addChild(transG1); //原点に物体を作成 ColorCube colorCube = new ColorCube(0.3f); transG1.addChild(colorCube); -----------------------------------------------------------*/ /*--複数のTransformGroupによる変換-------------------------*/ Transform3D trans = new Transform3D(); Transform3D rot = new Transform3D(); Transform3D scale = new Transform3D(); trans.setTranslation(new Vector3f(0.2f, -0.5f, 0.0f)); rot.rotX(Math.PI/4); scale.setScale(new Vector3d(2.0d, 0.5d, 1.0d)); TransformGroup transG1 = new TransformGroup(trans); TransformGroup transG2 = new TransformGroup(rot); TransformGroup transG3 = new TransformGroup(scale); branchG0.addChild(transG1); transG1.addChild(transG2); transG2.addChild(transG3); //原点に物体を作成 ColorCube colorCube = new ColorCube(0.3f); transG3.addChild(colorCube); /*---------------------------------------------------------*/ branchG0.compile(); return branchG0; } public void destroy(){ simpleU.cleanup(); } public static void main(String[] args){ //Application MainFrame frame = new MainFrame(new Ex32(), 512, 512); } }