<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' DEF='ConsoleOutputViewPositionOrientation'>
<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'>
<Background groundAngle='1.309 1.5707' groundColor='0.1 0.1 0.0 0.4 0.25 0.2 0.6 0.6 0.6' skyAngle='1.309 1.5707' skyColor='0.0 0.5 1.0 0.0 0.0 1.0 0.0 0.0 1.0'/>
<Inline
url='
IntroductionMessage.x3d"https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/KelpForestExhibit/IntroductionMessage.x3d" "IntroductionMessage.wrl" "https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/KelpForestExhibit/IntroductionMessage.wrl" '
/>
<Collision enabled='false'>
<Transform>
</Transform>
<Transform>
</Transform>
<Transform>
</Transform>
<Transform scale='0.54 0.75 0.52' translation='0.3 -2.88 7.3'>
</Transform>
<Transform DEF='K2_LOCALE' translation='-4.0 0.0 1.0'>
</Transform>
<Transform DEF='K2_FLOOR' rotation='0.0 1.0 0.0 0.44' scale='0.5 0.9 0.5' translation='-1.9 -8.5 -1.5'>
</Transform>
</Transform>
<Transform DEF='K4_LOCALE' translation='-2.5 0.0 -2.5'>
</Transform>
<Transform DEF='K4_FLOOR' rotation='0.0 1.0 0.0 -0.3' scale='0.5 0.8 0.5' translation='-1.5 -7.5 0.5'>
</Transform>
</Transform>
<Transform DEF='K7_LOCALE' translation='2.0 0.0 -2.5'>
</Transform>
<Transform DEF='K7_FLOOR' scale='0.5 0.85 0.5' translation='0.0 -7.75 0.0'>
</Transform>
</Transform>
<Transform DEF='K10_LOCALE' translation='7.0 0.0 2.0'>
</Transform>
<Transform DEF='K10_FLOOR' rotation='0.0 1.0 0.0 0.16' scale='0.5 0.75 0.5' translation='-1.0 -7.0 -1.0'>
</Transform>
</Transform>
<Transform DEF='K11_LOCALE' translation='8.0 0.0 -2.0'>
<Transform DEF='K11_MIDWATER' rotation='0.0 1.0 0.0 0.3' translation='2.19 -7.0 0.15'>
</Transform>
</Transform>
<Transform DEF='K11_FLOOR' rotation='0.0 1.0 0.0 0.3' scale='0.5 0.75 0.5' translation='-0.3 -7.0 0.0'>
</Transform>
<Transform translation='1.3 -5.0 3.0'>
</Transform>
</Transform>
<Transform DEF='R2_LOCALE' translation='-1.0 0.0 -1.0'>
</Transform>
</Transform>
</Transform>
<Transform DEF='R3_LOCALE' translation='3.0 0.0 -4.0'>
</Transform>
<Transform DEF='R5_LOCALE' translation='8.0 0.0 -2.0'>
</Transform>
<PositionInterpolator DEF='LEFT_SHALLOW_WAVE' key='0.0 0.125 0.25 0.375 0.5 0.625 0.75 0.875 1.0' keyValue='0.0 0.0 0.0 0.056 -0.085 0.0 0.08 -0.12 0.0 0.056 -0.085 0.0 0.0 0.0 0.0 -0.056 0.085 0.0 -0.08 0.12 0.0 -0.056 0.085 0.0 0.0 0.0 0.0'/>
</Collision>
</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'>
<!-- Scale used on Nancy underwater to approximate the defraction magnification of the plexiglass window. -->
</Transform>
<fieldValue name='description' value='Nancy track'/>
<fieldValue name='waypoints' value='-5.5 -5.7 -.2 -7.7 -2.7 -1.7 6 -3 -3 2 -2 -2 1 -4 -1 -2 -2 -2 -5.5 -5.7 -.2'/>
<fieldValue name='defaultSpeed' value='0.5'/>
<fieldValue name='pitchUpDownForVerticalWaypoints' value='true'/>
<fieldValue name='labelDisplayMode' value='none'/>
<fieldValue name='lineColor' value='0 0 0'/>
<fieldValue name='labelColor' value='0 0.8 0.8'/>
<fieldValue name='labelOffset' value='0 -1.6 0'/>
<fieldValue name='labelFontSize' value='6'/>
<fieldValue name='traceEnabled' value='false'/>
<fieldValue name='transparency' value='1'/>
<fieldValue name='turningRate' value='18'/>
<!-- totalDuration is a computed output -->
</ProtoInstance>
</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'/>