Color3f specularColourFBox = new Color3f(0.8f,0.0f,0.0f);
float shininessFBox = 128.0f;
Appearance fBoxApp = new Appearance();
fBoxApp.setMaterial(new Material(ambientColourFBox,emissiveColourFBox,
diffuseColourFBox,specularColourFBox,shininessFBox));
//Create the box.
Box fBox = new Box(0.2f,0.2f,0.2f,fBoxApp);
//Add some data to the box in order to identify it, when it is picked.
fBox.setUserData("box");
//Create a transformgroup for the rotation of the box.
TransformGroup tgmBox = new TransformGroup();
tgmBox.addChild(fBox);
//Define the rotation.
Transform3D rotationAxis = new Transform3D();
Alpha boxAlpha = new Alpha(1,2000);
//Set the starting time of the rotation to infinity.
boxAlpha.setStartTime(Long.MAX_VALUE);
RotationInterpolator boxRotation = new RotationInterpolator(boxAlpha,tgmBox,
rotationAxis,0.0f,(float) Math.PI*2);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),100.0);
boxRotation.setSchedulingBounds(bounds);
//Add the rotation to the corresponding transform group.
tgmBox.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
tgmBox.addChild(boxRotation);
//Create a transformgroup for the positioning of the box and add the
//transformgroup with the rotation.
Transform3D tfFBox = new Transform3D();
tfFBox.rotY(Math.PI/6);
Transform3D rotationX = new Transform3D();
rotationX.rotX(-Math.PI/5);
tfFBox.mul(rotationX);
TransformGroup tgFBox = new TransformGroup(tfFBox);
tgFBox.addChild(tgmBox);
//The same for the sphere:
Color3f ambientColourBSphere = new Color3f(0.0f,0.0f,0.0f);
Color3f emissiveColourBSphere = new Color3f(0.0f,0.0f,0.0f);
Color3f diffuseColourBSphere = new Color3f(0.0f,0.5f,0.0f);
Color3f specularColourBSphere = new Color3f(0.0f,0.8f,0.0f);
float shininessBSphere = 128.0f;
Appearance bSphereApp = new Appearance();
bSphereApp.setMaterial(new Material(ambientColourBSphere,
emissiveColourBSphere,
diffuseColourBSphere,
specularColourBSphere,
shininessBSphere));