//Half edge length of the cube that represents the platform.
float platformSize = 0.1f;
//Generate the platform in the form of a cube.
Box platform = new Box(platformSize,platformSize,platformSize,redApp);
//A transformation rotating the platform a little bit.
Transform3D tfPlatform = new Transform3D();
tfPlatform.rotY(Math.PI/6);
//The transformation group of the platform.
TransformGroup tgPlatform = new TransformGroup(tfPlatform);
tgPlatform.addChild(platform);
//*** The cockpit of the helicopter. ****
//An Appearance to make the cockpit green.
Appearance greenApp = new Appearance();
setToMyDefaultAppearance(greenApp,new Color3f(0.0f,0.7f,0.0f));
//Radius of the cockpit.
float cabinRadius = 0.1f;
//Generate the cockpit in the form of a sphere.
Sphere cabin = new Sphere(cabinRadius,greenApp);
//The transformation group for the cockpit.
//The cockpit first remains in the origin. Later on, the whole
//helicopter is shifted onto the platform.
TransformGroup tgCabin = new TransformGroup();
tgCabin.addChild(cabin);
//*** The rotor blade of the helicopter with its rotation ***
//An Appearance to make the rotor blade blue.
Appearance blueApp = new Appearance();
setToMyDefaultAppearance(blueApp,new Color3f(0.0f,0.0f,1.0f));
//Generate the rotor blade in the form of a (very thin and long) box.
Box rotor = new Box(0.4f,0.0001f,0.01f,blueApp);
//The transformation group for then rotor blade in which also the
//animated rotation is implemented.
TransformGroup tgmRotor = new TransformGroup();
tgmRotor.addChild(rotor);
//The slow rotation at the beginning.
Transform3D bladeRotationAxis = new Transform3D();
int timeStartRotor = 2000; //The rotor blade should start to turn after 2 seconds.
int noStartRotations = 2; //First, two slow rotations are carried out.
int timeSlowRotation = 1500;//A slow rotation takes 1.5 seconds.
//The Alpha for the slow rotation.
Alpha bladeRotationStartAlpha = new Alpha(noStartRotations,
Alpha.INCREASING_ENABLE,
timeStartRotor,
0,timeSlowRotation,0,0,0,0,0);
//The slow rotation.
RotationInterpolator bladeRotationStart = new RotationInterpolator(
bladeRotationStartAlpha,tgmRotor,
bladeRotationAxis,0.0f,(float) Math.PI*2);
BoundingSphere bounds = new BoundingSphere(new Point3d(0.0,0.0,0.0),Double.MAX_VALUE);
bladeRotationStart.setSchedulingBounds(bounds);
int timeFastRotation = 500; //A fast rotation takes 0.5 seconds.
int timeOneWayFlight = 2000;//The helicopter rises within 2 seconds.
int timeHovering = 1000;//It shall hover for one second.
int timeStartWait = 1000;//The helicopter should start its flight when the rotor
//blade has been rotating fast for one second.
//The overall time when the helicopter should start its flight.
int timeFlightStart = timeStartRotor+timeSlowRotation*noStartRotations+timeStartWait;
//Number of fast rotations.
int noFastRotations = 1+ ((timeStartWait+2*timeOneWayFlight+timeHovering)/timeFastRotation);
//The Alpha for the fast rotations.
Alpha bladeRotationAlpha = new Alpha(noFastRotations,Alpha.INCREASING_ENABLE,
timeStartRotor+timeSlowRotation*noStartRotations,
0,timeFastRotation,0,0,0,0,0);
//The fast rotation.
RotationInterpolator bladeRotation = new RotationInterpolator(
bladeRotationAlpha,tgmRotor,
bladeRotationAxis,0.0f,(float) Math.PI*2);
bladeRotation.setSchedulingBounds(bounds);
//The slow and the fast rotation are assigned to the transformation group
//of the rotor blade. These rotations are carried out in the origin so far.
//The later transformations will place everything correctly.
tgmRotor.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE);
tgmRotor.addChild(bladeRotationStart);
tgmRotor.addChild(bladeRotation);
//*** The transformation group to position the rotor blade on top of the cockpit. ***
//The rotation of the rotor blade will therefore also take place om top
//of the cockpit.
Transform3D tfRotor = new Transform3D();
tfRotor.setTranslation(new Vector3f(0.0f,cabinRadius,0.0f));
TransformGroup tgRotor = new TransformGroup(tfRotor);
tgRotor.addChild(tgmRotor);
//*** The tail of the helicopter. ***
//Length of the tail.
float halfTailLength = 0.2f;
//Generate the tail in form of a green box.
Box tail = new Box(halfTailLength,0.02f,0.02f,greenApp);
//A transformation placing the tail at the end of the cockpit.
Transform3D tfTail = new Transform3D();
tfTail.setTranslation(new Vector3f(cabinRadius+halfTailLength,0.0f,0.0f));