public BranchGroup createSceneGraph() { // 1. Create the root of the branch graph BranchGroup objRoot = new BranchGroup(); TransformGroup objRotate = new TransformGroup(); // 4. objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objRotate); objRotate.addChild(new ColorCube(0.4)); // 2. SimpleBehavior myRotationBehavior = new SimpleBehavior(objRotate); // 3. myRotationBehavior.setSchedulingBounds(new BoundingSphere()); // 2. objRoot.addChild(myRotationBehavior); // Let Java 3D perform optimizations on this scene graph. objRoot.compile(); return objRoot; } // end of CreateSceneGraph method of SimpleBehaviorApp
Finding or writing the appropriate behavior class for
your application is the beginning of writing an interactive Java 3D program.
The first step in adding a behavior involves making sure the scene graph makes
provisions for the behavior. For example, to use the SimpleBehavior class from
the previous section there must be a TransformGroup in the scene graph above
the object(s) to be rotated.
Many behaviors need only a single TransformGroup object; however, scene graph
requirements for a behavior is application and behavior dependent and may be
more complex.
Having established the support for a behavior, an instance of the class must be added to the scene graph. Without being a part of a live scene graph, there is no way a behavior can be initialized. In fact, a behavior object that is not part of the scene graph will become garbage and be eliminated on the next garbage collection.
The last step for adding a behavior is to provide a scheduling bounds for the behavior. To improve efficiency, Java 3D uses the scheduling bounds to perform execution culling. Behavior is only active when its scheduling bounds intersects a ViewPlatform's activation volume. Only active behaviors are eligible to receive stimuli. In this way, stimuli can be ignored for some behaviors. The programmer has control over the execution culling through the selection of the scheduling bounds of the behavior.