public BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); // Create the TransformGroup node and initialize it to the // identity. Enable the TRANSFORM_WRITE capability so that // our behavior code can modify it at run time. Add it to // the root of the subgraph. TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objTrans); // Create a simple Shape3D node; add it to the scene graph. objTrans.addChild(new ColorCube(0.4)); // Create a new Behavior object that will perform the // desired operation on the specified transform and add // it into the scene graph. Transform3D yAxis = new Transform3D(); Alpha rotationAlpha = new Alpha(-1, 4000); RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, objTrans, yAxis, 0.0f, (float) Math.PI * 1.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); rotator.setSchedulingBounds(bounds); objRoot.addChild(rotator); // Have Java 3D perform optimizations on this scene graph. objRoot.compile(); return objRoot; }
// Directional light rotating around the scene and some ambient light. public void addLight(SimpleUniverse su) { BranchGroup bgLight = new BranchGroup(); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), Double.MAX_VALUE); // Directional light (to be rotated). Color3f lightColour = new Color3f(1.0f, 1.0f, 1.0f); Vector3f lightDir = new Vector3f(0.0f, 0.0f, -1.0f); DirectionalLight light = new DirectionalLight(lightColour, lightDir); light.setInfluencingBounds(bounds); // The transformation group for the directional light and its rotation. TransformGroup tfmLight = new TransformGroup(); tfmLight.addChild(light); // The Alpha for the rotation. Alpha alphaLight = new Alpha(-1, 4000); // The rotation RotationInterpolator rot = new RotationInterpolator( alphaLight, tfmLight, new Transform3D(), 0.0f, (float) Math.PI * 2); rot.setSchedulingBounds(bounds); tfmLight.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); tfmLight.addChild(rot); bgLight.addChild(tfmLight); // Ambient light. Color3f ambientLightColour = new Color3f(0.5f, 0.5f, 0.5f); AmbientLight ambLight = new AmbientLight(ambientLightColour); ambLight.setInfluencingBounds(bounds); bgLight.addChild(ambLight); su.addBranchGraph(bgLight); }
/** * principal method used to configure the java3D model of the sky. * * @return a BranchGroup with the model contents. */ protected BranchGroup createSceneGraph() { // ##### Transform Groups ################ // Create the transform group node and initialize it to the // identity. Enable the TRANSFORM_WRITE capability so tha // our behavior code can modify it at runtime. objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objTrans.setCapability(TransformGroup.ALLOW_CHILDREN_READ); objTrans.setCapability(TransformGroup.ALLOW_CHILDREN_WRITE); objTrans.setCapability(TransformGroup.ALLOW_CHILDREN_EXTEND); // #### Grid ######################################## if (this.showGrid) { gridGroup = new BranchGroup(); gridGroup.setCapability(BranchGroup.ALLOW_DETACH); Group3DSphere sphereRaster = new Group3DSphere(12, 24); Appearance sphereRasterApp = new Appearance(); ColoringAttributes sphereRasterColor = new ColoringAttributes(); sphereRasterColor.setColor(0.0f, 0.41176f, 0.80f); // royal blue sphereRasterApp.setColoringAttributes(sphereRasterColor); sphereRaster.setAppearance(sphereRasterApp); gridGroup = new BranchGroup(); gridGroup.addChild(sphereRaster); objTrans.addChild(gridGroup); } // ##### Equator ######################## equatorGroup = new BranchGroup(); equatorGroup.setCapability(BranchGroup.ALLOW_DETACH); Group3DCircle equator = new Group3DCircle(EQUATOR_RADIUS, EQUATOR_RES); Appearance equatorApp = equator.getAppearance(); ColoringAttributes equatorColor = new ColoringAttributes(); equatorColor.setColor(new Color3f(java.awt.Color.YELLOW)); equatorApp.setColoringAttributes(equatorColor); LineAttributes eqLine = new LineAttributes(); eqLine.setLineWidth(3.0f); equatorApp.setLineAttributes(eqLine); equator.setAppearance(equatorApp); equatorGroup.addChild(equator); objTrans.addChild(equatorGroup); // ###################################### // ##### Axis ########################### axisGroup = new Group3DAxis(); axisGroup.setCapability(BranchGroup.ALLOW_DETACH); objTrans.addChild(axisGroup); // ###################################### objScale = new TransformGroup(); objScale.addChild(objTrans); // ##### root of the branch graph ####### BranchGroup objRoot = new BranchGroup(); objRoot.setCapability(BranchGroup.ALLOW_DETACH); objRoot.addChild(objScale); // ###################################### BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), BOUNDINGSPHERE_RADIUS); // ##### Background ##### Background bgNode = new Background(new Color3f(java.awt.Color.BLACK)); bgNode.setApplicationBounds(bounds); objRoot.addChild(bgNode); // ###################################### // ##### Lighting ####################### // Set up the ambient ligh AmbientLight ambientLightNode = new AmbientLight(); ambientLightNode.setInfluencingBounds(bounds); objRoot.addChild(ambientLightNode); // ###################################### // ##### Behaviour ###################### // Create the rotate behavior node // MouseRotateY behavior = new MouseRotateY(); MouseRotate behavior = new MouseRotate(); behavior.setTransformGroup(objTrans); objTrans.addChild(behavior); behavior.setSchedulingBounds(bounds); // Create the zoom behavior node zoom = new MouseZoom(); zoom.setTransformGroup(objTrans); objTrans.addChild(zoom); zoom.setSchedulingBounds(bounds); // Create the translate behavior node MouseTranslate behavior3 = new MouseTranslate(); behavior3.setTransformGroup(objTrans); objTrans.addChild(behavior3); behavior3.setSchedulingBounds(bounds); // Auto rotator Transform3D axis = new Transform3D(); axis.set(new AxisAngle4f(0, 0, 1, 2)); // theta,x,y,z. Alpha mover = new Alpha(0, ALPHA_INC_DURATION); // loop count, period rotator = new RotationInterpolator(mover, objTrans); rotator.setTransformAxis(axis); rotator.setSchedulingBounds(bounds); objTrans.addChild(rotator); return objRoot; }
/** * set up a timer object to drive animation. * * @param alpha specifies the timing parameters. */ public void setAlpha(Alpha alpha) { rotator.setAlpha(alpha); }