home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Late Night VRML 2.0 with Java CD-ROM
/
code.zip
/
Ch11
/
submarine
/
Submarine.wrl
< prev
Wrap
Text File
|
1997-03-30
|
5KB
|
237 lines
#VRML V2.0 utf8
WorldInfo {
info [ "Created in CosmoWorlds",
"Packaged by CosmoPackage" ]
}
Background {
skyColor 0.04 0.04 0.47
}
DEF VIEW1 Viewpoint {
position 0 10 30
orientation 0 0 1 0.6
description "Main View"
}
Fog {
color 0.04 0.04 0.47
fogType "EXPONENTIAL"
visibilityRange 80
}
DEF BG_Sound Sound {
source AudioClip {
url "ambientsea.wav"
loop TRUE
startTime 1
}
minFront 20
maxFront 600
minBack 20
maxBack 600
}
DEF ROV Group {
children DEF ROV_MODEL Transform {
children Transform {
children [
Inline {
url "sub.wrl"
}
DEF SOUND_ROTATE Sound {
source DEF AUDIO_ROTATE AudioClip {
url "rovmove.wav"
loop FALSE
startTime 0
}
intensity 3
location 0.5 0 0
minFront 3
maxFront 50
minBack 3
maxBack 50
}
DEF SOUND_MOVE Sound {
source DEF AUDIO_MOVE AudioClip {
url "rovspeed2.wav"
loop FALSE
startTime 0
}
minFront 3
maxFront 50
minBack 3
maxBack 50
}
]
translation 0 1 0
rotation 0 1 0 1
}
translation 0 0 0
rotation 0 0 1 0
}
}
DEF MAIN_CLOCK TimeSensor {
cycleInterval 10
loop TRUE
}
DEF ROT_CLOCK TimeSensor {
cycleInterval 8
loop FALSE
startTime 0
}
DEF MOVE_CLOCK TimeSensor {
cycleInterval 8
loop FALSE
startTime 0
}
DEF ROTATE_ROV OrientationInterpolator {
key [ 0, 1 ]
keyValue [ 0 0 1 0,
0 -1 0 1.57 ]
}
DEF POSITION_ROV PositionInterpolator {
key [ 0, 1 ]
keyValue [ 0 1 0,
-15 1 -15 ]
}
DEF MOVE Script {
eventOut SFRotation rotation
eventOut SFVec3f position
eventOut SFTime rotateTrigger
eventOut SFTime moveTrigger
eventIn SFFloat set_fraction
eventIn SFTime set_cycle
eventIn SFVec3f set_movement
eventIn SFRotation set_subRotation
field SFInt32 phase 0
field SFBool flip FALSE
url "vrmlscript:
function set_cycle(cycle, eventTime){
phase = phase + 1;
if(phase == 9) phase = 1;
}
function set_subRotation(subRotation, eventTime) {
rotation[0] = 0.0;
rotation[1] = 1.0;
rotation[2] = 0.0;
if(phase == 1) {
rotation[3] = -subRotation[3];
}
else if(phase == 3) {
rotation[3] = -1.57 + - subRotation[3];
}
else if(phase == 5) {
rotation[3] = -2 * 1.57 - subRotation[3];
}
else if(phase == 7) {
rotation[3] = -3 *1.57 - subRotation[3];
}
}
function set_movement(movement, eventTime){
if(phase == 2) {
position[0] = movement[0];
position[1] = movement[1];
position[2] = 15.0 + movement[2];
}
else if(phase == 4) {
position[0] = -15.0 -movement[0];
position[1] = movement[1];
position[2] = movement[2];
}
else if(phase == 6) {
position[0] = -movement[0];
position[1] = movement[1];
position[2] = -15.0 -movement[2];
}
else if(phase == 8) {
position[0] = 15.0 +movement[0];
position[1] = movement[1];
position[2] = -movement[2];
}
}
function set_fraction(fraction, eventTime){
// Based on the phase, move and rotate differently, by starting and stopping
// the rotation driven clock.
if(phase == 1) { // First phase, rotate.
if(!flip) {
rotateTrigger = eventTime;
flip = TRUE;
}
}
else if(phase == 2) { // Phase two, move in to the left.
if(flip){
moveTrigger = eventTime;
flip = FALSE;
}
}
else if(phase == 3) { // Phase three, rotate again.
if(!flip){
rotateTrigger = eventTime;
flip = TRUE;
}
}
else if(phase == 4) { // Phase four, move inwards, to the middle
if(flip){
moveTrigger = eventTime;
flip = FALSE;
}
}
else if(phase == 5) { // Phase five, rotate again.
if(!flip){
rotateTrigger = eventTime;
flip = TRUE;
}
}
else if(phase == 6) { // Phase six, move towards, to the right.
if(flip){
moveTrigger = eventTime;
flip = FALSE;
}
}
else if(phase == 7) { // Phase seven, rotate again.
if(!flip){
rotateTrigger = eventTime;
flip = TRUE;
}
}
else if(phase == 8) { // Phase eight, move towards, to the middle.
if(flip){
moveTrigger = eventTime;
flip = FALSE;
}
}
}"
}
ROUTE MOVE.rotateTrigger TO AUDIO_ROTATE.set_startTime
ROUTE MOVE.moveTrigger TO AUDIO_MOVE.set_startTime
ROUTE MOVE.position TO ROV_MODEL.set_translation
ROUTE MOVE.rotation TO ROV_MODEL.set_rotation
ROUTE MOVE.rotateTrigger TO ROT_CLOCK.set_startTime
ROUTE MOVE.moveTrigger TO MOVE_CLOCK.set_startTime
ROUTE ROT_CLOCK.fraction_changed TO ROTATE_ROV.set_fraction
ROUTE MOVE_CLOCK.fraction_changed TO POSITION_ROV.set_fraction
ROUTE MAIN_CLOCK.fraction_changed TO MOVE.set_fraction
ROUTE MAIN_CLOCK.cycleTime TO MOVE.set_cycle
ROUTE POSITION_ROV.value_changed TO MOVE.set_movement
ROUTE ROTATE_ROV.value_changed TO MOVE.set_subRotation