List of usage examples for javax.media.j3d TransformGroup ALLOW_TRANSFORM_READ
int ALLOW_TRANSFORM_READ
To view the source code for javax.media.j3d TransformGroup ALLOW_TRANSFORM_READ.
Click Source Link
From source file:SplineAnim.java
public BranchGroup createSceneGraph() { // Colors for lights and objects Color3f aColor = new Color3f(0.2f, 0.2f, 0.2f); Color3f eColor = new Color3f(0.0f, 0.0f, 0.0f); Color3f sColor = new Color3f(1.0f, 1.0f, 1.0f); Color3f coneColor = new Color3f(0.9f, 0.1f, 0.1f); Color3f sphereColor = new Color3f(0.1f, 0.7f, 0.9f); Color3f bgColor = new Color3f(0.0f, 0.0f, 0.0f); Color3f lightColor = new Color3f(1.0f, 1.0f, 1.0f); // Root of the branch grsph BranchGroup root = new BranchGroup(); // Create transforms such that all objects appears in the scene sceneTransform = new Transform3D(); sceneTransform.setScale(0.14f);//from ww w .j a v a2 s . c om Transform3D yrot = new Transform3D(); yrot.rotY(-Math.PI / 5.0d); sceneTransform.mul(yrot); sceneTransformGroup = new TransformGroup(sceneTransform); sceneTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); sceneTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); root.addChild(sceneTransformGroup); // Create bounds for the background and lights bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0f); // Set up the background Background bg = new Background(bgColor); bg.setApplicationBounds(bounds); sceneTransformGroup.addChild(bg); // Create the transform group node for the lights lightTransform1 = new Transform3D(); lightTransform2 = new Transform3D(); Vector3d lightPos1 = new Vector3d(0.0, 0.0, 2.0); Vector3d lightPos2 = new Vector3d(1.0, 0.0, -2.0); lightTransform1.set(lightPos1); lightTransform2.set(lightPos2); light1TransformGroup = new TransformGroup(lightTransform1); light2TransformGroup = new TransformGroup(lightTransform2); sceneTransformGroup.addChild(light1TransformGroup); sceneTransformGroup.addChild(light2TransformGroup); // Create lights AmbientLight ambLight = new AmbientLight(aColor); Light dirLight1; Light dirLight2; Vector3f lightDir1 = new Vector3f(lightPos1); Vector3f lightDir2 = new Vector3f(lightPos2); lightDir1.negate(); lightDir2.negate(); dirLight1 = new DirectionalLight(lightColor, lightDir1); dirLight2 = new DirectionalLight(lightColor, lightDir2); // Set the influencing bounds ambLight.setInfluencingBounds(bounds); dirLight1.setInfluencingBounds(bounds); dirLight2.setInfluencingBounds(bounds); // Add the lights into the scene graph sceneTransformGroup.addChild(ambLight); sceneTransformGroup.addChild(dirLight1); sceneTransformGroup.addChild(dirLight2); // Create a cone and add it to the scene graph. objTransform = new Transform3D(); objTransformGroup = new TransformGroup(objTransform); objTransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); sceneTransformGroup.addChild(objTransformGroup); Material m = new Material(coneColor, eColor, coneColor, sColor, 100.0f); Appearance a = new Appearance(); m.setLightingEnable(true); a.setMaterial(m); Cone cone = new Cone(0.4f, 1.0f); cone.setAppearance(a); objTransformGroup.addChild(cone); // Create transform groups for each knot point // knot point 0 Transform3D t3dKnot = new Transform3D(); t3dKnot.set(pos0); TransformGroup k0TransformGroup = new TransformGroup(t3dKnot); sceneTransformGroup.addChild(k0TransformGroup); // knot point 1 t3dKnot = new Transform3D(); t3dKnot.set(pos1); TransformGroup k1TransformGroup = new TransformGroup(t3dKnot); sceneTransformGroup.addChild(k1TransformGroup); // knot point 2 t3dKnot = new Transform3D(); t3dKnot.set(pos2); TransformGroup k2TransformGroup = new TransformGroup(t3dKnot); sceneTransformGroup.addChild(k2TransformGroup); // knot point 3 t3dKnot = new Transform3D(); t3dKnot.set(pos3); TransformGroup k3TransformGroup = new TransformGroup(t3dKnot); sceneTransformGroup.addChild(k3TransformGroup); // knot point 4 t3dKnot = new Transform3D(); t3dKnot.set(pos4); TransformGroup k4TransformGroup = new TransformGroup(t3dKnot); sceneTransformGroup.addChild(k4TransformGroup); // knot point 5 t3dKnot = new Transform3D(); t3dKnot.set(pos5); TransformGroup k5TransformGroup = new TransformGroup(t3dKnot); sceneTransformGroup.addChild(k5TransformGroup); // Create spheres for each knot point's transform group ColoringAttributes sphereColorAttr = new ColoringAttributes(); sphereColorAttr.setColor(sphereColor); Appearance sphereAppearance = new Appearance(); sphereAppearance.setColoringAttributes(sphereColorAttr); k0TransformGroup.addChild(new Sphere(0.10f, sphereAppearance)); k1TransformGroup.addChild(new Sphere(0.10f, sphereAppearance)); k2TransformGroup.addChild(new Sphere(0.10f, sphereAppearance)); k3TransformGroup.addChild(new Sphere(0.10f, sphereAppearance)); k4TransformGroup.addChild(new Sphere(0.10f, sphereAppearance)); k5TransformGroup.addChild(new Sphere(0.10f, sphereAppearance)); return root; }
From source file:edu.uci.ics.jung.visualization3d.VisualizationViewer.java
public void setGraphLayout(Layout<V, E> inLayout) { // this.layout = inLayout; this.graph = inLayout.getGraph(); BranchGroup branch = new BranchGroup(); LayoutEventBroadcaster<V, E> elayout = new LayoutEventBroadcaster<V, E>(inLayout); this.layout = elayout; for (V v : graph.getVertices()) { VertexGroup<V> vg = new VertexGroup<V>(v, renderContext.getVertexShapeTransformer().transform(v)); vg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); vg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); vertexMap.put(v, vg);//from w ww .j a v a 2 s . co m branch.addChild(vg); String label = renderContext.getVertexStringer().transform(v); if (label != null) { String fontName = "Serif"; Font3D f3d = new Font3D(new Font(fontName, Font.PLAIN, 2), new FontExtrusion()); Text3D txt = new Text3D(f3d, label, new Point3f(2f, 2f, 0)); OrientedShape3D textShape = new OrientedShape3D(); textShape.setGeometry(txt); textShape.setAppearance(grayLook); // textShape.setAlignmentAxis( 0.0f, 1.0f, 0.0f); textShape.setAlignmentMode(OrientedShape3D.ROTATE_ABOUT_POINT); textShape.setRotationPoint(new Point3f()); // objScale.addChild( textShape ); // BranchGroup bg = new BranchGroup(); // bg.addChild(textShape); // branch.addChild(bg); // Text2D text = new Text2D(label+" more text here", new Color3f(0,0,0),"Serif",50,Font.BOLD); Transform3D tt = new Transform3D(); // tt.setTranslation(new Vector3f(100,100,100)); tt.setScale(5); TransformGroup tg = new TransformGroup(tt); // textShape.setGeometry(text); tg.addChild(textShape); BranchGroup bg = new BranchGroup(); bg.addChild(tg); // branch.addChild(bg); vg.getLabelNode().addChild(bg); } } System.err.println("vertexMap = " + vertexMap); for (E edge : graph.getEdges()) { EdgeGroup<E> eg = new EdgeGroup<E>(edge, renderContext.getEdgeShapeTransformer() .transform(Context.<Graph<V, E>, E>getInstance(graph, edge))); eg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); eg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); edgeMap.put(edge, eg); branch.addChild(eg); } // System.err.println("branch is "+branch); // for(int i=0; i<branch.numChildren(); i++) { // System.err.println("branch child ["+i+"] is "+branch.getChild(i)); // } objTrans.addChild(branch); elayout.addChangeListener(new ChangeListener() { public void stateChanged(ChangeEvent e) { for (V v : vertexMap.keySet()) { Point3f p = VisualizationViewer.this.layout.transform(v); Vector3f pv = new Vector3f(p.getX(), p.getY(), p.getZ()); Transform3D tx = new Transform3D(); tx.setTranslation(pv); vertexMap.get(v).setTransform(tx); } for (E edge : graph.getEdges()) { Pair<V> endpoints = graph.getEndpoints(edge); V start = endpoints.getFirst(); V end = endpoints.getSecond(); EdgeGroup eg = edgeMap.get(edge); eg.setEndpoints(layout.transform(start), layout.transform(end)); } } }); elayout.setSize(new BoundingSphere(new Point3d(), 200)); elayout.initialize(); VisRunner runner = new VisRunner((IterativeContext) elayout); runner.relax(); // for(int i=0; i<objTrans.numChildren(); i++) { // System.err.println("objTrans child ["+i+"] is "+objTrans.getChild(i)); // } }
From source file:TransformExplorer.java
BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); // Create a TransformGroup to scale the scene down by 3.5x TransformGroup objScale = new TransformGroup(); Transform3D scaleTrans = new Transform3D(); scaleTrans.set(1 / 3.5f); // scale down by 3.5x objScale.setTransform(scaleTrans);/*from w ww .ja v a 2 s.c om*/ objRoot.addChild(objScale); // Create a TransformGroup and initialize it to the // identity. Enable the TRANSFORM_WRITE capability so that // the mouse behaviors code can modify it at runtime. Add it to the // root of the subgraph. TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objScale.addChild(objTrans); // Add the primitives to the scene objTrans.addChild(createConeTransformGroup()); // the cone rotAxis = new RotAxis(rotAxisLength); // the axis objTrans.addChild(rotAxis); coordSys = new CoordSys(coordSysLength); // the coordSys objTrans.addChild(coordSys); BoundingSphere bounds = new BoundingSphere(new Point3d(), 100.0); // The book used a white background for the figures //Background bg = new Background(new Color3f(1.0f, 1.0f, 1.0f)); //bg.setApplicationBounds(bounds); //objTrans.addChild(bg); // Set up the ambient light Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f); AmbientLight ambientLightNode = new AmbientLight(ambientColor); ambientLightNode.setInfluencingBounds(bounds); objRoot.addChild(ambientLightNode); // Set up the directional lights Color3f light1Color = new Color3f(1.0f, 1.0f, 1.0f); Vector3f light1Direction = new Vector3f(0.0f, -0.2f, -1.0f); DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction); light1.setInfluencingBounds(bounds); objRoot.addChild(light1); return objRoot; }
From source file:TickTockPicking.java
private Group createObject(Appearance app, double scale, double xpos, double ypos) { // Create a transform group node to scale and position the object. Transform3D t = new Transform3D(); t.set(scale, new Vector3d(xpos, ypos, 0.0)); TransformGroup objTrans = new TransformGroup(t); // Create a second transform group node and initialize it to the // identity. Enable the TRANSFORM_WRITE capability so that // our behavior code can modify it at runtime. TransformGroup spinTg = new TransformGroup(); spinTg.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); spinTg.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); // Create a simple shape leaf node and set the appearance Shape3D shape = new Tetrahedron(); shape.setAppearance(app);//from ww w .j a v a2 s . c o m shape.setCapability(shape.ALLOW_APPEARANCE_READ); shape.setCapability(shape.ALLOW_APPEARANCE_WRITE); // add it to the scene graph. spinTg.addChild(shape); // Create a new Behavior object that will perform the desired // operation on the specified transform object and add it into // the scene graph. Transform3D yAxis = new Transform3D(); Alpha rotationAlpha = new Alpha(-1, Alpha.INCREASING_ENABLE, 0, 0, 5000, 0, 0, 0, 0, 0); RotationInterpolator rotator = new RotationInterpolator(rotationAlpha, spinTg, yAxis, 0.0f, (float) Math.PI * 2.0f); BoundingSphere bounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); rotator.setSchedulingBounds(bounds); // Add the behavior and the transform group to the object objTrans.addChild(rotator); objTrans.addChild(spinTg); return objTrans; }
From source file:Demo3D.java
/** * Create the ViewBranch//from w ww . ja v a2 s . co m * * @return javax.media.j3d.BranchGroup vbBrGr - the root of the ViewBranch */ public BranchGroup myViewBranch() { // Create the minimal PhysicalBody and PhysicalEnvironnement // instances with default parameters. body = new PhysicalBody(); environment = new PhysicalEnvironment(); // Create a View instance and attach the Canvas3D, the PhysicalBody // and the PhysicalEnvironment to it. view = new View(); view.setFrontClipDistance(0.02); // Default value is 0.1 m view.setBackClipDistance(40.0); // Default value is 10 m // Rem.: BackClipDistance / FrontClipDistance = 2000 > 1000 but < 3000 view.addCanvas3D(canvas3D); view.setPhysicalBody(body); view.setPhysicalEnvironment(environment); /* * // Choices of the projection type. They are 2 possibilities, namely: // * PERSPECTIVE_PROJECTION and PARALLEL_PROJECTION. // Note: the default * value is PERSPECTIVE_PROJECTION * view.setProjectionPolicy(View.PARALLEL_PROJECTION); */ // Create a ViewPlatform instance and bind it with the View instance. viewPlat = new ViewPlatform(); viewPlat.setActivationRadius(40.0f); // Default value is 62 m view.attachViewPlatform(viewPlat); // Create the action volume for the camera's navigation. cameraBounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100.0); // Create the two necessary TransformGroups for the ViewPlatform's // motion (6 translations and 4 rotations). vpTrGrKeys_Rot_Up_Down = new TransformGroup(); vpTrGrKeys_Transl_Turn = new TransformGroup(); // With the ALLOW_TRANSFORM_READ and ALLOW_TRANSFORM_WRITE // capabilities, we allow the modification of the TransformGroup's // code by the Behavior's code at run time. vpTrGrKeys_Transl_Turn.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); vpTrGrKeys_Transl_Turn.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); vpTrGrKeys_Rot_Up_Down.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); vpTrGrKeys_Rot_Up_Down.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); // Attach the ViewPlatform to the vpTrGrKeys_Rot_Up_Down node. vpTrGrKeys_Rot_Up_Down.addChild(viewPlat); // Create and attach an aimer to the TransformGroup node // vpTrGrKeys_Rot_Up_Down. aimer = new Aimer(1.5f); vpTrGrKeys_Rot_Up_Down.addChild(aimer.myAimer()); // View-platform's motion ==> camera's navigation: 6 translations and 4 // rotations. // Create and attach the camera's rotation on the vpTrGrKeys_Rot_Up_Down // node. camera_Rot_Up_Down = new Camera_Rot_Up_Down(vpTrGrKeys_Rot_Up_Down); camera_Rot_Up_Down.setSchedulingBounds(cameraBounds); vpTrGrKeys_Rot_Up_Down.addChild(camera_Rot_Up_Down); // Create and attach the camera's translation and rotation instances // on the vpTrGrKeys_Transl_Turn node. camera_Transl_Turn = new Camera_Transl_Turn(vpTrGrKeys_Transl_Turn); camera_Transl_Turn.setSchedulingBounds(cameraBounds); vpTrGrKeys_Transl_Turn.addChild(camera_Transl_Turn); // Attach the vpTrGrKeys_Rot_Up_Down node to the vpTrGrKeys_Transl_Turn // node. vpTrGrKeys_Transl_Turn.addChild(vpTrGrKeys_Rot_Up_Down); // Give the starting position of the ViewPlatform. trStart = new Transform3D(); // Identity matrix trStart.set(new Vector3f(0.0f, 0.0f, 10.0f)); // Translation of the // camera (0,0,10) // Create the TransformGroup node for the ViewPlatform's // starting position. vpTrGrStart = new TransformGroup(trStart); // Attach the vpTrGrKeys_Transl_Turn node to the TransformGroup // node vpTrGrStart. vpTrGrStart.addChild(vpTrGrKeys_Transl_Turn); // Add the TransformGroup node vpTrGrStart to the view // BranchGroup node vbBrGr. vbBrGr = new BranchGroup(); vbBrGr.addChild(vpTrGrStart); // Compile the ViewBranch to optimize the performances. vbBrGr.compile(); // Return the final version of the view branch BranchGroup node vbBrGr. return vbBrGr; }
From source file:AvatarTest.java
public CarSteering(TransformGroup tg) { m_TransformGroup = tg;// w w w. ja v a2s. com try { m_TransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); m_TransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); } catch (Exception e) { } wakeupOne = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); wakeupArray[0] = wakeupOne; wakeupCondition = new WakeupOr(wakeupArray); }
From source file:Human1.java
BranchGroup createSceneGraph() { // Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); // Create a TransformGroup to scale the scene down by 3.5x // TODO: move view platform instead of scene using orbit behavior TransformGroup objScale = new TransformGroup(); Transform3D scaleTrans = new Transform3D(); scaleTrans.set(1 / 3.5f); // scale down by 3.5x objScale.setTransform(scaleTrans);//from w ww .j a v a 2s . c om objRoot.addChild(objScale); // Create a TransformGroup and initialize it to the // identity. Enable the TRANSFORM_WRITE capability so that // the mouse behaviors code can modify it at runtime. Add it to the // root of the subgraph. TransformGroup objTrans = new TransformGroup(); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objTrans.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); objScale.addChild(objTrans); // Add the primitives to the scene createHuman(); // the human objTrans.addChild(Human_body); BoundingSphere bounds = new BoundingSphere(new Point3d(), 100.0); Background bg = new Background(new Color3f(1.0f, 1.0f, 1.0f)); bg.setApplicationBounds(bounds); objTrans.addChild(bg); // set up the mouse rotation behavior MouseRotate mr = new MouseRotate(); mr.setTransformGroup(objTrans); mr.setSchedulingBounds(bounds); mr.setFactor(0.007); objTrans.addChild(mr); // Set up the ambient light Color3f ambientColor = new Color3f(0.1f, 0.1f, 0.1f); AmbientLight ambientLightNode = new AmbientLight(ambientColor); ambientLightNode.setInfluencingBounds(bounds); objRoot.addChild(ambientLightNode); // Set up the directional lights Color3f light1Color = new Color3f(1.0f, 1.0f, 1.0f); Vector3f light1Direction = new Vector3f(0.0f, -0.2f, -1.0f); DirectionalLight light1 = new DirectionalLight(light1Color, light1Direction); light1.setInfluencingBounds(bounds); objRoot.addChild(light1); return objRoot; }
From source file:IntersectTest.java
public IntersectInfoBehavior(Canvas3D canvas3D, BranchGroup branchGroup, float size) { pickCanvas = new PickCanvas(canvas3D, branchGroup); pickCanvas.setTolerance(5.0f);//w ww .jav a 2 s. com pickCanvas.setMode(PickCanvas.GEOMETRY_INTERSECT_INFO); this.size = size; // Create an Appearance. redlook = new Appearance(); Color3f objColor = new Color3f(0.5f, 0.0f, 0.0f); Color3f black = new Color3f(0.0f, 0.0f, 0.0f); Color3f white = new Color3f(1.0f, 1.0f, 1.0f); redlook.setMaterial(new Material(objColor, black, objColor, white, 50.0f)); redlook.setCapability(Appearance.ALLOW_MATERIAL_WRITE); redlookwf = new Appearance(); redlookwf.setMaterial(new Material(objColor, black, objColor, white, 50.0f)); PolygonAttributes pa = new PolygonAttributes(); pa.setPolygonMode(pa.POLYGON_LINE); pa.setCullFace(pa.CULL_NONE); redlookwf.setPolygonAttributes(pa); oldlook = new Appearance(); objColor = new Color3f(1.0f, 1.0f, 1.0f); oldlook.setMaterial(new Material(objColor, black, objColor, white, 50.0f)); greenlook = new Appearance(); objColor = new Color3f(0.0f, 0.8f, 0.0f); greenlook.setMaterial(new Material(objColor, black, objColor, white, 50.0f)); bluelook = new Appearance(); objColor = new Color3f(0.0f, 0.0f, 0.8f); bluelook.setMaterial(new Material(objColor, black, objColor, white, 50.0f)); for (int i = 0; i < 6; i++) { switch (i) { case 0: sph[i] = new Sphere(size * 1.15f, redlook); break; case 1: sph[i] = new Sphere(size * 1.1f, greenlook); break; default: sph[i] = new Sphere(size, bluelook); break; } sph[i].setPickable(false); sphTrans[i] = new TransformGroup(); sphTrans[i].setCapability(TransformGroup.ALLOW_TRANSFORM_READ); sphTrans[i].setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); // Add sphere, transform branchGroup.addChild(sphTrans[i]); sphTrans[i].addChild(sph[i]); } }
From source file:LightTest.java
public Group createGeometry() { Point3f pos = new Point3f(); ((PointLight) m_Light).getPosition(pos); m_TransformGroup = new TransformGroup(); m_TransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); m_TransformGroup.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); Transform3D t3d = new Transform3D(); t3d.setTranslation(new Vector3f(pos.x, pos.y, pos.z)); m_TransformGroup.setTransform(t3d);/* ww w .j av a2 s . com*/ m_Sphere = new Sphere(0.2f, Primitive.ENABLE_APPEARANCE_MODIFY | Primitive.GENERATE_NORMALS, 16); m_TransformGroup.addChild(m_Sphere); m_TransformGroup.addChild(super.createGeometry()); return (Group) m_TransformGroup; }
From source file:ExText.java
/** * Builds the 3D universe by constructing a virtual universe (via * SimpleUniverse), a view platform (via SimpleUniverse), and a view (via * SimpleUniverse). A headlight is added and a set of behaviors initialized * to handle navigation types./*from w w w . ja va2s .c om*/ */ protected void buildUniverse() { // // Create a SimpleUniverse object, which builds: // // - a Locale using the given hi-res coordinate origin // // - a ViewingPlatform which in turn builds: // - a MultiTransformGroup with which to move the // the ViewPlatform about // // - a ViewPlatform to hold the view // // - a BranchGroup to hold avatar geometry (if any) // // - a BranchGroup to hold view platform // geometry (if any) // // - a Viewer which in turn builds: // - a PhysicalBody which characterizes the user's // viewing preferences and abilities // // - a PhysicalEnvironment which characterizes the // user's rendering hardware and software // // - a JavaSoundMixer which initializes sound // support within the 3D environment // // - a View which renders the scene into a Canvas3D // // All of these actions could be done explicitly, but // using the SimpleUniverse utilities simplifies the code. // if (debug) System.err.println("Building scene graph..."); SimpleUniverse universe = new SimpleUniverse(null, // Hi-res coordinate // for the origin - // use default 1, // Number of transforms in MultiTransformGroup exampleCanvas, // Canvas3D into which to draw null); // URL for user configuration file - use defaults // // Get the viewer and create an audio device so that // sound will be enabled in this content. // Viewer viewer = universe.getViewer(); viewer.createAudioDevice(); // // Get the viewing platform created by SimpleUniverse. // From that platform, get the inner-most TransformGroup // in the MultiTransformGroup. That inner-most group // contains the ViewPlatform. It is this inner-most // TransformGroup we need in order to: // // - add a "headlight" that always aims forward from // the viewer // // - change the viewing direction in a "walk" style // // The inner-most TransformGroup's transform will be // changed by the walk behavior (when enabled). // ViewingPlatform viewingPlatform = universe.getViewingPlatform(); exampleViewTransform = viewingPlatform.getViewPlatformTransform(); // // Create a "headlight" as a forward-facing directional light. // Set the light's bounds to huge. Since we want the light // on the viewer's "head", we need the light within the // TransformGroup containing the ViewPlatform. The // ViewingPlatform class creates a handy hook to do this // called "platform geometry". The PlatformGeometry class is // subclassed off of BranchGroup, and is intended to contain // a description of the 3D platform itself... PLUS a headlight! // So, to add the headlight, create a new PlatformGeometry group, // add the light to it, then add that platform geometry to the // ViewingPlatform. // BoundingSphere allBounds = new BoundingSphere(new Point3d(0.0, 0.0, 0.0), 100000.0); PlatformGeometry pg = new PlatformGeometry(); headlight = new DirectionalLight(); headlight.setColor(White); headlight.setDirection(new Vector3f(0.0f, 0.0f, -1.0f)); headlight.setInfluencingBounds(allBounds); headlight.setCapability(Light.ALLOW_STATE_WRITE); pg.addChild(headlight); viewingPlatform.setPlatformGeometry(pg); // // Create the 3D content BranchGroup, containing: // // - a TransformGroup who's transform the examine behavior // will change (when enabled). // // - 3D geometry to view // // Build the scene root BranchGroup sceneRoot = new BranchGroup(); // Build a transform that we can modify exampleSceneTransform = new TransformGroup(); exampleSceneTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_READ); exampleSceneTransform.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); exampleSceneTransform.setCapability(Group.ALLOW_CHILDREN_EXTEND); // // Build the scene, add it to the transform, and add // the transform to the scene root // if (debug) System.err.println(" scene..."); Group scene = this.buildScene(); exampleSceneTransform.addChild(scene); sceneRoot.addChild(exampleSceneTransform); // // Create a pair of behaviors to implement two navigation // types: // // - "examine": a style where mouse drags rotate about // the scene's origin as if it is an object under // examination. This is similar to the "Examine" // navigation type used by VRML browsers. // // - "walk": a style where mouse drags rotate about // the viewer's center as if the viewer is turning // about to look at a scene they are in. This is // similar to the "Walk" navigation type used by // VRML browsers. // // Aim the examine behavior at the scene's TransformGroup // and add the behavior to the scene root. // // Aim the walk behavior at the viewing platform's // TransformGroup and add the behavior to the scene root. // // Enable one (and only one!) of the two behaviors // depending upon the current navigation type. // examineBehavior = new ExamineViewerBehavior(exampleSceneTransform, // Transform // gorup // to // modify exampleFrame); // Parent frame for cusor changes examineBehavior.setSchedulingBounds(allBounds); sceneRoot.addChild(examineBehavior); walkBehavior = new WalkViewerBehavior(exampleViewTransform, // Transform // group to // modify exampleFrame); // Parent frame for cusor changes walkBehavior.setSchedulingBounds(allBounds); sceneRoot.addChild(walkBehavior); if (navigationType == Walk) { examineBehavior.setEnable(false); walkBehavior.setEnable(true); } else { examineBehavior.setEnable(true); walkBehavior.setEnable(false); } // // Compile the scene branch group and add it to the // SimpleUniverse. // if (shouldCompile) sceneRoot.compile(); universe.addBranchGraph(sceneRoot); reset(); }