/*------------*/ /* Ja67.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 com.sun.j3d.utils.behaviors.mouse.*; //Mouse import javax.vecmath.*; //Point3f,Color3f import java.awt.event.*; //Checkbox public class Ja67 extends Applet implements ItemListener{ private SimpleUniverse simpleU; private BoundingSphere bounds = new BoundingSphere(new Point3d(), 10.0); ColoringAttributes ca = new ColoringAttributes(); //ラジオボタン------- CheckboxGroup radio; Checkbox radio1, radio2; 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()); //GUIの作成 createGUI(); } 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); //光源を追加 branchG0.addChild(createDirectionalLight()); //座標系を少し縮小 Transform3D scale = new Transform3D(); scale.setScale(0.6); TransformGroup transG0 = new TransformGroup(scale); branchG0.addChild(transG0); //Appearanceを作成 Appearance ap = new Appearance(); PolygonAttributes pa = new PolygonAttributes(); pa.setCullFace(PolygonAttributes.CULL_NONE); //裏面も表示する pa.setBackFaceNormalFlip(true); //裏面にも法線設定 ap.setPolygonAttributes(pa); ca.setShadeModel(ColoringAttributes.SHADE_FLAT); //フラット(初期値) ap.setColoringAttributes(ca); Material ma = new Material(); ma.setDiffuseColor(new Color3f(0.0f, 0.0f, 1.0f)); ma.setSpecularColor(new Color3f(0.3f, 0.3f, 0.3f)); ma.setShininess(128.0f); ap.setMaterial(ma); //四角形ポリゴンをdiv*div作成 float rSphere = 3.0f; int div = 2; Point3f[] vertex = new Point3f[4]; Vector3f[] normal = new Vector3f[4]; float[] x = new float[4]; float[] y = new float[4]; float[] xx = new float[4]; float[] yy = new float[4]; float[] zz = new float[4]; x[0] = -1.0f; x[1] = 0.0f; x[2] = 0.0f; x[3] = -1.0f; y[0] = -1.0f; y[1] = -1.0f; y[2] = 0.0f; y[3] = 0.0f; for(int i=0; i