<
WorldInfo info='
"
kelpForestMain3.4.wrl"
"
Model"
"
of"
"
the"
"
Monterey"
"
Bay"
"
Aquarium"
"
Kelp"
"
Forest"
"
DTG"
"
of"
"
last"
"
updated:"
"
111500Jun98"
"
Updated:"
"
kelpTank2.9.wrl;"
"
"
"
Created"
"
by"
"
Naval"
"
Postgraduate"
"
School"
"
students"
"
under"
"
the"
"
supervision"
"
of"
"
Don"
"
Brutzman"
"
Feel"
"
free"
"
to"
"
copy"
"
anything"
"
you"
"
wish"
"
-"
"
just"
"
give"
"
credit"
"
where"
"
it"
"
is"
"
due"
"
http://faculty.nps.edu/brutzman/kelp"
'
title='
NPS Virtual Kelp Forest Exhibit'/>
<
NavigationInfo speed='
3.0'
type='
"EXAMINE" "FLY" "WALK" "ANY"'
transitionType='
"ANIMATE"'
transitionTime='
1.0'/>
<
ExternProtoDeclare name='
ViewPositionOrientation'
url='
"
../../Savage/Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation"
"
https://savage.nps.edu/Savage/Tools/Authoring/ViewPositionOrientationPrototype.x3d#ViewPositionOrientation"
"
../../Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation"
"
https://savage.nps.edu/Savage/Tools/Authoring/ViewPositionOrientationPrototype.wrl#ViewPositionOrientation"
'>
<field name='enabled' type='SFBool' accessType='inputOutput'/>
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'/>
<field name='set_traceEnabled' type='SFBool' accessType='inputOnly'/>
<field name='position_changed' type='SFVec3f' accessType='outputOnly'/>
<field name='orientation_changed' type='SFRotation' accessType='outputOnly'/>
<field name='outputViewpointString' type='MFString' accessType='outputOnly'/>
</
ExternProtoDeclare>
<
ProtoInstance name='
ViewPositionOrientation'>
<fieldValue name='enabled' value='false'/>
</
ProtoInstance>
<
ExternProtoDeclare name='
WaypointInterpolator'
appinfo='
Reads waypoints and legSpeeds/legDurations/defaultSpeed to provide a customizable position/orientation interpolator.'
url='
"
../../../Savage/Tools/Animation/WaypointInterpolatorPrototype.x3d#WaypointInterpolator"
"
https://savage.nps.edu/Savage/Tools/Animation/WaypointInterpolatorPrototype.x3d#WaypointInterpolator"
"
../../../Savage/Tools/Animation/WaypointInterpolatorPrototype.wrl#WaypointInterpolator"
"
https://savage.nps.edu/Savage/Tools/Animation/WaypointInterpolatorPrototype.wrl#WaypointInterpolator"
'>
<!-- Priority of use: legSpeeds (m/sec), legDurations (seconds), defaultSpeed (m/sec) -->
<field name='description' type='SFString' accessType='initializeOnly'
appinfo='Short description of what is animated by this WaypointInterpolator.'/>
<field name='waypoints' type='MFVec3f' accessType='initializeOnly'
appinfo='Waypoints being traversed with interpolation of intermediate positions and orientations.'/>
<field name='add_waypoint' type='SFVec3f' accessType='inputOnly'
appinfo='Add another single waypoint to array of waypoints recalculate interpolator values.'/>
<field name='set_waypoints' type='MFVec3f' accessType='inputOnly'
appinfo='Replace all waypoints recalculate interpolator values.'/>
<field name='pitchUpDownForVerticalWaypoints' type='SFBool' accessType='initializeOnly'
appinfo='Whether to pitch child geometry (such as a vehicle) up or down to match vertical slope'/>
<field name='legSpeeds' type='MFFloat' accessType='initializeOnly'
appinfo='Units m/sec. If used array lengths for legSpeeds and legDurations must be one less than number of waypoints.'/>
<field name='legDurations' type='MFTime' accessType='initializeOnly'
appinfo='Units in seconds. If used array lengths for legSpeeds and legDurations must be one less than number of waypoints.'/>
<field name='defaultSpeed' type='SFFloat' accessType='initializeOnly'
appinfo='Units m/sec.'/>
<field name='turningRate' type='SFFloat' accessType='initializeOnly'
appinfo='turningRate (degrees/second) also determines standoff distance prior to waypoint where turn commences. If 0 turns are instantaneous.'/>
<field name='totalDuration' type='SFTime' accessType='outputOnly'
appinfo='Output calculation summing all leg durations, useful for setting TimeSensor cycleInterval. Units in seconds.'/>
<!-- interpolation fields -->
<field name='set_fraction' type='SFFloat' accessType='inputOnly'
appinfo='exposed PositionInterpolator and OrientationInterpolator setting'/>
<field name='position_changed' type='SFVec3f' accessType='outputOnly'
appinfo='exposed PositionInterpolator setting'/>
<field name='orientation_changed' type='SFRotation' accessType='outputOnly'
appinfo='exposed OrientationInterpolator setting'/>
<!-- display-related fields -->
<field name='lineColor' type='SFColor' accessType='inputOutput'
appinfo='default color for non-active line segments'/>
<field name='highlightSegmentColor' type='SFColor' accessType='inputOutput'
appinfo='highlightSegmentColors must contain two color values for each endpoint of the highlight segment.'/>
<field name='transparency' type='SFFloat' accessType='inputOutput'
appinfo='1.0 is completely transparent, 0.0 is completely opaque.'/>
<field name='labelDisplayMode' type='SFString' accessType='initializeOnly'
appinfo='allowed values: none; waypoints (produce labels at each waypoint); or interpolation (produce single moving label at interpolator time course speed location)'/>
<field name='heightLabel' type='SFString' accessType='initializeOnly'
appinfo='allowed values: altitude depth (negate Y value) none'/>
<field name='labelOffset' type='SFVec3f' accessType='initializeOnly'
appinfo='heightLabel relative location'/>
<field name='labelFontSize' type='SFFloat' accessType='initializeOnly'
appinfo='heightLabel text size'/>
<field name='labelColor' type='SFColor' accessType='initializeOnly'
appinfo='heightLabel text color'/>
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/>
<field name='outputInitializationComputations' type='SFBool' accessType='initializeOnly'
appinfo='Output the number of waypoints totalDistance and totalDuration to console upon initialization'/>
<field name='verticalDropLineColor' type='SFColor' accessType='inputOutput'
appinfo='default color for vertical drop-line segments'/>
<field name='verticalDropLineTransparency' type='SFFloat' accessType='inputOutput'
appinfo='1.0 is completely transparent, 0.0 is completely opaque.'/>
</
ExternProtoDeclare>
<
Group DEF='
Viewpoints'>
<
Viewpoint description='
Kelp Forest Monterey Bay Aquarium'
position='
0.0 -5.0 45.0'/>
<
Viewpoint description='
Side Windows'
fieldOfView='
0.5'
orientation='
0.0 1.0 0.0 0.9'
position='
25.0 -4.0 15.0'/>
<
Viewpoint description='
Star Fish'
orientation='
0.0 1.0 0.0 1.25'
position='
14.0 -5.75 1.0'/>
<
Viewpoint description='
Inside Tank'
orientation='
0.0 1.0 0.0 3.14'
position='
0.0 -5.0 -7.0'/>
<
Viewpoint description='
Top floor'
fieldOfView='
1.04719'
orientation='
-0.3 1.0 0.3 1.57079'
position='
12.5 5.0 -2.0'/>
<
Viewpoint description='
Bird's Eye View'
orientation='
1.0 0.0 0.0 -1.57'
position='
0.0 19.0 -3.5'/>
<
Viewpoint description='
Pump House'
fieldOfView='
0.6'
orientation='
0.0 1.0 0.0 1.3'
position='
-5.0 1.0 0.0'/>
</
Group>
<
Group DEF='
Root'>
</
Group>
<
ROUTE fromNode='
WAVE_CLOCK'
fromField='
fraction_changed'
toNode='
CENTER_WAVE'
toField='
set_fraction'/>
<
ROUTE fromNode='
CENTER_WAVE'
fromField='
value_changed'
toNode='
K7_MIDWATER'
toField='
set_translation'/>
<
ROUTE fromNode='
RIGHT_DEEP_WAVE'
fromField='
value_changed'
toNode='
K2_MIDWATER'
toField='
set_translation'/>
<
ROUTE fromNode='
CENTER_WAVE'
fromField='
value_changed'
toNode='
K4_MIDWATER'
toField='
set_translation'/>
<
ROUTE fromNode='
LEFT_DEEP_WAVE'
fromField='
value_changed'
toNode='
K10_DEEP'
toField='
set_translation'/>
<
ROUTE fromNode='
LEFT_DEEP_WAVE'
fromField='
value_changed'
toNode='
K11_DEEP'
toField='
set_translation'/>
<
ROUTE fromNode='
RIGHT_SHALLOW_WAVE'
fromField='
value_changed'
toNode='
R2_MIDWATER'
toField='
set_translation'/>
<
ROUTE fromNode='
RIGHT_DEEP_WAVE'
fromField='
value_changed'
toNode='
R2_DEEP'
toField='
set_translation'/>
<
ROUTE fromNode='
CENTER_WAVE'
fromField='
value_changed'
toNode='
R3_MIDWATER'
toField='
set_translation'/>
<
ROUTE fromNode='
RIGHT_SHALLOW_WAVE'
fromField='
value_changed'
toNode='
R5_SHALLOW'
toField='
set_translation'/>
<
TimeSensor DEF='
MasterClock'
loop='
true'/>