BranchGroup objRoot = new BranchGroup();
objRoot.addChild(new Axis());
// Create the transform group node and initialize it to the
// identity. Enable the TRANSFORM_WRITE capability so that
// our behavior code can modify it at runtime. Add it to the
// root of the subgraph.
TransformGroup objSpin = new TransformGroup();
objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
// 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, 4000);
RotationInterpolator rotator =
new RotationInterpolator(rotationAlpha, objSpin);
BoundingSphere bounds =
new BoundingSphere(new Point3d(0.0,0.0,0.0), 100.0);
rotator.setSchedulingBounds(bounds);
Transform3D trans = new Transform3D();
trans.set(new Vector3f(0.5f, 0.0f, 0.0f));
TransformGroup objTrans = new TransformGroup(trans);
objRoot.addChild(objSpin);
objSpin.addChild(objTrans);
objSpin.addChild(rotator);
objTrans.addChild(new ColorCube(0.1));
// Let Java 3D perform optimizations on this scene graph.
objRoot.compile();
return objRoot;