<WorldInfo info='
"Model of the Monterey Bay Aquarium Kelp Forest"
"DTG of original update: 111500Jun98"
"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"'/>
<ExternProtoDeclare name='ViewPositionOrientation' appinfo='ViewPositionOrientation prototype provides local position and orientation as user navigates with optional console output'
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'
appinfo='Whether or not ViewPositionOrientation sends output to console.'/>
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='Output internal trace messages for debugging this node - developer use only can be ignored.'/>
<field name='set_traceEnabled' type='SFBool' accessType='inputOnly'
appinfo='Ability to turn output tracing on/off at runtime.'/>
<field name='position_changed' type='SFVec3f' accessType='outputOnly'
appinfo='Output local position.'/>
<field name='orientation_changed' type='SFRotation' accessType='outputOnly'
appinfo='Output local orientation.'/>
<field name='outputViewpointString' type='MFString' accessType='outputOnly'
appinfo='MFString value of new Viewpoint for example: <Viewpoint position="20 15 20" orientation="-0.516 0.83 0.212 0.9195"/>'/>
</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='MFFloat' 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'/>
<Group DEF='Nancy'>
</Group>
<ROUTE fromNode='JEFFSCLOCK' fromField='fraction_changed' toNode='NancyInterpolator' toField='set_fraction'/>
<ROUTE fromNode='NancyInterpolator' fromField='position_changed' toNode='NancyTransform' toField='set_translation'/>
<ROUTE fromNode='NancyInterpolator' fromField='orientation_changed' toNode='NancyTransform' toField='set_rotation'/>