/*--------------*/ /* Ja84.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 Ja84 extends Applet{ private SimpleUniverse simpleU; private TransformGroup vpTrans; 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(); //シーングラフの作成 vpTrans = simpleU.getViewingPlatform().getViewPlatformTransform(); simpleU.addBranchGraph(createSceneGraph()); } private BranchGroup createSceneGraph(){ //Transform3Dオブジェクト Transform3D trans = new Transform3D(); BranchGroup branchG0 = new BranchGroup(); //視点の設定(Behaviorの呼出し) Ja84Behavior myLookBehavior = new Ja84Behavior(vpTrans); myLookBehavior.setSchedulingBounds(bounds); branchG0.addChild(myLookBehavior); //背景色の設定(設定が無い場合は黒) Background background = new Background(new Color3f(0.3f, 0.3f, 0.3f)); background.setApplicationBounds(bounds); branchG0.addChild(background); //transG0:以下の幾何変換の取りまとめノード TransformGroup transG0 = new TransformGroup(); branchG0.addChild(transG0); //[球1]Appearance1を作成 Appearance ap1 = new Appearance(); ColoringAttributes ca1 = new ColoringAttributes(); ca1.setColor(new Color3f( 1.0f, 0.5f, 0.5f)); ap1.setColoringAttributes(ca1); PolygonAttributes pa = new PolygonAttributes(); pa.setPolygonMode(PolygonAttributes.POLYGON_LINE); //ワイヤー ap1.setPolygonAttributes(pa); //球1を作成 trans.set(new Vector3f(-0.4f, -0.2f, -10.0f)); TransformGroup transG1 = new TransformGroup(trans); transG0.addChild(transG1); Sphere sphere1 = new Sphere(0.2f, ap1); transG1.addChild(sphere1); //[円柱]Appearance2を作成 Appearance ap2 = new Appearance(); ColoringAttributes ca2 = new ColoringAttributes(); ca2.setColor(new Color3f( 0.50f, 1.5f, 0.5f)); ap2.setColoringAttributes(ca2); ap2.setPolygonAttributes(pa); //円柱を作成 trans.setTranslation(new Vector3f(0.3f, 0.5f, -20.0f)); TransformGroup transG2 = new TransformGroup(trans); transG0.addChild(transG2); Cylinder cylinder = new Cylinder(0.2f, 0.4f, ap2); transG2.addChild(cylinder); //[円錐]Appearance3を作成 Appearance ap3 = new Appearance(); ColoringAttributes ca3 = new ColoringAttributes(); ca3.setColor(new Color3f( 0.5f, 0.5f, 1.0f)); ap3.setColoringAttributes(ca3); ap3.setPolygonAttributes(pa); //円錐を作成 trans.setTranslation(new Vector3f(-0.7f, -0.3f, -25.0f)); TransformGroup transG3 = new TransformGroup(trans); transG0.addChild(transG3); Cone cone = new Cone(0.4f, 0.6f, ap3); transG3.addChild(cone); //[球2]Appearance4を作成 Appearance ap4 = new Appearance(); ColoringAttributes ca4 = new ColoringAttributes(); ca4.setColor(new Color3f( 1.0f, 1.0f, 0.5f)); ap4.setColoringAttributes(ca4); ap4.setPolygonAttributes(pa); //球2を作成 trans.setTranslation(new Vector3f(0.0f, 0.2f, -32.0f)); TransformGroup transG4 = new TransformGroup(trans); transG0.addChild(transG4); Sphere sphere2 = new Sphere(0.5f, ap4); transG4.addChild(sphere2); //地面の作成 trans.setTranslation(new Vector3f(0.0f, -0.7f, 0.0f)); TransformGroup transG5 = new TransformGroup(trans); transG0.addChild(transG5); createGround(transG5); branchG0.compile(); return branchG0; } //地面を作成する private void createGround(TransformGroup transG){ Point3f[] vertex = new Point3f[4]; Color3f[] color = new Color3f[4]; for(int i=0;i<=12;i++){ vertex[0] = new Point3f(-6.0f+(1.0f*i), 0.0f, 0.0f); //Z方向 vertex[1] = new Point3f(-6.0f+(1.0f*i), 0.0f, -48.0f); //Z方向 vertex[2] = new Point3f(-6.0f, 0.0f, -4.0f*i); //X方向 vertex[3] = new Point3f( 6.0f, 0.0f, -4.0f*i); //X方向 color[0] = new Color3f( 0.0f, 0.0f, 0.0f); color[1] = new Color3f( 0.0f, 0.0f, 0.0f); color[2] = new Color3f( 0.0f, 0.0f, 0.0f); color[3] = new Color3f( 0.0f, 0.0f, 0.0f); //2点組の線を引く LineArray lineA = new LineArray(vertex.length, GeometryArray.COORDINATES | GeometryArray.COLOR_3); lineA.setCoordinates(0, vertex); lineA.setColors(0, color); Shape3D line3D = new Shape3D(lineA); transG.addChild(line3D); } } public void destroy(){ simpleU.cleanup(); } public static void main(String[] args){ //Application MainFrame frame = new MainFrame(new Ja84(), 512, 512); } }