import javax.media.j3d.*; import javax.vecmath.*; public class Crystal extends Shape3D { /* --- 定数 --- */ private final static Point3f[] vertexs={ // 頂点 new Point3f( 0.2f, 0.0f, 0.0f),new Point3f( 0.0f, 0.0f, 0.2f), new Point3f( 0.0f,-0.5f, 0.0f), // 面1 new Point3f( 0.0f, 0.0f, 0.2f),new Point3f(-0.2f, 0.0f, 0.0f), new Point3f( 0.0f,-0.5f, 0.0f), // 面2 new Point3f(-0.2f, 0.0f, 0.0f),new Point3f( 0.0f, 0.0f,-0.2f), new Point3f( 0.0f,-0.5f, 0.0f), // 面3 new Point3f( 0.0f, 0.0f,-0.2f),new Point3f( 0.2f, 0.0f, 0.0f), new Point3f( 0.0f,-0.5f, 0.0f), // 面4 new Point3f( 0.0f, 0.0f, 0.2f),new Point3f( 0.2f, 0.0f, 0.0f), new Point3f( 0.0f, 0.5f, 0.0f), // 面5 new Point3f(-0.2f, 0.0f, 0.0f),new Point3f( 0.0f, 0.0f, 0.2f), new Point3f( 0.0f, 0.5f, 0.0f), // 面6 new Point3f( 0.0f, 0.0f,-0.2f),new Point3f(-0.2f, 0.0f, 0.0f), new Point3f( 0.0f, 0.5f, 0.0f), // 面7 new Point3f( 0.2f, 0.0f, 0.0f),new Point3f( 0.0f, 0.0f,-0.2f), new Point3f( 0.0f, 0.5f, 0.0f)}; // 面8 private final static Vector3f[] normals={ // 法線 new Vector3f( 0.2f,-0.5f, 0.2f),new Vector3f( 0.2f,-0.5f, 0.2f), new Vector3f( 0.2f,-0.5f, 0.2f), // 面1 new Vector3f(-0.2f,-0.5f, 0.2f),new Vector3f(-0.2f,-0.5f, 0.2f), new Vector3f(-0.2f,-0.5f, 0.2f), // 面2 new Vector3f(-0.2f,-0.5f,-0.2f),new Vector3f(-0.2f,-0.5f,-0.2f), new Vector3f(-0.2f,-0.5f,-0.2f), // 面3 new Vector3f( 0.2f,-0.5f,-0.2f),new Vector3f( 0.2f,-0.5f,-0.2f), new Vector3f( 0.2f,-0.5f,-0.2f), // 面4 new Vector3f( 0.2f, 0.5f, 0.2f),new Vector3f( 0.2f, 0.5f, 0.2f), new Vector3f( 0.2f, 0.5f, 0.2f), // 面5 new Vector3f(-0.2f, 0.5f, 0.2f),new Vector3f(-0.2f, 0.5f, 0.2f), new Vector3f(-0.2f, 0.5f, 0.2f), // 面6 new Vector3f(-0.2f, 0.5f,-0.2f),new Vector3f(-0.2f, 0.5f,-0.2f), new Vector3f(-0.2f, 0.5f,-0.2f), // 面7 new Vector3f( 0.2f, 0.5f,-0.2f),new Vector3f( 0.2f, 0.5f,-0.2f), new Vector3f( 0.2f, 0.5f,-0.2f)}; // 面8 /* --- Constructor --- */ public Crystal() { super(createGeometry()); } public Crystal(Appearance appearance) { super(createGeometry(),appearance); } /* --- 初期化 --- */ private static Geometry createGeometry() { TriangleArray geometry; geometry=new TriangleArray(24, TriangleArray.COORDINATES | TriangleArray.NORMALS); // 24 = 3 (三角形)×8 (面) = 頂点数 // TriangleArray.COORDINATES = 頂点を指定する // TriangleArray.NORMAL = 法線を指定する geometry.setCoordinates(0,vertexs); // 頂点を設定 geometry.setNormals(0,normals); // 法線を設定 return geometry; } }