/*--------------*/ /* Ex22.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 javax.vecmath.*; //Point3f,Color3f public class Ex22 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); //線の頂点座標・色設定 int[] stripVertexCount = {5}; //連続する頂点の数を配列で設定 Point3f[] vertex1 = new Point3f[5]; Color3f[] color1 = new Color3f[5]; vertex1[0] = new Point3f(-0.5f, 0.7f, 0.0f); vertex1[1] = new Point3f( 0.5f, 0.7f, 0.0f); vertex1[2] = new Point3f(-0.5f, 0.3f, 0.0f); vertex1[3] = new Point3f( 0.5f, 0.3f, 0.0f); vertex1[4] = new Point3f(-0.5f, 0.1f, 0.0f); color1[0] = new Color3f( 0.0f, 1.0f, 0.0f); //緑 color1[1] = new Color3f( 0.0f, 1.0f, 0.0f); //緑 color1[2] = new Color3f( 0.0f, 1.0f, 0.0f); //緑 color1[3] = new Color3f( 0.0f, 1.0f, 0.0f); //緑 color1[4] = new Color3f( 0.0f, 1.0f, 0.0f); //緑 //三角形の頂点座標・色設定 Point3f[] vertex2 = new Point3f[4]; //3→4(@) Color3f[] color2 = new Color3f[4]; //3→4(@) vertex2[0] = new Point3f( 0.3f, -0.7f, 0.0f); vertex2[1] = new Point3f( 0.0f, -0.2f, 0.0f); vertex2[2] = new Point3f(-0.3f, -0.7f, 0.0f); vertex2[3] = new Point3f( 0.0f, -0.9f, 0.0f); //add(@) color2[0] = new Color3f( 1.0f, 0.0f, 0.0f); //赤(@) color2[1] = new Color3f( 1.0f, 1.0f, 0.0f); //黄(@) color2[2] = new Color3f( 0.0f, 1.0f, 0.0f); //緑(@) color2[3] = new Color3f( 0.0f, 0.0f, 1.0f); //青(@) //連続線の生成 LineStripArray lineStripA = new LineStripArray(vertex1.length, GeometryArray.COORDINATES | GeometryArray.COLOR_3, stripVertexCount); lineStripA.setCoordinates(0, vertex1); lineStripA.setColors(0, color1); Shape3D lineStrip3D = new Shape3D(lineStripA); branchG0.addChild(lineStrip3D); //三角形の生成 QuadArray quadA //TriangleArray→QuadArray(@) = new QuadArray(vertex2.length, GeometryArray.COORDINATES | GeometryArray.COLOR_3); quadA.setCoordinates(0, vertex2); quadA.setColors(0, color2); Shape3D quad3D = new Shape3D(quadA); branchG0.addChild(quad3D); branchG0.compile(); return branchG0; } public void destroy(){ simpleU.cleanup(); } public static void main(String[] args){ //Application MainFrame frame = new MainFrame(new Ex22(), 512, 512); } }