//the SimpleUniverse.
public void createSceneGraph(SimpleUniverse su)
{
//A blue Appearance for the cube.
Color3f ambientColourBox = new Color3f(0.0f,0.0f,0.7f);
Color3f emissiveColourBox = new Color3f(0.0f,0.0f,0.0f);
Color3f diffuseColourBox = new Color3f(0.0f,0.0f,0.7f);
Color3f specularColourBox = new Color3f(0.0f,0.0f,0.8f);
float shininessBox = 128.0f;
Appearance boxApp = new Appearance();
boxApp.setMaterial(new Material(ambientColourBox,emissiveColourBox,
diffuseColourBox,specularColourBox,shininessBox));
//Generate the cube.
float cubeHalfLength = 0.1f;
Box moveBox = new Box(cubeHalfLength,cubeHalfLength,cubeHalfLength,boxApp);
//The CollisionBounds for the cube.
moveBox.setCollisionBounds(new BoundingBox(new Point3d(0.0,0.0,0.0),
new Point3d(cubeHalfLength,
cubeHalfLength,
cubeHalfLength)));
moveBox.setCollidable(true);
//Position the cube and assign it to a transformation group.
Transform3D tfBox = new Transform3D();
tfBox.rotY(Math.PI/6);
Transform3D rotationX = new Transform3D();
rotationX.rotX(-Math.PI/5);
tfBox.mul(rotationX);
TransformGroup tgBox = new TransformGroup(tfBox);
tgBox.addChild(moveBox);
//These properties are needed to allow the cube to moved around the scene.
tgBox.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
tgBox.setCapability(TransformGroup.ALLOW_TRANSFORM_READ);
tgBox.setCapability(TransformGroup.ENABLE_PICK_REPORTING);
//Generate a golden Appearance for the cylinder.
Color3f ambientColourCylinder = new Color3f(0.0f,0.0f,0.0f);
Color3f emissiveColourCylinder = new Color3f(0.0f,0.0f,0.0f);
Color3f diffuseColourCylinder = new Color3f(0.8f,0.4f,0.0f);
Color3f specularColourCylinder = new Color3f(0.8f,0.8f,0.0f);
float shininessCylinder = 100.0f;
Appearance yellowCylinderApp = new Appearance();
yellowCylinderApp.setMaterial(new Material(ambientColourCylinder,
emissiveColourCylinder,
diffuseColourCylinder,
specularColourCylinder,
shininessCylinder));
//Generate the cylinder.
Cylinder cyli = new Cylinder(0.1f,0.3f,yellowCylinderApp);
//The CollisionBounds for the cylinder.
cyli.setCollisionBounds(new BoundingBox(new Point3d(0.0,-0.15,0.0),
new Point3d(0.1,0.15,0.1)));
cyli.setCollidable(true);
//Position the cylinder and assign it to a transformation group.
Transform3D tfCylinder = new Transform3D();
tfCylinder.mul(rotationX);
Transform3D positionCyl = new Transform3D();
positionCyl.setTranslation(new Vector3f(-0.7f,0.0f,0.0f));
tfCylinder.mul(positionCyl);
TransformGroup tgCylinder = new TransformGroup(tfCylinder);
tgCylinder.addChild(cyli);
//This transformation group is needed for the movement of the cylinder.
TransformGroup tgmCyl = new TransformGroup();
tgmCyl.addChild(tgCylinder);
//The movement from left to right.
Transform3D escape = new Transform3D();
Alpha cylAlphaR = new Alpha(1,2000);
//The starting time is first postponed until "infinity".
cylAlphaR.setStartTime(Long.MAX_VALUE);
//The interpolator for the movement.
float maxRight = 0.5f;
PositionInterpolator cylMoveR = new PositionInterpolator(cylAlphaR,tgmCyl,
escape,0.0f,maxRight);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE);
cylMoveR.setSchedulingBounds(bounds);
//The same for the movement from right to left.
Alpha cylAlphaL = new Alpha(1,2000);
cylAlphaL.setStartTime(Long.MAX_VALUE);
PositionInterpolator cylMoveL = new PositionInterpolator(cylAlphaL,tgmCyl,
escape,maxRight,0.0f);
cylMoveL.setSchedulingBounds(bounds);
//Add the movements to the transformation group.
tgmCyl.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
tgmCyl.addChild(cylMoveR);
tgmCyl.addChild(cylMoveL);
//A Switch for the green and the red sphere.
Switch colourSwitch = new Switch();
colourSwitch.setCapability(Switch.ALLOW_SWITCH_WRITE);
//An Appearance for the green sphere.
Color3f ambientColourGSphere = new Color3f(0.0f,0.8f,0.0f);
Color3f emissiveColourGSphere = new Color3f(0.0f,0.0f,0.0f);
Color3f diffuseColourGSphere = new Color3f(0.0f,0.8f,0.0f);
Color3f specularColourGSphere = new Color3f(0.0f,0.8f,0.0f);
float shininessGSphere = 1.0f;
Appearance greenSphereApp = new Appearance();
greenSphereApp.setMaterial(new Material(ambientColourGSphere,
emissiveColourGSphere,
diffuseColourGSphere,
specularColourGSphere,
shininessGSphere));
//Generate the green sphere.
float radius = 0.1f;
Sphere greenSphere = new Sphere(radius,greenSphereApp);
//The same for the red sphere.
Color3f ambientColourRSphere = new Color3f(0.6f,0.0f,0.0f);
Color3f emissiveColourRSphere = new Color3f(0.0f,0.0f,0.0f);
Color3f diffuseColourRSphere = new Color3f(0.6f,0.0f,0.0f);
Color3f specularColourRSphere = new Color3f(0.8f,0.0f,0.0f);
float shininessRSphere = 20.0f;
Appearance redSphereApp = new Appearance();
redSphereApp.setMaterial(new Material(ambientColourRSphere,emissiveColourRSphere,