/*--------------*/ /* Ap31.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 Ap31 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); //原点のAppearanceを設定 Appearance ap = new Appearance(); ColoringAttributes ca = new ColoringAttributes(); ca.setColor(new Color3f( 0.5f, 0.0f, 1.0f)); ap.setColoringAttributes(ca); // z-bufferのOFF ------------------------------------------- RenderingAttributes ra = new RenderingAttributes(); ra.setDepthBufferEnable(false); ap.setRenderingAttributes(ra); //---------------------------------------------------------- //--- 円錐 ------------------------------------------------- //回転 Transform3D rot = new Transform3D(); rot.rotZ(Math.PI/2); TransformGroup transG1 = new TransformGroup(rot); branchG0.addChild(transG1); //円錐を作成 Cone cone = new Cone(0.4f, 1.5f, ap); transG1.addChild(cone); //---------------------------------------------------------- //--- 四角形ポリゴン --------------------------------------- //平行移動の後、回転 Transform3D trans = new Transform3D(); trans.set(new Vector3f( 0.3f, 0.0f, 0.0f)); rot.rotY(-Math.PI/3); trans.mul(rot); TransformGroup transG2 = new TransformGroup(trans); branchG0.addChild(transG2); //四角形ポリゴンの頂点座標・色設定 Point3f[] vertex = new Point3f[4]; Color3f[] color = new Color3f[4]; vertex[0] = new Point3f( 0.5f, 0.5f, 0.0f); vertex[1] = new Point3f(-0.5f, 0.5f, 0.0f); vertex[2] = new Point3f(-0.5f, -0.5f, 0.0f); vertex[3] = new Point3f( 0.5f, -0.5f, 0.0f); color[0] = new Color3f( 1.0f, 0.0f, 0.0f); color[1] = new Color3f( 0.0f, 1.0f, 0.0f); color[2] = new Color3f( 0.0f, 0.0f, 1.0f); color[3] = new Color3f( 1.0f, 1.0f, 0.0f); //四角形の生成 QuadArray quadA = new QuadArray(vertex.length, GeometryArray.COORDINATES | GeometryArray.COLOR_3); quadA.setCoordinates(0, vertex); quadA.setColors(0, color); Shape3D quad3D = new Shape3D(quadA); transG2.addChild(quad3D); //---------------------------------------------------------- branchG0.compile(); return branchG0; } public void destroy(){ simpleU.cleanup(); } public static void main(String[] args){ //Application MainFrame frame = new MainFrame(new Ap31(), 512, 512); } }