<!-- =============== Camera ============== -->
<
ExternProtoDeclare name='
Camera'
appinfo='
Camera node provides direct control of scene view to enable cinematic camera animation shot by shot and move by move along with still digital-photography settings for offline rendering of camera images'
url='
"
CameraPrototypes.x3d#Camera"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.x3d#Camera"
"
CameraPrototypes.wrl#Camera"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.wrl#Camera"
'>
<!-- Viewpoint-related fields, NavigationInfo-related fields and Camera-unique fields -->
<field name='description' type='SFString' accessType='inputOutput'
appinfo='Text description to be displayed for this Camera'/>
<field name='position' type='SFVec3f' accessType='inputOutput'
appinfo='Camera position in local transformation frame, which is default prior to first CameraShot initialPosition getting activated'/>
<field name='orientation' type='SFRotation' accessType='inputOutput'
appinfo='Camera rotation in local transformation frame, which is default prior to first CameraShot initialPosition getting activated'/>
<field name='fieldOfView' type='SFFloat' accessType='inputOutput'
appinfo='pi/4'/>
<field name='set_fraction' type='SFFloat' accessType='inputOnly'
appinfo='input fraction drives interpolators'/>
<field name='set_bind' type='SFBool' accessType='inputOnly'
appinfo='input event binds or unbinds this Camera'/>
<field name='bindTime' type='SFTime' accessType='outputOnly'
appinfo='output event indicates when this Camera is bound'/>
<field name='isBound' type='SFBool' accessType='outputOnly'
appinfo='output event indicates whether this Camera is bound or unbound'/>
<field name='nearClipPlane' type='SFFloat' accessType='inputOutput'
appinfo='Vector distance to near clipping plane corresponds to NavigationInfo.avatarSize[0]'/>
<field name='farClipPlane' type='SFFloat' accessType='inputOutput'
appinfo='Vector distance to far clipping plane corresponds to NavigationInfo.visibilityLimit'/>
<field name='shots' type='MFNode' accessType='inputOutput'
appinfo='Array of CameraShot nodes which in turn contain CameraMovement nodes'/>
<field name='headlight' type='SFBool' accessType='inputOutput'
appinfo='Whether camera headlight is on or off'/>
<field name='headlightColor' type='SFColor' accessType='inputOutput'
appinfo='Camera headlight color'/>
<field name='headlightIntensity' type='SFFloat' accessType='inputOutput'
appinfo='Camera headlight intensity'/>
<field name='filterColor' type='SFColor' accessType='inputOutput'
appinfo='Camera filter color that modifies virtual lens capture'/>
<field name='filterTransparency' type='SFFloat' accessType='inputOutput'
appinfo='Camera filter transparency that modifies virtual lens capture'/>
<field name='upVector' type='SFVec3f' accessType='inputOutput'
appinfo='upVector changes modify camera orientation (and possibly vice versa)'/>
<field name='fStop' type='SFFloat' accessType='inputOutput'
appinfo='Focal length divided effective aperture diameter indicating width of focal plane'/>
<field name='focusDistance' type='SFFloat' accessType='inputOutput'
appinfo='Distance to focal plane of sharpest focus'/>
<field name='isActive' type='SFBool' accessType='outputOnly'
appinfo='Mark start/stop with true/false output respectively useful to trigger external animations'/>
<field name='totalDuration' type='SFTime' accessType='outputOnly'
appinfo='Total duration of contained enabled CameraShot (and thus CameraMovement) move durations'/>
<field name='offlineRender' type='SFNode' accessType='inputOutput'
appinfo='OfflineRender node'/>
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/>
</
ExternProtoDeclare>
<!-- =============== CameraShot ============== -->
<
ExternProtoDeclare name='
CameraShot'
appinfo='
CameraShot collects a specific set of CameraMovement animations that make up an individual shot'
url='
"
CameraPrototypes.x3d#CameraShot"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.x3d#CameraShot"
"
CameraPrototypes.wrl#CameraShot"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.wrl#CameraShot"
'>
<field name='description' type='SFString' accessType='inputOutput'
appinfo='Text description to be displayed for this CameraShot'/>
<field name='enabled' type='SFBool' accessType='inputOutput'
appinfo='Whether this CameraShot can be activated'/>
<field name='moves' type='MFNode' accessType='inputOutput'
appinfo='Set of CameraMovement nodes'/>
<field name='initialPosition' type='SFVec3f' accessType='inputOutput'
appinfo='Setup to reinitialize camera position for this shot'/>
<field name='initialOrientation' type='SFRotation' accessType='inputOutput'
appinfo='Setup to reinitialize camera rotation for this shot'/>
<field name='initialAimPoint' type='SFVec3f' accessType='inputOutput'
appinfo='Setup to reinitialize aimpoint (relative location for camera direction) for this shot'/>
<field name='initialFieldOfView' type='SFFloat' accessType='inputOutput'
appinfo='pi/4'/>
<field name='initialFStop' type='SFFloat' accessType='inputOutput'
appinfo='Focal length divided effective aperture diameter indicating width of focal plane'/>
<field name='initialFocusDistance' type='SFFloat' accessType='inputOutput'
appinfo='Distance to focal plane of sharpest focus'/>
<field name='shotDuration' type='SFTime' accessType='outputOnly'
appinfo='Subtotal duration of contained CameraMovement move durations'/>
<field name='isActive' type='SFBool' accessType='outputOnly'
appinfo='Mark start/stop with true/false output respectively useful to trigger external animations'/>
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/>
</
ExternProtoDeclare>
<!-- =============== CameraMovement ============== -->
<
ExternProtoDeclare name='
CameraMovement'
appinfo='
CameraMovement defines a single camera movement animation'
url='
"
CameraPrototypes.x3d#CameraMovement"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.x3d#CameraMovement"
"
CameraPrototypes.wrl#CameraMovement"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.wrl#CameraMovement"
'>
<field name='description' type='SFString' accessType='inputOutput'
appinfo='Text description to be displayed for this CameraMovement'/>
<field name='enabled' type='SFBool' accessType='inputOutput'
appinfo='Whether this CameraMovement can be activated'/>
<field name='duration' type='SFFloat' accessType='inputOutput'
appinfo='Duration in seconds for this move'/>
<field name='goalPosition' type='SFVec3f' accessType='inputOutput'
appinfo='Goal camera position for this move'/>
<field name='goalOrientation' type='SFRotation' accessType='inputOutput'
appinfo='Goal camera rotation for this move'/>
<field name='tracking' type='SFBool' accessType='inputOutput'
appinfo='Whether or not camera direction is tracking towards the aimPoint'/>
<field name='goalAimPoint' type='SFVec3f' accessType='inputOutput'
appinfo='Goal aimPoint for this move, ignored if tracking=false'/>
<field name='goalFieldOfView' type='SFFloat' accessType='inputOutput'
appinfo='Goal fieldOfView for this move'/>
<field name='goalFStop' type='SFFloat' accessType='inputOutput'
appinfo='Focal length divided effective aperture diameter indicating width of focal plane'/>
<field name='goalFocusDistance' type='SFFloat' accessType='inputOutput'
appinfo='Distance to focal plane of sharpest focus'/>
<field name='isActive' type='SFBool' accessType='outputOnly'
appinfo='Mark start/stop with true/false output respectively useful to trigger external animations'/>
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/>
</
ExternProtoDeclare>
<!-- =============== OfflineRender ============== -->
<
ExternProtoDeclare name='
OfflineRender'
appinfo='
OfflineRender defines a parameters for offline rendering of Camera animation output to a movie file (or possibly a still shot)'
url='
"
CameraPrototypes.x3d#OfflineRender"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.x3d#OfflineRender"
"
CameraPrototypes.wrl#OfflineRender"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.wrl#OfflineRender"
'>
<!-- TODO non-photorealistic rendering (NPR) parameters -->
<field name='description' type='SFString' accessType='inputOutput'
appinfo='Text description to be displayed for this OfflineRender'/>
<field name='enabled' type='SFBool' accessType='inputOutput'
appinfo='Whether this OfflineRender can be activated'/>
<field name='frameRate' type='SFFloat' accessType='inputOutput'
appinfo='Frames per second recorded for this rendering'/>
<field name='frameSize' type='SFVec2f' accessType='inputOutput'
appinfo='Size of frame in number of pixels width and height'/>
<field name='pixelAspectRatio' type='SFFloat' accessType='inputOutput'
appinfo='Relative dimensions of pixel height/width typically 1.33 or 1'/>
<field name='set_startTime' type='SFTime' accessType='inputOnly'
appinfo='Begin render operation'/>
<field name='progress' type='SFFloat' accessType='outputOnly'
appinfo='Progress performing render operation (0..1)'/>
<field name='renderCompleteTime' type='SFTime' accessType='outputOnly'
appinfo='Render operation complete'/>
<field name='movieFormat' type='MFString' accessType='initializeOnly'
appinfo='Format of rendered output movie (mpeg mp4 etc.), use first supported format'/>
<field name='imageFormat' type='MFString' accessType='initializeOnly'
appinfo='Format of rendered output images (png jpeg gif tiff etc.) use first supported format'/>
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/>
</
ExternProtoDeclare>
<!-- =============== Lights, camera, action! ============== -->
<
DirectionalLight direction='
0 -1 0'
global='
true'
intensity='
0.8'/>
<
NavigationInfo type='
"EXAMINE" "FLY" "ANY"'
transitionType='
"ANIMATE"'
transitionTime='
1.0'/>
<
Viewpoint description='
Camera test scene entry view'
position='
0 2 12'
retainUserOffsets='
false'/>
<
Viewpoint description='
Camera test scene from above'
orientation='
1 0 0 -1.57079'
position='
0 150 0'
retainUserOffsets='
false'/>
<!-- Keep prototype instances in same file while developing, then move later -->
<!-- We will create examples matching those in the paper -->
<!-- =============== Camera.SimpleShotsTest ============== -->
<!--
Camera.SimpleShotsTest ROUTEs:
[
from CameraTimer.SimpleShots.fraction_changed to set_fraction
]
[
from TextTouchActive.SimpleShotsFilter.inputTrue to set_bind
]
[
from totalDuration to CameraTimer.SimpleShots.cycleInterval
]
[
from position_changed to CameraShapeTransform.translation
]
[
from orientation_changed to CameraShapeTransform.rotation
]
[
from isBound to CrossHairInstance.set_enabled
]
-->
<
ProtoInstance name='
Camera'
DEF='
Camera.SimpleShotsTest'>
<
fieldValue name='
description'
value='
SimpleShotsTest for camera Zoom Dolly Pan Boom and Tilt'/>
<
fieldValue name='
headlight'
value='
true'/>
<
fieldValue name='
position'
value='
-4 4 10'/>
<
fieldValue name='
shots'>
<
ProtoInstance name='
CameraShot'
DEF='
Zoom'>
<
fieldValue name='
description'
value='
Simple shot of Camera Zoom'/>
<
fieldValue name='
initialPosition'
value='
-50 1 -10'/>
<
fieldValue name='
initialOrientation'
value='
0 1 0 0'/>
<
fieldValue name='
moves'>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Zoom In'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-50 1 -15'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Zoom Out'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-50 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Pause'/>
<fieldValue name='duration' value='1'/>
<fieldValue name='goalPosition' value='-50 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
</
fieldValue>
</
ProtoInstance>
<
ProtoInstance name='
CameraShot'
DEF='
Dolly'>
<
fieldValue name='
description'
value='
Simple shot of Camera Dolly'/>
<
fieldValue name='
initialPosition'
value='
-40 1 -10'/>
<
fieldValue name='
initialOrientation'
value='
0 1 0 0'/>
<
fieldValue name='
moves'>
<
ProtoInstance name='
CameraMovement'
DEF='
DollyMove1'>
<fieldValue name='description' value='Camera Dolly from Right to Left'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-45 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Dolly from Left to Right'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-40 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Pause'/>
<fieldValue name='duration' value='1'/>
<fieldValue name='goalPosition' value='-40 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
</
fieldValue>
</
ProtoInstance>
<
ProtoInstance name='
CameraShot'
DEF='
Pan'>
<
fieldValue name='
description'
value='
Simple shot of Camera Pan left right and back to center'/>
<
fieldValue name='
initialPosition'
value='
-30 1 -10'/>
<
fieldValue name='
initialOrientation'
value='
0 1 0 0'/>
<
fieldValue name='
moves'>
<
ProtoInstance name='
CameraMovement'
DEF='
PanLeft'>
<fieldValue name='description' value='Pan Left'/>
<fieldValue name='duration' value='2'/>
<fieldValue name='goalPosition' value='-30 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0.4'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'
DEF='
PanRight'>
<fieldValue name='description' value='Pan Right'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-30 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 -0.4'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Pan back to Center'/>
<fieldValue name='duration' value='2'/>
<fieldValue name='goalPosition' value='-30 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Pause'/>
<fieldValue name='duration' value='2'/>
<fieldValue name='goalPosition' value='-30 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
</
fieldValue>
</
ProtoInstance>
<
ProtoInstance name='
CameraShot'
DEF='
CameraBoom'>
<
fieldValue name='
description'
value='
Camera Boom'/>
<
fieldValue name='
initialPosition'
value='
-20 1 -10'/>
<
fieldValue name='
initialOrientation'
value='
0 1 0 0'/>
<
fieldValue name='
moves'>
<
ProtoInstance name='
CameraMovement'
DEF='
CameraBoomUp'>
<fieldValue name='description' value='Camera Boom Up'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-20 5 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'
DEF='
BoomDown'>
<fieldValue name='description' value='Camera Boom Down'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-20 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'
DEF='
BoomPause'>
<fieldValue name='description' value='Camera Pause'/>
<fieldValue name='duration' value='2'/>
<fieldValue name='goalPosition' value='-20 1 -10'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
</
fieldValue>
</
ProtoInstance>
<
ProtoInstance name='
CameraShot'
DEF='
CameraTilt'>
<
fieldValue name='
description'
value='
Camera Tilt'/>
<
fieldValue name='
initialPosition'
value='
-10 1 -10'/>
<
fieldValue name='
initialOrientation'
value='
0 0 1 0'/>
<
fieldValue name='
traceEnabled'
value='
true'/>
<
fieldValue name='
moves'>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Tilt Pause'/>
<fieldValue name='duration' value='1'/>
<fieldValue name='goalPosition' value='-10 1 -10'/>
<fieldValue name='goalOrientation' value='0 0 1 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'
DEF='
TiltDown'>
<fieldValue name='description' value='Camera Tilt Left'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-10 1 -10'/>
<fieldValue name='goalOrientation' value='0 0 1 0.785'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'
DEF='
TiltPause'>
<fieldValue name='description' value='Camera Tilt Pause'/>
<fieldValue name='duration' value='1'/>
<fieldValue name='goalPosition' value='-10 1 -10'/>
<fieldValue name='goalOrientation' value='0 0 1 0.785'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Tilt Right'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='-10 1 -10'/>
<fieldValue name='goalOrientation' value='0 0 1 -0.785'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'>
<fieldValue name='description' value='Camera Tilt Pause'/>
<fieldValue name='duration' value='1'/>
<fieldValue name='goalPosition' value='-10 1 -10'/>
<fieldValue name='goalOrientation' value='0 0 1 -0.785'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'
DEF='
TiltReset'>
<fieldValue name='description' value='Camera Tilt Reset'/>
<fieldValue name='duration' value='1'/>
<fieldValue name='goalPosition' value='-10 1 -10'/>
<fieldValue name='goalOrientation' value='0 0 1 0'/>
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'
DEF='
TiltUp'>
<fieldValue name='description' value='Return to home'/>
<fieldValue name='duration' value='2'/>
<fieldValue name='goalPosition' value='0 2 12'/>
<fieldValue name='goalOrientation' value='0 0 1 0'/>
</
ProtoInstance>
</
fieldValue>
</
ProtoInstance>
</
fieldValue>
</
ProtoInstance>
<
Group DEF='
AnimationGroup.SimpleShots'>
</
Group>
<
Group DEF='
SimpleShotsTargets'>
<
Transform DEF='
TargetBoxZoom'
translation='
-50 1 -20'>
<
Shape>
<
Box/>
<
Appearance>
</
Appearance>
</
Shape>
<
Transform translation='
0 2 0'>
<
Shape>
<
Text string='
"Zoom in, out"'
solid='
false'>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</
Text>
<
Appearance>
<Material/>
</
Appearance>
</
Shape>
</
Transform>
</
Transform>
<
Transform DEF='
TargetBoxDolly'
translation='
-40 1 -20'>
<
Shape>
<
Box/>
<
Appearance>
</
Appearance>
</
Shape>
<
Transform translation='
0 2 0'>
<
Shape>
<
Text string='
"Dolly left, right"'
solid='
false'>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</
Text>
<
Appearance>
<Material/>
</
Appearance>
</
Shape>
</
Transform>
</
Transform>
<
Transform DEF='
TargetBoxPan'
translation='
-30 1 -20'>
<
Shape>
<
Box/>
<
Appearance>
</
Appearance>
</
Shape>
<
Transform translation='
0 2 0'>
<
Shape>
<
Text string='
"Pan left, right"'
solid='
false'>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</
Text>
<
Appearance>
<Material/>
</
Appearance>
</
Shape>
</
Transform>
</
Transform>
<
Transform DEF='
TargetBoxBoom'
translation='
-20 1 -20'>
<
Shape>
<
Box/>
<
Appearance>
</
Appearance>
</
Shape>
<
Transform translation='
0 2 0'>
<
Shape>
<
Text string='
"Boom up, down"'
solid='
false'>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</
Text>
<
Appearance>
<Material/>
</
Appearance>
</
Shape>
</
Transform>
</
Transform>
<
Transform DEF='
TargetBoxTilt'
translation='
-10 1 -20'>
<
Shape>
<
Box/>
<
Appearance>
</
Appearance>
</
Shape>
<
Transform translation='
0 2 0'>
<
Shape>
<
Text string='
"Tilt left, right"'
solid='
false'>
<FontStyle justify='"MIDDLE" "MIDDLE"'/>
</
Text>
<
Appearance>
<Material/>
</
Appearance>
</
Shape>
</
Transform>
</
Transform>
</
Group>
<!-- =============== Camera.AimPointTest ============== -->
<!--
Camera.AimPointTest ROUTEs:
[
from CameraTimer.AimPointTest.fraction_changed to set_fraction
]
[
from TextTouchActive.AimPointFilter.inputTrue to set_bind
]
[
from totalDuration to CameraTimer.AimPointTest.cycleInterval
]
[
from position to CameraShapeTransform.translation
]
[
from orientation_changed to CameraShapeTransform.rotation
]
[
from isBound to CrossHairInstance.set_enabled
]
-->
<
ProtoInstance name='
Camera'
DEF='
Camera.AimPointTest'>
<
fieldValue name='
description'
value='
AimPointTest for moving camera tracking moving target'/>
<
fieldValue name='
position'
value='
4 4 10'/>
<
fieldValue name='
shots'>
<
ProtoInstance name='
CameraShot'
DEF='
Shot5'>
<
fieldValue name='
description'
value='
#3 Tracking shot'/>
<
fieldValue name='
initialPosition'
value='
6 6 10'/>
<
fieldValue name='
initialOrientation'
value='
0 1 0 0'/>
<
fieldValue name='
moves'>
<!--
MoveAimPoint3.1 ROUTE:
[
from BoxPath.value_changed to goalAimPoint
]
-->
<
ProtoInstance name='
CameraMovement'
DEF='
MoveAimPoint3.1'>
<fieldValue name='description' value='AimPoint 3.1 moving BoxPath'/>
<fieldValue name='tracking' value='true'/>
<fieldValue name='duration' value='8'/>
<fieldValue name='goalPosition' value='6 6 10'/>
<!-- goalAimPoint modified by ROUTE to match moving Box -->
</
ProtoInstance>
<!--
MoveAimPoint3.2 ROUTE:
[
from BoxPath.value_changed to goalAimPoint
]
-->
<
ProtoInstance name='
CameraMovement'
DEF='
MoveAimPoint3.2'>
<fieldValue name='description' value='AimPoint 3.2 pan right while tracking'/>
<fieldValue name='tracking' value='true'/>
<fieldValue name='duration' value='8'/>
<fieldValue name='goalPosition' value='40 6 12'/>
<!-- goalAimPoint modified by ROUTE to match moving Box -->
</
ProtoInstance>
<!--
MoveAimPoint3.3 ROUTE:
[
from BoxPath.value_changed to goalAimPoint
]
-->
<
ProtoInstance name='
CameraMovement'
DEF='
MoveAimPoint3.3'>
<fieldValue name='description' value='AimPoint 3.3 boom up while tracking'/>
<fieldValue name='tracking' value='true'/>
<fieldValue name='duration' value='3'/>
<fieldValue name='goalPosition' value='40 20 13'/>
<!-- goalAimPoint modified by ROUTE to match moving Box -->
</
ProtoInstance>
<
ProtoInstance name='
CameraMovement'
DEF='
MoveAimPoint3.4'>
<fieldValue name='description' value='AimPoint 3.4 restore camera back to home'/>
<!-- can test tracking or not using following values -->
<fieldValue name='tracking' value='true'/>
<fieldValue name='duration' value='5'/>
<fieldValue name='goalPosition' value='4 4 10'/>
<fieldValue name='goalAimPoint' value='4 4 0'/>
<fieldValue name='goalOrientation' value='0 1 0 0'/>
</
ProtoInstance>
</
fieldValue>
</
ProtoInstance>
</
fieldValue>
</
ProtoInstance>
<
Group DEF='
AnimationGroup.AimPointTest'>
</
Group>
<!-- TODO build a test once implemented -->
<
ProtoInstance name='
OfflineRender'/>
<!-- =============== animate a camera shape to visualize view changes ============== -->
<!--
CameraShapeTransform ROUTEs:
[
from Camera.SimpleShotsTest.position_changed to translation
]
[
from Camera.SimpleShotsTest.orientation_changed to rotation
]
[
from Camera.AimPointTest.position to translation
]
[
from Camera.AimPointTest.orientation_changed to rotation
]
-->
<
Transform DEF='
CameraShapeTransform'
translation='
0 0.5 0'>
</
Transform>
<!-- =============== add checkerboard, axes and other things to look at while animating ============== -->
<
Background skyColor='
0.282353 0.380392 0.470588'
transparency='
0'/>
<
Transform rotation='
1 0 0 -1.57079'
scale='
10 10 10'>
<
Shape>
<
Appearance>
<Material ambientIntensity='0.01' diffuseColor='1.0 1.0 1.0' shininess='0.05'/>
</
Appearance>
<
IndexedFaceSet colorPerVertex='
false'
normalPerVertex='
false'
solid='
false'
colorIndex='
0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0 1 0'
coordIndex='
0 8 9 1 -1 1 9 10 2 -1 2 10 11 3 -1 3 11 12 4 -1 4 12 13 5 -1 5 13 14 6 -1 6 14 15 7 -1 8 16 17 9 -1 9 17 18 10 -1 10 18 19 11 -1 11 19 20 12 -1 12 20 21 13 -1 13 21 22 14 -1 14 22 23 15 -1 16 24 25 17 -1 17 25 26 18 -1 18 26 27 19 -1 19 27 28 20 -1 20 28 29 21 -1 21 29 30 22 -1 22 30 31 23 -1 24 32 33 25 -1 25 33 34 26 -1 26 34 35 27 -1 27 35 36 28 -1 28 36 37 29 -1 29 37 38 30 -1 30 38 39 31 -1 32 40 41 33 -1 33 41 42 34 -1 34 42 43 35 -1 35 43 44 36 -1 36 44 45 37 -1 37 45 46 38 -1 38 46 47 39 -1 40 48 49 41 -1 41 49 50 42 -1 42 50 51 43 -1 43 51 52 44 -1 44 52 53 45 -1 45 53 54 46 -1 46 54 55 47 -1 48 56 57 49 -1 49 57 58 50 -1 50 58 59 51 -1 51 59 60 52 -1 52 60 61 53 -1 53 61 62 54 -1 54 62 63 55 -1'>
<Coordinate point='-5.25 5.25 0.0 -3.75 5.25 0.0 -2.25 5.25 0.0 -0.75 5.25 0.0 0.75 5.25 0.0 2.25 5.25 0.0 3.75 5.25 0.0 5.25 5.25 0.0 -5.25 3.75 0.0 -3.75 3.75 0.0 -2.25 3.75 0.0 -0.75 3.75 0.0 0.75 3.75 0.0 2.25 3.75 0.0 3.75 3.75 0.0 5.25 3.75 0.0 -5.25 2.25 0.0 -3.75 2.25 0.0 -2.25 2.25 0.0 -0.75 2.25 0.0 0.75 2.25 0.0 2.25 2.25 0.0 3.75 2.25 0.0 5.25 2.25 0.0 -5.25 0.75 0.0 -3.75 0.75 0.0 -2.25 0.75 0.0 -0.75 0.75 0.0 0.75 0.75 0.0 2.25 0.75 0.0 3.75 0.75 0.0 5.25 0.75 0.0 -5.25 -0.75 0.0 -3.75 -0.75 0.0 -2.25 -0.75 0.0 -0.75 -0.75 0.0 0.75 -0.75 0.0 2.25 -0.75 0.0 3.75 -0.75 0.0 5.25 -0.75 0.0 -5.25 -2.25 0.0 -3.75 -2.25 0.0 -2.25 -2.25 0.0 -0.75 -2.25 0.0 0.75 -2.25 0.0 2.25 -2.25 0.0 3.75 -2.25 0.0 5.25 -2.25 0.0 -5.25 -3.75 0.0 -3.75 -3.75 0.0 -2.25 -3.75 0.0 -0.75 -3.75 0.0 0.75 -3.75 0.0 2.25 -3.75 0.0 3.75 -3.75 0.0 5.25 -3.75 0.0 -5.25 -5.25 0.0 -3.75 -5.25 0.0 -2.25 -5.25 0.0 -0.75 -5.25 0.0 0.75 -5.25 0.0 2.25 -5.25 0.0 3.75 -5.25 0.0 5.25 -5.25 0.0'/>
<Color color='0.435294 0.741176 0 0 0.560784 0.580392'/>
</
IndexedFaceSet>
</
Shape>
</
Transform>
<
Transform scale='
3 3 3'
translation='
0 0.25 0'>
</
Transform>
<!--
MovingBoxTransform ROUTE:
[
from BoxPath.value_changed to translation
]
-->
<
Transform DEF='
MovingBoxTransform'>
</
Transform>
<!-- ================ CrossHair visualization for center of screen ================ -->
<
ExternProtoDeclare name='
CrossHair'
appinfo='
CrossHair prototype provides a heads-up display (HUD) crosshair at the view center, which is useful for assessing NavigationInfo lookAt point'
url='
"
../../Savage/Tools/HeadsUpDisplays/CrossHairPrototype.x3d#CrossHair"
"
https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairPrototype.x3d#CrossHair"
"
../../Savage/Tools/HeadsUpDisplays/CrossHairPrototype.wrl#CrossHair"
"
https://savage.nps.edu/Savage/Tools/HeadsUpDisplays/CrossHairPrototype.wrl#CrossHair"
'>
<field name='enabled' type='SFBool' accessType='initializeOnly'
appinfo='whether CrissHair orititype is enabled or not'/>
<field name='set_enabled' type='SFBool' accessType='inputOnly'
appinfo='control whether enabled/disabled'/>
<field name='markerColor' type='SFColor' accessType='inputOutput'
appinfo='color of CrossHair marker'/>
<field name='scale' type='SFVec3f' accessType='inputOutput'
appinfo='size of CrossHair in meters'/>
<field name='positionOffsetFromCamera' type='SFVec3f' accessType='inputOutput'
appinfo='distance in front of HUD viewpoint'/>
</
ExternProtoDeclare>
<!--
CrossHairInstance ROUTEs:
[
from Camera.SimpleShotsTest.isBound to set_enabled
]
[
from Camera.AimPointTest.isBound to set_enabled
]
-->
<
ProtoInstance name='
CrossHair'
DEF='
CrossHairInstance'>
<fieldValue name='enabled' value='true'/>
<fieldValue name='markerColor' value='1 0.5 0'/>
<fieldValue name='scale' value='1 1 1'/>
<fieldValue name='positionOffsetFromCamera' value='0 0 -6'/>
</
ProtoInstance>
<!-- turn on CrossHairInstance when animated camera viewpoints are bound -->
<
ROUTE fromNode='
Camera.SimpleShotsTest'
fromField='
isBound'
toNode='
CrossHairInstance'
toField='
set_enabled'/>
<
ROUTE fromNode='
Camera.AimPointTest'
fromField='
isBound'
toNode='
CrossHairInstance'
toField='
set_enabled'/>
<!-- turn off CrossHairInstance when animated camera viewpoints are unbound <BooleanFilter DEF='NegateCrossHair'/> <ROUTE fromField='isBound' fromNode='Camera.SimpleShotsTest' toField='set_boolean' toNode='NegateCrossHair'/> <ROUTE fromField='isBound' fromNode='Camera.AimPointTest' toField='set_boolean' toNode='NegateCrossHair'/> <ROUTE fromField='inputNegate' fromNode='NegateCrossHair' toField='set_enabled' toNode='CrossHairInstance'/> -->
<!-- =============== TODO Launch Prototype Example ============== -->
<
Anchor description='
launch CameraExample scene'
parameter='
"target=_blank"'
url='
"
CameraExample.x3d"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraExample.x3d"
"
CameraExample.wrl"
"
http://www.web3d.org/x3d/content/examples/Basic/development/CameraExample.wrl"
'>
<
Transform translation='
0 -3 0'>
<
Shape>
<
Text string='
"CameraPrototype" "defines a prototype" "" "Click on this text to see" "CameraExample scene"'
solid='
false'>
<FontStyle justify='"MIDDLE" "MIDDLE"' size='0.5'/>
</
Text>
<
Appearance>
<Material diffuseColor='1 1 0.2'/>
</
Appearance>
</
Shape>
</
Transform>
</
Anchor>