// Java 3D Test Applet // CylinderApplet.java // Copyright (c) 1999 ENDO Yasuyuki // mailto:yasuyuki@javaopen.org // http://www.javaopen.org/j3dbook/index.html import java.applet.*; import java.awt.*; 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.Cylinder; import com.sun.j3d.utils.behaviors.picking.PickRotateBehavior; import com.sun.j3d.utils.behaviors.picking.PickTranslateBehavior; import com.sun.j3d.utils.behaviors.picking.PickZoomBehavior; public class CylinderApplet extends Applet { private Canvas3D canvas = null; public CylinderApplet() { GraphicsConfiguration config = SimpleUniverse.getPreferredConfiguration(); this.canvas = new Canvas3D(config); this.setLayout(new BorderLayout()); this.add(this.canvas, BorderLayout.CENTER); SimpleUniverse universe = new SimpleUniverse(canvas); universe.getViewingPlatform().setNominalViewingTransform(); universe.addBranchGraph(createSceneGraph()); } private BranchGroup createSceneGraph() { BranchGroup root = new BranchGroup(); root.addChild(createLight(0.0f, 0.0f, -1.0f)); //root.addChild(createLight(0.3f, -0.3f, -0.3f)); TransformGroup 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); PickRotateBehavior rotator = new PickRotateBehavior(root, this.canvas, bounds); root.addChild(rotator); PickTranslateBehavior translator = new PickTranslateBehavior(root, this.canvas, bounds); root.addChild(translator); PickZoomBehavior zoomer = new PickZoomBehavior(root, this.canvas, bounds); root.addChild(zoomer); Cylinder cylinder = new Cylinder( 0.3f, 0.9f, Cylinder.GENERATE_NORMALS, createAppearance()); trans.addChild(cylinder); root.addChild(trans); return root; } private Appearance createAppearance() { Appearance app = new Appearance(); Material mat = new Material(); mat.setDiffuseColor(1.0f, 0.0f, 0.0f); //mat.setSpecularColor(0.1f, 0.1f, 0.1f); app.setMaterial(mat); return app; } private Light createLight(float x, float y, float z) { DirectionalLight light = new DirectionalLight( true, new Color3f(1.0f, 1.0f, 1.0f), new Vector3f(x, y, z)); light.setInfluencingBounds(new BoundingSphere(new Point3d(), 100.0)); return light; } public static void main(String[] args) { CylinderApplet applet = new CylinderApplet(); Frame frame = new MainFrame(applet, 250, 250); } }