Animating transforms
squisher.wrl

	

#VRML V2.0 utf8
#
#  squisher.wrl
#  Squishy ball
#	by David R. Nadeau
#
#  This world illustrates the use of orientation, color, and position
#  interpolators.  The world contains left, center, and right balls.
#  The left and right balls swing back and forth, pivoting about a
#  common point above the center ball.  Each time the left and right
#  balls swing inward, striking the center ball, the center ball squishes
#  and turns red.
#
#  To make this effect, two orientation interpolators swing the left
#  and right balls back and forth.  A position interpolator's output
#  is used as a scale value to squish the center ball.  Finally, a
#  color interpolator repeatedly turns the center ball red, then blue.

WorldInfo {
    title "Squishy ball"
    info [ "Copyright (c) 1997, David R. Nadeau" ]
}

DEF Entry Viewpoint {
    position 0.0 1.6 10.0
    description "Entry View"
}

NavigationInfo {
    type [ "EXAMINE", "ANY" ]
    headlight TRUE
}

Background {
    skyColor [ 0.0 0.0 0.0 ]
}


#
# Center ball
#
Transform {
	center 0.0 4.0 0.0
	children [
		DEF Squishee Transform {
			children Shape {
				appearance Appearance {
					material DEF Coloree Material { }
				}
				geometry Sphere { }
			}
		}
		DEF Stick Transform {
			translation 0.0 2.0 0.0
			children Shape {
				appearance Appearance {
					material Material { }
				}
				geometry Cylinder {
					height 4.0
					radius 0.1
				}
			}
		}
	]
}

#
#  Left and right balls
#
DEF Swingee1 Transform {
	center 0.0 4.0 0.0
	children [
		DEF Ball Shape {
			appearance Appearance {
				material Material {
					diffuseColor 0.0 0.5 1.0
				}
			}
			geometry Sphere { }
		}
		USE Stick
	]
}
DEF Swingee2 Transform {
	center 0.0 4.0 0.0
	children [
		USE Ball
		USE Stick
	]
}


#
#  Animation
#
DEF Clock TimeSensor {
	cycleInterval 2.0
	loop TRUE
	startTime 1.0
	stopTime 0.0
}

DEF Swinger1 OrientationInterpolator {
	key [ 0.0, 0.5, 1.0 ]
	keyValue [
		0.0 0.0 1.0 -0.5,
		0.0 0.0 1.0 -0.2,
		0.0 0.0 1.0 -0.5,
	]
}

ROUTE Clock.fraction_changed TO Swinger1.set_fraction
ROUTE Swinger1.value_changed TO Swingee1.set_rotation

DEF Swinger2 OrientationInterpolator {
	key [ 0.0, 0.5, 1.0 ]
	keyValue [
		0.0 0.0 1.0  0.5,
		0.0 0.0 1.0  0.2,
		0.0 0.0 1.0  0.5,
	]
}

ROUTE Clock.fraction_changed TO Swinger2.set_fraction
ROUTE Swinger2.value_changed TO Swingee2.set_rotation

DEF Squisher PositionInterpolator {
	key [ 0.0, 0.5, 1.0 ]
	keyValue [
		1.0 1.0 1.0,
		0.5 1.4 1.4,
		1.0 1.0 1.0,
	]
}

ROUTE Clock.fraction_changed TO Squisher.set_fraction
ROUTE Squisher.value_changed TO Squishee.set_scale

DEF Colorer ColorInterpolator {
	key [ 0.0, 0.5, 1.0 ]
	keyValue [
		0.0 0.5 1.0,
		1.0 0.0 0.0,
		0.0 0.5 1.0,
	]
}

ROUTE Clock.fraction_changed TO Colorer.set_fraction
ROUTE Colorer.value_changed  TO Coloree.set_diffuseColor