// Create the root of the branch graph
BranchGroup objRoot = new BranchGroup();
Transform3D t3D = new Transform3D();
t3D.setTranslation(new Vector3f(0.0f, 0.0f, -3.0f));
TransformGroup objMove = new TransformGroup(t3D);
objRoot.addChild(objMove);
// Create the transform group node and initialize it to the
// identity. Add it to the root of the subgraph.
TransformGroup objSpin = new TransformGroup();
objSpin.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
objMove.addChild(objSpin);
Appearance textAppear = new Appearance();
ColoringAttributes textColor = new ColoringAttributes();
textColor.setColor(1.0f, 0.0f, 0.0f);
textAppear.setColoringAttributes(textColor);
textAppear.setMaterial(new Material());
// Create a simple shape leaf node, add it to the scene graph.
Font3D font3D = new Font3D(new Font("Helvetica", Font.PLAIN, 1),
new FontExtrusion());
Text3D textGeom = new Text3D(font3D, new String("3DText"));
textGeom.setAlignment(Text3D.ALIGN_CENTER);
Shape3D textShape = new Shape3D();
textShape.setGeometry(textGeom);
textShape.setAppearance(textAppear);
objSpin.addChild(textShape);
// Create a new Behavior object that will perform the desired
// operation on the specified transform object and add it into
// the scene graph.
Alpha rotationAlpha = new Alpha(-1, 10000);
RotationInterpolator rotator =
new RotationInterpolator(rotationAlpha, objSpin);
// a bounding sphere specifies a region a behavior is active
// create a sphere centered at the origin with radius of 100
BoundingSphere bounds = new BoundingSphere();
rotator.setSchedulingBounds(bounds);
objSpin.addChild(rotator);
DirectionalLight lightD = new DirectionalLight();
lightD.setInfluencingBounds(bounds);
lightD.setDirection(new Vector3f(0.0f, 0.0f, -1.0f));
lightD.setColor(new Color3f(1.0f, 0.0f, 1.0f));
objMove.addChild(lightD);
AmbientLight lightA = new AmbientLight();
lightA.setInfluencingBounds(bounds);
objMove.addChild(lightA);
return objRoot;