// Java 3Dテスト用アプレット // NormalTest.java // Copyright (c) 1999 ENDO Yasuyuki // mailto:yasuyuki@javaopen.org // http://www.javaopen.org/j3dbook/index.html import java.applet.*; import java.awt.*; import java.awt.event.*; import javax.media.j3d.*; import javax.vecmath.*; import com.sun.j3d.utils.applet.MainFrame; import com.sun.j3d.utils.universe.SimpleUniverse; public class NormalTest extends Applet { private SimpleUniverse universe = null; private BranchGroup scene = null; private Shape3D nshape = null; public NormalTest() { this.setLayout(new BorderLayout()); Panel panel = new Panel(); this.add(panel, BorderLayout.SOUTH); Checkbox check = new Checkbox("Normals", true); check.addItemListener( new ItemListener() { public void itemStateChanged(ItemEvent e) { int state = e.getStateChange(); universe.getLocale().removeBranchGraph(scene); if (state == ItemEvent.SELECTED) { addChild(scene, nshape); } else if (state == ItemEvent.DESELECTED) { removeChild(scene, nshape); } universe.addBranchGraph(scene); } }); panel.add(check); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); Canvas3D canvas = new Canvas3D(config); this.add(canvas, BorderLayout.CENTER); universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); scene = createSceneGraph(); universe.addBranchGraph(scene); } private BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); root.setCapability(BranchGroup.ALLOW_DETACH); root.addChild( createLight() ); Point3d[] vertices = new Point3d[3]; vertices[0] = new Point3d(-0.4, -0.8, 0.0); vertices[1] = new Point3d(0.5, -0.4, 0.0); vertices[2] = new Point3d(-0.6, 0.7, -0.4); Vector3f faceNormal = calcFaceNormal(vertices); Vector3f[] normals = new Vector3f[3]; for (int i=0; i