// Java 3D Test Applet // QuatTest.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; import com.sun.j3d.utils.geometry.ColorCube; import com.sun.j3d.utils.behaviors.mouse.MouseRotate; import com.sun.j3d.utils.behaviors.mouse.MouseBehaviorCallback; public class QuatTest extends Applet { private Canvas3D canvas = null; private TransformGroup trans = null; private Quat4f quat4f = new Quat4f(); private TuplePanel tuplePanel = null; public QuatTest() { this.setLayout(new BorderLayout()); tuplePanel = new TuplePanel(quat4f); tuplePanel.setColumns(8); tuplePanel.addTupleEventListener( new TupleEventListener() { public void tupleStateChanged(TupleEvent e) { quat4f = e.getQuat4f(); Transform3D t3d = new Transform3D(); trans.getTransform(t3d); t3d.setRotation(quat4f); trans.setTransform(t3d); } }); this.add(tuplePanel, BorderLayout.SOUTH); GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); this.canvas = new Canvas3D(config); this.add(this.canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph(createSceneGraph()); } private BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); trans = new TransformGroup(); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); trans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); trans.setCapability(TransformGroup.ENABLE_PICK_REPORTING); BoundingSphere bounds = new BoundingSphere(new Point3d(), 100.0); MouseRotate rotator = new MouseRotate(trans); rotator.setSchedulingBounds(bounds); rotator.setupCallback( new MouseBehaviorCallback() { public void transformChanged(int flag, Transform3D trans) { trans.get(quat4f); tuplePanel.set(quat4f); } }); root.addChild(rotator); trans.addChild( new ColorCube(0.4) ); root.addChild(trans); return root; } public static void main(String[] args) { QuatTest applet = new QuatTest(); Frame frame = new MainFrame(applet, 500, 500); } }