| 1 |
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
|
| 3 | <X3D profile='Immersive' version='3.3' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.3.xsd'> |
| 4 | <head> |
| 5 | <meta name='title' content=' CameraExamples.x3d '/> |
| 6 | <meta name='description' content='Camera, CameraShot and CameraMove examples that demonstrate storyboard capabilities and precise camera operation. This is a developmental effort for potential X3D Specification improvement.'/> |
| 7 | <meta name='documentation' content='Two demos are found in the scene, click the "red text" on left or right to start. (a) SimpleShotsTest shows Zoom in/out, Pan left/right, Boom up/down, Tilt left/right, with each is defined by a CameraShot collecting a series of CameraMovements. (b) AimPointTest gradually slews the camera view to look at the sliding cube, then follows it around before returning to original viewpoint.'/> |
| 8 | <meta name='creator' content='Don Brutzman and Jeff Weekley'/> |
| 9 | <meta name='created' content='18 June 2009'/> |
| 10 | <meta name='modified' content='18 July 2025'/> |
| 11 | <meta name=' TODO ' content=' Schematron rules, backed up by initialize() checks '/> |
| 12 | <meta name='reference' content=' BeyondViewpointCameraNodesWeb3D2009.pdf '/> |
| 13 | <meta name='MovingImage' content=' CameraExamplesDemo.mp4 '/> |
| 14 | <meta name='reference' content=' https://www.web3d.org/x3d/specifications/ISO-IEC-FDIS-19775-1.2-X3D-AbstractSpecification/Part01/components/navigation.html '/> |
| 15 | <meta name='subject' content='Camera nodes for Viewpoint navigation control'/> |
| 16 | <meta name='reference' content=' CameraPrototypes.x3d '/> |
| 17 | <meta name='reference' content=' CameraExamplesConsoleLog.txt '/> |
| 18 | <meta name='reference' content='http://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Basic/development/CameraExamples.avi'/> |
| 19 | <meta name='reference' content=' https://www.web3d.org/x3d/content/examples/Basic/UniversalMediaMaterials/gridBack.x3d '/> |
| 20 | <meta name='identifier' content=' https://www.web3d.org/x3d/content/examples/Basic/development/CameraExamples.x3d '/> |
| 21 | <meta name='reference' content=' http://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Basic/development/CameraExamples.x3d '/> |
| 22 | <meta name='generator' content='X3D-Edit 4.0, https://www.web3d.org/x3d/tools/X3D-Edit'/> |
| 23 | <meta name='license' content='../license.html'/> |
| 24 | </head> |
| 25 | <Scene> |
| 26 | <!-- =============== Camera ============== --> |
| 27 | <WorldInfo title='CameraExamples.x3d'/> |
| 28 | <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" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.x3d#Camera" "CameraPrototypes.wrl#Camera" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.wrl#Camera" '> |
| 29 |
<field name='description' type='SFString' accessType='inputOutput'
appinfo='Text description to be displayed for this Camera'/> |
| 30 |
<field name='position' type='SFVec3f' accessType='inputOutput'
appinfo='Camera position in local transformation frame, which is default prior to first CameraShot initialPosition getting activated'/> |
| 31 |
<field name='orientation' type='SFRotation' accessType='inputOutput'
appinfo='Camera rotation in local transformation frame, which is default prior to first CameraShot initialPosition getting activated'/> |
| 32 |
<field name='fieldOfView' type='SFFloat' accessType='inputOutput'
appinfo='pi/4'/> |
| 33 |
<field name='set_fraction' type='SFFloat' accessType='inputOnly'
appinfo='input fraction drives interpolators'/> |
| 34 |
<field name='set_bind' type='SFBool' accessType='inputOnly'
appinfo='input event binds or unbinds this Camera'/> |
| 35 |
<field name='bindTime' type='SFTime' accessType='outputOnly'
appinfo='output event indicates when this Camera is bound'/> |
| 36 |
<field name='isBound' type='SFBool' accessType='outputOnly'
appinfo='output event indicates whether this Camera is bound or unbound'/> |
| 37 |
<field name='nearClipPlane' type='SFFloat' accessType='inputOutput'
appinfo='Vector distance to near clipping plane corresponds to NavigationInfo.avatarSize[0]'/> |
| 38 |
<field name='farClipPlane' type='SFFloat' accessType='inputOutput'
appinfo='Vector distance to far clipping plane corresponds to NavigationInfo.visibilityLimit'/> |
| 39 |
<field name='shots' type='MFNode' accessType='inputOutput'
appinfo='Array of CameraShot nodes which in turn contain CameraMovement nodes'/> |
| 40 |
<field name='headlight' type='SFBool' accessType='inputOutput'
appinfo='Whether camera headlight is on or off'/> |
| 41 |
<field name='headlightColor' type='SFColor' accessType='inputOutput'
appinfo='Camera headlight color'/> |
| 42 |
<field name='headlightIntensity' type='SFFloat' accessType='inputOutput'
appinfo='Camera headlight intensity'/> |
| 43 |
<field name='filterColor' type='SFColor' accessType='inputOutput'
appinfo='Camera filter color that modifies virtual lens capture'/> |
| 44 |
<field name='filterTransparency' type='SFFloat' accessType='inputOutput'
appinfo='Camera filter transparency that modifies virtual lens capture'/> |
| 45 |
<field name='upVector' type='SFVec3f' accessType='inputOutput'
appinfo='upVector changes modify camera orientation (and possibly vice versa)'/> |
| 46 |
<field name='fStop' type='SFFloat' accessType='inputOutput'
appinfo='Focal length divided effective aperture diameter indicating width of focal plane'/> |
| 47 |
<field name='focusDistance' type='SFFloat' accessType='inputOutput'
appinfo='Distance to focal plane of sharpest focus'/> |
| 48 |
<field name='isActive' type='SFBool' accessType='outputOnly'
appinfo='Mark start/stop with true/false output respectively useful to trigger external animations'/> |
| 49 |
<field name='totalDuration' type='SFTime' accessType='outputOnly'
appinfo='Total duration of contained enabled CameraShot (and thus CameraMovement) move durations'/> |
| 50 |
<field name='offlineRender' type='SFNode' accessType='inputOutput'
appinfo='OfflineRender node'/> |
| 51 |
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/> |
| 52 | <!-- Viewpoint-related fields, NavigationInfo-related fields and Camera-unique fields --> |
| 53 | </ExternProtoDeclare> |
| 54 | <!-- =============== CameraShot ============== --> |
| 55 | <ExternProtoDeclare name='CameraShot' appinfo='CameraShot collects a specific set of CameraMovement animations that make up an individual shot' url=' "CameraPrototypes.x3d#CameraShot" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.x3d#CameraShot" "CameraPrototypes.wrl#CameraShot" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.wrl#CameraShot" '> |
| 56 |
<field name='description' type='SFString' accessType='inputOutput'
appinfo='Text description to be displayed for this CameraShot'/> |
| 57 |
<field name='enabled' type='SFBool' accessType='inputOutput'
appinfo='Whether this CameraShot can be activated'/> |
| 58 |
<field name='moves' type='MFNode' accessType='inputOutput'
appinfo='Set of CameraMovement nodes'> |
| 59 | <!-- initializing CameraMovement nodes are inserted here by scene author using ProtoInstance --> |
| 60 | </field> |
| 61 |
<field name='initialPosition' type='SFVec3f' accessType='inputOutput'
appinfo='Setup to reinitialize camera position for this shot'/> |
| 62 |
<field name='initialOrientation' type='SFRotation' accessType='inputOutput'
appinfo='Setup to reinitialize camera rotation for this shot'/> |
| 63 |
<field name='initialAimPoint' type='SFVec3f' accessType='inputOutput'
appinfo='Setup to reinitialize aimpoint (relative location for camera direction) for this shot'/> |
| 64 |
<field name='initialFieldOfView' type='SFFloat' accessType='inputOutput'
appinfo='pi/4'/> |
| 65 |
<field name='initialFStop' type='SFFloat' accessType='inputOutput'
appinfo='Focal length divided effective aperture diameter indicating width of focal plane'/> |
| 66 |
<field name='initialFocusDistance' type='SFFloat' accessType='inputOutput'
appinfo='Distance to focal plane of sharpest focus'/> |
| 67 |
<field name='shotDuration' type='SFTime' accessType='outputOnly'
appinfo='Subtotal duration of contained CameraMovement move durations'/> |
| 68 |
<field name='isActive' type='SFBool' accessType='outputOnly'
appinfo='Mark start/stop with true/false output respectively useful to trigger external animations'/> |
| 69 |
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/> |
| 70 | </ExternProtoDeclare> |
| 71 | <!-- =============== CameraMovement ============== --> |
| 72 | <ExternProtoDeclare name='CameraMovement' appinfo='CameraMovement defines a single camera movement animation' url=' "CameraPrototypes.x3d#CameraMovement" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.x3d#CameraMovement" "CameraPrototypes.wrl#CameraMovement" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.wrl#CameraMovement" '> |
| 73 |
<field name='description' type='SFString' accessType='inputOutput'
appinfo='Text description to be displayed for this CameraMovement'/> |
| 74 |
<field name='enabled' type='SFBool' accessType='inputOutput'
appinfo='Whether this CameraMovement can be activated'/> |
| 75 |
<field name='duration' type='SFFloat' accessType='inputOutput'
appinfo='Duration in seconds for this move'/> |
| 76 |
<field name='goalPosition' type='SFVec3f' accessType='inputOutput'
appinfo='Goal camera position for this move'/> |
| 77 |
<field name='goalOrientation' type='SFRotation' accessType='inputOutput'
appinfo='Goal camera rotation for this move'/> |
| 78 |
<field name='tracking' type='SFBool' accessType='inputOutput'
appinfo='Whether or not camera direction is tracking towards the aimPoint'/> |
| 79 |
<field name='goalAimPoint' type='SFVec3f' accessType='inputOutput'
appinfo='Goal aimPoint for this move, ignored if tracking=false'/> |
| 80 |
<field name='goalFieldOfView' type='SFFloat' accessType='inputOutput'
appinfo='Goal fieldOfView for this move'/> |
| 81 |
<field name='goalFStop' type='SFFloat' accessType='inputOutput'
appinfo='Focal length divided effective aperture diameter indicating width of focal plane'/> |
| 82 |
<field name='goalFocusDistance' type='SFFloat' accessType='inputOutput'
appinfo='Distance to focal plane of sharpest focus'/> |
| 83 |
<field name='isActive' type='SFBool' accessType='outputOnly'
appinfo='Mark start/stop with true/false output respectively useful to trigger external animations'/> |
| 84 |
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/> |
| 85 | </ExternProtoDeclare> |
| 86 | <!-- =============== OfflineRender ============== --> |
| 87 | <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" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.x3d#OfflineRender" "CameraPrototypes.wrl#OfflineRender" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraPrototypes.wrl#OfflineRender" '> |
| 88 |
<field name='description' type='SFString' accessType='inputOutput'
appinfo='Text description to be displayed for this OfflineRender'/> |
| 89 |
<field name='enabled' type='SFBool' accessType='inputOutput'
appinfo='Whether this OfflineRender can be activated'/> |
| 90 |
<field name='frameRate' type='SFFloat' accessType='inputOutput'
appinfo='Frames per second recorded for this rendering'/> |
| 91 |
<field name='frameSize' type='SFVec2f' accessType='inputOutput'
appinfo='Size of frame in number of pixels width and height'/> |
| 92 |
<field name='pixelAspectRatio' type='SFFloat' accessType='inputOutput'
appinfo='Relative dimensions of pixel height/width typically 1.33 or 1'/> |
| 93 |
<field name='set_startTime' type='SFTime' accessType='inputOnly'
appinfo='Begin render operation'/> |
| 94 |
<field name='progress' type='SFFloat' accessType='outputOnly'
appinfo='Progress performing render operation (0..1)'/> |
| 95 |
<field name='renderCompleteTime' type='SFTime' accessType='outputOnly'
appinfo='Render operation complete'/> |
| 96 |
<field name='movieFormat' type='MFString' accessType='initializeOnly'
appinfo='Format of rendered output movie (mpeg mp4 etc.), use first supported format'/> |
| 97 |
<field name='imageFormat' type='MFString' accessType='initializeOnly'
appinfo='Format of rendered output images (png jpeg gif tiff etc.) use first supported format'/> |
| 98 |
<field name='traceEnabled' type='SFBool' accessType='initializeOnly'
appinfo='enable console output to trace script computations and prototype progress'/> |
| 99 | <!-- TODO non-photorealistic rendering (NPR) parameters --> |
| 100 | </ExternProtoDeclare> |
| 101 | <!-- =============== Lights, camera, action! ============== --> |
| 102 | <DirectionalLight direction='0 -1 0' global='true' intensity='0.8'/> |
| 103 | <NavigationInfo type='"EXAMINE" "FLY" "ANY"'/> |
| 104 | <Viewpoint description='Camera test scene entry view' position='0 2 12'/> |
| 105 | <Viewpoint description='Camera test scene from above' orientation='1 0 0 -1.57079' position='0 150 0'/> |
| 106 | <!-- Keep prototype instances in same file while developing, then move later --> |
| 107 | <!-- We will create examples matching those in the paper --> |
| 108 | <!-- =============== Camera_SimpleShotsTest ============== --> |
| 109 |
<!-- ROUTE information for Camera_SimpleShotsTest node:
[from CameraTimer_SimpleShots.fraction_changed to set_fraction
]
[from TextTouchActive_SimpleShotsFilter.inputTrue to set_bind
]
[from totalDuration to CameraTimer_SimpleShots.cycleInterval
]
[from position to CameraShapeTransform.translation
]
[from orientation to CameraShapeTransform.rotation
]
[from isBound to CrossHairInstance.set_enabled
]
-->
<ProtoInstance name='Camera' DEF='Camera_SimpleShotsTest'> |
| 110 | <fieldValue name='description' value='SimpleShotsTest for camera Zoom Dolly Pan Boom and Tilt'/> |
| 111 | <fieldValue name='headlight' value='true'/> |
| 112 | <fieldValue name='position' value='-4 4 10'/> |
| 113 | <fieldValue name='shots'> |
| 114 | <ProtoInstance name='CameraShot' DEF='Zoom'> |
| 115 | <fieldValue name='description' value='Simple shot of Camera Zoom'/> |
| 116 | <fieldValue name='initialPosition' value='-50 1 -10'/> |
| 117 | <fieldValue name='initialOrientation' value='0 1 0 0'/> |
| 118 | <fieldValue name='moves'> |
| 119 | <ProtoInstance name='CameraMovement'> |
| 120 | <fieldValue name='description' value='Camera Zoom In'/> |
| 121 | <fieldValue name='duration' value='3'/> |
| 122 | <fieldValue name='goalPosition' value='-50 1 -15'/> |
| 123 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 124 | </ProtoInstance> |
| 125 | <ProtoInstance name='CameraMovement'> |
| 126 | <fieldValue name='description' value='Camera Zoom Out'/> |
| 127 | <fieldValue name='duration' value='3'/> |
| 128 | <fieldValue name='goalPosition' value='-50 1 -10'/> |
| 129 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 130 | </ProtoInstance> |
| 131 | <ProtoInstance name='CameraMovement'> |
| 132 | <fieldValue name='description' value='Camera Pause'/> |
| 133 | <fieldValue name='duration' value='1'/> |
| 134 | <fieldValue name='goalPosition' value='-50 1 -10'/> |
| 135 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 136 | </ProtoInstance> |
| 137 | </fieldValue> |
| 138 | </ProtoInstance> |
| 139 | <ProtoInstance name='CameraShot' DEF='Dolly'> |
| 140 | <fieldValue name='description' value='Simple shot of Camera Dolly'/> |
| 141 | <fieldValue name='initialPosition' value='-40 1 -10'/> |
| 142 | <fieldValue name='initialOrientation' value='0 1 0 0'/> |
| 143 | <fieldValue name='moves'> |
| 144 | <ProtoInstance name='CameraMovement' DEF='DollyMove1'> |
| 145 | <fieldValue name='description' value='Camera Dolly from Right to Left'/> |
| 146 | <fieldValue name='duration' value='3'/> |
| 147 | <fieldValue name='goalPosition' value='-45 1 -10'/> |
| 148 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 149 | </ProtoInstance> |
| 150 | <ProtoInstance name='CameraMovement'> |
| 151 | <fieldValue name='description' value='Camera Dolly from Left to Right'/> |
| 152 | <fieldValue name='duration' value='3'/> |
| 153 | <fieldValue name='goalPosition' value='-40 1 -10'/> |
| 154 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 155 | </ProtoInstance> |
| 156 | <ProtoInstance name='CameraMovement'> |
| 157 | <fieldValue name='description' value='Camera Pause'/> |
| 158 | <fieldValue name='duration' value='1'/> |
| 159 | <fieldValue name='goalPosition' value='-40 1 -10'/> |
| 160 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 161 | </ProtoInstance> |
| 162 | </fieldValue> |
| 163 | </ProtoInstance> |
| 164 | <ProtoInstance name='CameraShot' DEF='Pan'> |
| 165 | <fieldValue name='description' value='Simple shot of Camera Pan left right and back to center'/> |
| 166 | <fieldValue name='initialPosition' value='-30 1 -10'/> |
| 167 | <fieldValue name='initialOrientation' value='0 1 0 0'/> |
| 168 | <fieldValue name='moves'> |
| 169 | <ProtoInstance name='CameraMovement' DEF='PanLeft'> |
| 170 | <fieldValue name='description' value='Pan Left'/> |
| 171 | <fieldValue name='duration' value='2'/> |
| 172 | <fieldValue name='goalPosition' value='-30 1 -10'/> |
| 173 | <fieldValue name='goalOrientation' value='0 1 0 0.4'/> |
| 174 | </ProtoInstance> |
| 175 | <ProtoInstance name='CameraMovement' DEF='PanRight'> |
| 176 | <fieldValue name='description' value='Pan Right'/> |
| 177 | <fieldValue name='duration' value='3'/> |
| 178 | <fieldValue name='goalPosition' value='-30 1 -10'/> |
| 179 | <fieldValue name='goalOrientation' value='0 1 0 -0.4'/> |
| 180 | </ProtoInstance> |
| 181 | <ProtoInstance name='CameraMovement'> |
| 182 | <fieldValue name='description' value='Camera Pan back to Center'/> |
| 183 | <fieldValue name='duration' value='2'/> |
| 184 | <fieldValue name='goalPosition' value='-30 1 -10'/> |
| 185 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 186 | </ProtoInstance> |
| 187 | <ProtoInstance name='CameraMovement'> |
| 188 | <fieldValue name='description' value='Camera Pause'/> |
| 189 | <fieldValue name='duration' value='2'/> |
| 190 | <fieldValue name='goalPosition' value='-30 1 -10'/> |
| 191 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 192 | </ProtoInstance> |
| 193 | </fieldValue> |
| 194 | </ProtoInstance> |
| 195 | <ProtoInstance name='CameraShot' DEF='CameraBoom'> |
| 196 | <fieldValue name='description' value='Camera Boom'/> |
| 197 | <fieldValue name='initialPosition' value='-20 1 -10'/> |
| 198 | <fieldValue name='initialOrientation' value='0 1 0 0'/> |
| 199 | <fieldValue name='moves'> |
| 200 | <ProtoInstance name='CameraMovement' DEF='CameraBoomUp'> |
| 201 | <fieldValue name='description' value='Camera Boom Up'/> |
| 202 | <fieldValue name='duration' value='3'/> |
| 203 | <fieldValue name='goalPosition' value='-20 5 -10'/> |
| 204 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 205 | </ProtoInstance> |
| 206 | <ProtoInstance name='CameraMovement' DEF='BoomDown'> |
| 207 | <fieldValue name='description' value='Camera Boom Down'/> |
| 208 | <fieldValue name='duration' value='3'/> |
| 209 | <fieldValue name='goalPosition' value='-20 1 -10'/> |
| 210 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 211 | </ProtoInstance> |
| 212 | <ProtoInstance name='CameraMovement' DEF='BoomPause'> |
| 213 | <fieldValue name='description' value='Camera Pause'/> |
| 214 | <fieldValue name='duration' value='2'/> |
| 215 | <fieldValue name='goalPosition' value='-20 1 -10'/> |
| 216 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 217 | </ProtoInstance> |
| 218 | </fieldValue> |
| 219 | </ProtoInstance> |
| 220 | <ProtoInstance name='CameraShot' DEF='CameraTilt'> |
| 221 | <fieldValue name='description' value='Camera Tilt'/> |
| 222 | <fieldValue name='initialPosition' value='-10 1 -10'/> |
| 223 | <fieldValue name='initialOrientation' value='0 0 1 0'/> |
| 224 | <fieldValue name='traceEnabled' value='true'/> |
| 225 | <fieldValue name='moves'> |
| 226 | <ProtoInstance name='CameraMovement'> |
| 227 | <fieldValue name='description' value='Camera Tilt Pause'/> |
| 228 | <fieldValue name='duration' value='1'/> |
| 229 | <fieldValue name='goalPosition' value='-10 1 -10'/> |
| 230 | <fieldValue name='goalOrientation' value='0 0 1 0'/> |
| 231 | </ProtoInstance> |
| 232 | <ProtoInstance name='CameraMovement' DEF='TiltDown'> |
| 233 | <fieldValue name='description' value='Camera Tilt Left'/> |
| 234 | <fieldValue name='duration' value='3'/> |
| 235 | <fieldValue name='goalPosition' value='-10 1 -10'/> |
| 236 | <fieldValue name='goalOrientation' value='0 0 1 0.785'/> |
| 237 | </ProtoInstance> |
| 238 | <ProtoInstance name='CameraMovement' DEF='TiltPause'> |
| 239 | <fieldValue name='description' value='Camera Tilt Pause'/> |
| 240 | <fieldValue name='duration' value='1'/> |
| 241 | <fieldValue name='goalPosition' value='-10 1 -10'/> |
| 242 | <fieldValue name='goalOrientation' value='0 0 1 0.785'/> |
| 243 | </ProtoInstance> |
| 244 | <ProtoInstance name='CameraMovement'> |
| 245 | <fieldValue name='description' value='Camera Tilt Right'/> |
| 246 | <fieldValue name='duration' value='3'/> |
| 247 | <fieldValue name='goalPosition' value='-10 1 -10'/> |
| 248 | <fieldValue name='goalOrientation' value='0 0 1 -0.785'/> |
| 249 | </ProtoInstance> |
| 250 | <ProtoInstance name='CameraMovement'> |
| 251 | <fieldValue name='description' value='Camera Tilt Pause'/> |
| 252 | <fieldValue name='duration' value='1'/> |
| 253 | <fieldValue name='goalPosition' value='-10 1 -10'/> |
| 254 | <fieldValue name='goalOrientation' value='0 0 1 -0.785'/> |
| 255 | </ProtoInstance> |
| 256 | <ProtoInstance name='CameraMovement' DEF='TiltReset'> |
| 257 | <fieldValue name='description' value='Camera Tilt Reset'/> |
| 258 | <fieldValue name='duration' value='1'/> |
| 259 | <fieldValue name='goalPosition' value='-10 1 -10'/> |
| 260 | <fieldValue name='goalOrientation' value='0 0 1 0'/> |
| 261 | </ProtoInstance> |
| 262 | <ProtoInstance name='CameraMovement' DEF='TiltUp'> |
| 263 | <fieldValue name='description' value='Return to home'/> |
| 264 | <fieldValue name='duration' value='2'/> |
| 265 | <fieldValue name='goalPosition' value='0 2 12'/> |
| 266 | <fieldValue name='goalOrientation' value='0 0 1 0'/> |
| 267 | </ProtoInstance> |
| 268 | </fieldValue> |
| 269 | </ProtoInstance> |
| 270 | </fieldValue> |
| 271 | </ProtoInstance> |
| 272 | <Group DEF='AnimationGroup_SimpleShots'> |
| 273 |
<!-- ROUTE information for CameraTimer_SimpleShots node:
[from Camera_SimpleShotsTest.totalDuration to cycleInterval
]
[from TextTouch_SimpleShots.touchTime to startTime
]
[from fraction_changed to Camera_SimpleShotsTest.set_fraction
]
-->
<TimeSensor DEF='CameraTimer_SimpleShots'/> |
| 274 | <!-- initialize clock to match totalDuration of combined Shot Moves --> |
| 275 | < ROUTE fromNode='Camera_SimpleShotsTest' fromField='totalDuration' toNode='CameraTimer_SimpleShots' toField='cycleInterval'/> |
| 276 | <!-- TimeSensor animates the CameraClock since that maintains the computed PositionInterpolator and OrientationInterpolator --> |
| 277 | < ROUTE fromNode='CameraTimer_SimpleShots' fromField='fraction_changed' toNode='Camera_SimpleShotsTest' toField='set_fraction'/> |
| 278 | <Transform DEF='Trigger_SimpleShots' translation='-4 4 0'> |
| 279 |
<!-- ROUTE information for TextTouchActive_SimpleShotsFilter node:
[from TextTouch_SimpleShots.isActive to set_boolean
]
[from inputTrue to Camera_SimpleShotsTest.set_bind
]
-->
<BooleanFilter DEF='TextTouchActive_SimpleShotsFilter'/> |
| 280 |
<!-- ROUTE information for TextTouch_SimpleShots node:
[from isActive to TextTouchActive_SimpleShotsFilter.set_boolean
]
[from touchTime to CameraTimer_SimpleShots.startTime
]
-->
<TouchSensor DEF='TextTouch_SimpleShots' description='touch to animate Camera SimpleShotsTest'/> |
| 281 | < ROUTE fromNode='TextTouchActive_SimpleShotsFilter' fromField='inputTrue' toNode='Camera_SimpleShotsTest' toField='set_bind'/> |
| 282 | < ROUTE fromNode='TextTouch_SimpleShots' fromField='isActive' toNode='TextTouchActive_SimpleShotsFilter' toField='set_boolean'/> |
| 283 | < ROUTE fromNode='TextTouch_SimpleShots' fromField='touchTime' toNode='CameraTimer_SimpleShots' toField='startTime'/> |
| 284 | <!-- Selectable Text design pattern has transparent Box and TouchSensor description as a tooltip --> |
| 285 | <Shape> |
| 286 | <Text string='"Click to animate" "SimpleShotsTest"'> |
| 287 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 288 | </Text> |
| 289 | <Appearance> |
| 290 | |
| 291 | <!-- Universal Media Library: ArtDeco 5 --> |
| 292 | </Material> |
| 293 | </Appearance> |
| 294 | </Shape> |
| 295 | <!-- Simplify intersection test for user selecting text --> |
| 296 |
<!-- Shape
TransparentBox is a DEF node that has 1 USE node: USE_1 -->
<Shape DEF='TransparentBox'> |
| 297 | <Appearance> |
| 298 | <Material transparency='1'/> |
| 299 | </Appearance> |
| 300 | <Box size='6 2 0.0001'/> |
| 301 | </Shape> |
| 302 | <TouchSensor description='Click to animate SimpleShotsTest'/> |
| 303 | </Transform> |
| 304 | </Group> |
| 305 | <Group DEF='SimpleShotsTargets'> |
| 306 | <Transform DEF='TargetBoxZoom' translation='-50 1 -20'> |
| 307 | <Shape> |
| 308 | <Box/> |
| 309 | <Appearance> |
| 310 | <Material/> |
| 311 |
<ImageTexture
url=' "images/CameraMoveZoom.png
" "https://www.web3d.org/x3d/content/examples/Basic/development/images/CameraMoveZoom.png
" '/>
|
| 312 | </Appearance> |
| 313 | </Shape> |
| 314 | <Transform translation='0 2 0'> |
| 315 | <Shape> |
| 316 | <Text string='"Zoom in, out"'> |
| 317 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 318 | </Text> |
| 319 | <Appearance> |
| 320 | <Material/> |
| 321 | </Appearance> |
| 322 | </Shape> |
| 323 | </Transform> |
| 324 | </Transform> |
| 325 | <Transform DEF='TargetBoxDolly' translation='-40 1 -20'> |
| 326 | <Shape> |
| 327 | <Box/> |
| 328 | <Appearance> |
| 329 | <Material/> |
| 330 |
<ImageTexture
url=' "images/CameraMoveDolly.png
" "https://www.web3d.org/x3d/content/examples/Basic/development/images/CameraMoveDolly.png
" '/>
|
| 331 | </Appearance> |
| 332 | </Shape> |
| 333 | <Transform translation='0 2 0'> |
| 334 | <Shape> |
| 335 | <Text string='"Dolly left, right"'> |
| 336 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 337 | </Text> |
| 338 | <Appearance> |
| 339 | <Material/> |
| 340 | </Appearance> |
| 341 | </Shape> |
| 342 | </Transform> |
| 343 | </Transform> |
| 344 | <Transform DEF='TargetBoxPan' translation='-30 1 -20'> |
| 345 | <Shape> |
| 346 | <Box/> |
| 347 | <Appearance> |
| 348 | <Material/> |
| 349 |
<ImageTexture
url=' "images/CameraMovePan.png
" "https://www.web3d.org/x3d/content/examples/Basic/development/images/CameraMovePan.png
" '/>
|
| 350 | </Appearance> |
| 351 | </Shape> |
| 352 | <Transform translation='0 2 0'> |
| 353 | <Shape> |
| 354 | <Text string='"Pan left, right"'> |
| 355 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 356 | </Text> |
| 357 | <Appearance> |
| 358 | <Material/> |
| 359 | </Appearance> |
| 360 | </Shape> |
| 361 | </Transform> |
| 362 | </Transform> |
| 363 | <Transform DEF='TargetBoxBoom' translation='-20 1 -20'> |
| 364 | <Shape> |
| 365 | <Box/> |
| 366 | <Appearance> |
| 367 | <Material/> |
| 368 |
<ImageTexture
url=' "images/CameraMoveBoom.png
" "https://www.web3d.org/x3d/content/examples/Basic/development/images/CameraMoveBoom.png
" '/>
|
| 369 | </Appearance> |
| 370 | </Shape> |
| 371 | <Transform translation='0 2 0'> |
| 372 | <Shape> |
| 373 | <Text string='"Boom up, down"'> |
| 374 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 375 | </Text> |
| 376 | <Appearance> |
| 377 | <Material/> |
| 378 | </Appearance> |
| 379 | </Shape> |
| 380 | </Transform> |
| 381 | </Transform> |
| 382 | <Transform DEF='TargetBoxTilt' translation='-10 1 -20'> |
| 383 | <Shape> |
| 384 | <Box/> |
| 385 | <Appearance> |
| 386 | <Material/> |
| 387 |
<ImageTexture
url=' "images/CameraMoveTilt.png
" "https://www.web3d.org/x3d/content/examples/Basic/development/images/CameraMoveTilt.png
" '/>
|
| 388 | </Appearance> |
| 389 | </Shape> |
| 390 | <Transform translation='0 2 0'> |
| 391 | <Shape> |
| 392 | <Text string='"Tilt left, right"'> |
| 393 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 394 | </Text> |
| 395 | <Appearance> |
| 396 | <Material/> |
| 397 | </Appearance> |
| 398 | </Shape> |
| 399 | </Transform> |
| 400 | </Transform> |
| 401 | </Group> |
| 402 | <!-- =============== Camera_AimPointTest ============== --> |
| 403 |
<!-- ROUTE information for Camera_AimPointTest node:
[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 to CameraShapeTransform.rotation
]
[from isBound to CrossHairInstance.set_enabled
]
-->
<ProtoInstance name='Camera' DEF='Camera_AimPointTest'> |
| 404 | <fieldValue name='description' value='AimPointTest for moving camera tracking moving target'/> |
| 405 | <fieldValue name='position' value='4 4 10'/> |
| 406 | <fieldValue name='shots'> |
| 407 | <ProtoInstance name='CameraShot' DEF='Shot5'> |
| 408 | <fieldValue name='description' value='#3 Tracking shot'/> |
| 409 | <fieldValue name='initialPosition' value='6 6 10'/> |
| 410 | <fieldValue name='initialOrientation' value='0 1 0 0'/> |
| 411 | <fieldValue name='moves'> |
| 412 |
<!-- ROUTE information for MoveAimPoint3a node:
[from BoxPath.value_changed to goalAimPoint
]
-->
<ProtoInstance name='CameraMovement' DEF='MoveAimPoint3a'> |
| 413 | <fieldValue name='description' value='AimPoint 3a moving BoxPath'/> |
| 414 | <fieldValue name='tracking' value='true'/> |
| 415 | <fieldValue name='duration' value='8'/> |
| 416 | <fieldValue name='goalPosition' value='6 6 10'/> |
| 417 | <!-- goalAimPoint modified by ROUTE to match moving Box --> |
| 418 | </ProtoInstance> |
| 419 |
<!-- ROUTE information for MoveAimPoint3b node:
[from BoxPath.value_changed to goalAimPoint
]
-->
<ProtoInstance name='CameraMovement' DEF='MoveAimPoint3b'> |
| 420 | <fieldValue name='description' value='AimPoint 3b pan right while tracking'/> |
| 421 | <fieldValue name='tracking' value='true'/> |
| 422 | <fieldValue name='duration' value='8'/> |
| 423 | <fieldValue name='goalPosition' value='40 6 12'/> |
| 424 | <!-- goalAimPoint modified by ROUTE to match moving Box --> |
| 425 | </ProtoInstance> |
| 426 |
<!-- ROUTE information for MoveAimPoint3c node:
[from BoxPath.value_changed to goalAimPoint
]
-->
<ProtoInstance name='CameraMovement' DEF='MoveAimPoint3c'> |
| 427 | <fieldValue name='description' value='AimPoint 3c boom up while tracking'/> |
| 428 | <fieldValue name='tracking' value='true'/> |
| 429 | <fieldValue name='duration' value='3'/> |
| 430 | <fieldValue name='goalPosition' value='40 20 13'/> |
| 431 | <!-- goalAimPoint modified by ROUTE to match moving Box --> |
| 432 | </ProtoInstance> |
| 433 | <ProtoInstance name='CameraMovement' DEF='MoveAimPoint3d'> |
| 434 | <fieldValue name='description' value='AimPoint 3d restore camera back to home'/> |
| 435 | <fieldValue name='tracking' value='true'/> |
| 436 | <fieldValue name='duration' value='5'/> |
| 437 | <fieldValue name='goalPosition' value='4 4 10'/> |
| 438 | <fieldValue name='goalAimPoint' value='4 4 0'/> |
| 439 | <fieldValue name='goalOrientation' value='0 1 0 0'/> |
| 440 | <!-- can test tracking or not using these values --> |
| 441 | </ProtoInstance> |
| 442 | </fieldValue> |
| 443 | </ProtoInstance> |
| 444 | </fieldValue> |
| 445 | </ProtoInstance> |
| 446 | <Group DEF='AnimationGroup_AimPointTest'> |
| 447 |
<!-- ROUTE information for CameraTimer_AimPointTest node:
[from Camera_AimPointTest.totalDuration to cycleInterval
]
[from TextTouch_AimPointTest.touchTime to startTime
]
[from fraction_changed to Camera_AimPointTest.set_fraction
]
-->
<TimeSensor DEF='CameraTimer_AimPointTest'/> |
| 448 | <!-- initialize clock to match totalDuration of combined Shot Moves --> |
| 449 | < ROUTE fromNode='Camera_AimPointTest' fromField='totalDuration' toNode='CameraTimer_AimPointTest' toField='cycleInterval'/> |
| 450 | <!-- TimeSensor animates the CameraClock since that maintains the computed PositionInterpolator and OrientationInterpolator --> |
| 451 | < ROUTE fromNode='CameraTimer_AimPointTest' fromField='fraction_changed' toNode='Camera_AimPointTest' toField='set_fraction'/> |
| 452 | <Transform DEF='Trigger_AimPointTest' translation='4 4 0'> |
| 453 |
<!-- ROUTE information for TextTouchActive_AimPointFilter node:
[from TextTouch_AimPointTest.isActive to set_boolean
]
[from inputTrue to Camera_AimPointTest.set_bind
]
-->
<BooleanFilter DEF='TextTouchActive_AimPointFilter'/> |
| 454 |
<!-- ROUTE information for TextTouch_AimPointTest node:
[from isActive to TextTouchActive_AimPointFilter.set_boolean
]
[from touchTime to CameraTimer_AimPointTest.startTime
]
-->
<TouchSensor DEF='TextTouch_AimPointTest' description='touch to animate Camera AimPointTest'/> |
| 455 | < ROUTE fromNode='TextTouchActive_AimPointFilter' fromField='inputTrue' toNode='Camera_AimPointTest' toField='set_bind'/> |
| 456 | < ROUTE fromNode='TextTouch_AimPointTest' fromField='isActive' toNode='TextTouchActive_AimPointFilter' toField='set_boolean'/> |
| 457 | < ROUTE fromNode='TextTouch_AimPointTest' fromField='touchTime' toNode='CameraTimer_AimPointTest' toField='startTime'/> |
| 458 | <Shape> |
| 459 | <Text string='"Click to animate" "AimPointTest"'> |
| 460 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 461 | </Text> |
| 462 | <Appearance> |
| 463 | <Material USE='ArtDeco5'/> |
| 464 | </Appearance> |
| 465 | </Shape> |
| 466 | <Shape USE='TransparentBox'/> |
| 467 | <TouchSensor description='Click to animate AimPointTest'/> |
| 468 | </Transform> |
| 469 | </Group> |
| 470 | <!-- TODO build a test once implemented --> |
| 471 | <ProtoInstance name='OfflineRender'/> |
| 472 | <!-- =============== animate a camera shape to visualize view changes ============== --> |
| 473 |
<!-- ROUTE information for CameraShapeTransform node:
[from Camera_SimpleShotsTest.position to translation
]
[from Camera_SimpleShotsTest.orientation to rotation
]
[from Camera_AimPointTest.position to translation
]
[from Camera_AimPointTest.orientation to rotation
]
-->
<Transform DEF='CameraShapeTransform' translation='0 0.5 0'> |
| 474 | <!-- move CameraShape using active Camera --> |
| 475 | < ROUTE fromNode='Camera_SimpleShotsTest' fromField='position' toNode='CameraShapeTransform' toField='translation'/> |
| 476 | < ROUTE fromNode='Camera_SimpleShotsTest' fromField='orientation' toNode='CameraShapeTransform' toField='rotation'/> |
| 477 | < ROUTE fromNode='Camera_AimPointTest' fromField='position' toNode='CameraShapeTransform' toField='translation'/> |
| 478 | < ROUTE fromNode='Camera_AimPointTest' fromField='orientation' toNode='CameraShapeTransform' toField='rotation'/> |
| 479 | <Transform DEF='CameraOffsetTransform' translation='0 0 0.25'> |
| 480 |
<!-- ROUTE information for CameraShapeTouched node:
[from isActive to ViewFrustumToggle.set_boolean
]
-->
<TouchSensor DEF='CameraShapeTouched'/> |
| 481 | <Inline DEF='CameraShape' url=' "CameraShape.x3d" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraShape.x3d" '/> |
| 482 | <Shape DEF='SightLine'> |
| 483 | <IndexedLineSet coordIndex='0 1'> |
| 484 | <Coordinate point='0 0 0 0 0 -100'/> |
| 485 | </IndexedLineSet> |
| 486 | <Appearance> |
| 487 | <Material emissiveColor='0.8 0.8 0.4'/> |
| 488 | </Appearance> |
| 489 | </Shape> |
| 490 | </Transform> |
| 491 | <!-- Display frustum to show camera view within the scene, toggled by user selecting CameraShape --> |
| 492 | <ExternProtoDeclare name='ViewFrustum' appinfo='Display view frustum associated with a given pair of Viewpoint NavigationInfo nodes' url=' "../../X3dForWebAuthors/Chapter14Prototypes/ViewFrustumPrototype.x3d#ViewFrustum" "https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter14Prototypes/ViewFrustumPrototype.x3d#ViewFrustum" "../../X3dForWebAuthors/Chapter14Prototypes/ViewFrustumPrototype.wrl#ViewFrustum" "https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter14Prototypes/ViewFrustumPrototype.wrl#ViewFrustum" '> |
| 493 |
<field name='ViewpointNode' type='SFNode' accessType='initializeOnly'
appinfo='required: insert Viewpoint DEF or USE node for view of interest'/> |
| 494 |
<field name='NavigationInfoNode' type='SFNode' accessType='initializeOnly'
appinfo='required: insert NavigationInfo DEF or USE node of interest'/> |
| 495 |
<field name='visible' type='SFBool' accessType='inputOutput'
appinfo='whether or not frustum geometry is rendered'/> |
| 496 |
<field name='lineColor' type='SFColor' accessType='inputOutput'
appinfo='RGB color of ViewFrustum outline, default value 0.9 0.9 0.9'/> |
| 497 |
<field name='frustumColor' type='SFColor' accessType='inputOutput'
appinfo='RGB color of ViewFrustum hull geometry, default value 0.8 0.8 0.8'/> |
| 498 |
<field name='transparency' type='SFFloat' accessType='inputOutput'
appinfo='transparency of ViewFrustum hull geometry, default value 0.5'/> |
| 499 |
<field name='aspectRatio' type='SFFloat' accessType='inputOutput'
appinfo='assumed ratio height/width, default value 0.75'/> |
| 500 |
<field name='trace' type='SFBool' accessType='initializeOnly'
appinfo='debug support, default false'/> |
| 501 | </ExternProtoDeclare> |
| 502 |
<!-- ROUTE information for ViewFrustumNode node:
[from ViewFrustumToggle.toggle to visible
]
-->
<ProtoInstance name='ViewFrustum' DEF='ViewFrustumNode'> |
| 503 | <fieldValue name='ViewpointNode'> |
| 504 | <Viewpoint DEF='FrustumViewpoint' description='viewpoint for ViewFrustum' position='0 0 0'/> |
| 505 | </fieldValue> |
| 506 | <fieldValue name='NavigationInfoNode'> |
| 507 | <NavigationInfo DEF='TestNavigationInfo' transitionType='"ANIMATE"' visibilityLimit='100'/> |
| 508 | </fieldValue> |
| 509 | <fieldValue name='visible' value='false'/> |
| 510 | <fieldValue name='lineColor' value='0.9 0.9 0.9'/> |
| 511 | <fieldValue name='frustumColor' value='0.8 0.8 0.8'/> |
| 512 | <fieldValue name='transparency' value='0.95'/> |
| 513 | </ProtoInstance> |
| 514 |
<!-- ROUTE information for ViewFrustumToggle node:
[from CameraShapeTouched.isActive to set_boolean
]
[from toggle to ViewFrustumNode.visible
]
-->
<BooleanToggle DEF='ViewFrustumToggle' containerField='children'/> |
| 515 | < ROUTE fromNode='CameraShapeTouched' fromField='isActive' toNode='ViewFrustumToggle' toField='set_boolean'/> |
| 516 | < ROUTE fromNode='ViewFrustumToggle' fromField='toggle' toNode='ViewFrustumNode' toField='visible'/> |
| 517 | </Transform> |
| 518 | <!-- =============== add checkerboard, axes and other things to look at while animating ============== --> |
| 519 | <Background skyColor='0.282353 0.380392 0.470588'/> |
| 520 | <Transform rotation='1 0 0 -1.57079' scale='10 10 10'> |
| 521 | <Shape> |
| 522 | <Appearance> |
| 523 | <Material ambientIntensity='0.01' diffuseColor='1.0 1.0 1.0' shininess='0.05'/> |
| 524 | </Appearance> |
| 525 | <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'> |
| 526 | <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'/> |
| 527 | <Color color='0.435294 0.741176 0 0 0.560784 0.580392'/> |
| 528 | </IndexedFaceSet> |
| 529 | </Shape> |
| 530 | </Transform> |
| 531 | <Transform scale='3 3 3' translation='0 0.25 0'> |
| 532 | <Inline DEF='CoordinateAxes' url=' "../../X3dForWebAuthors/Chapter03Grouping/CoordinateAxes.x3d" "../../Savage/Tools/Authoring/CoordinateAxes.x3d" "https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/CoordinateAxes.x3d" "https://savage.nps.edu/Savage/Tools/Authoring/CoordinateAxes.x3d" "../../X3dForWebAuthors/Chapter03Grouping/CoordinateAxes.wrl" "../../Savage/Tools/Authoring/CoordinateAxes.wrl" "https://www.web3d.org/x3d/content/examples/X3dForWebAuthors/Chapter03Grouping/CoordinateAxes.wrl" "https://savage.nps.edu/Savage/Tools/Authoring/CoordinateAxes.wrl" '/> |
| 533 | </Transform> |
| 534 |
<!-- ROUTE information for MovingBoxTransform node:
[from BoxPath.value_changed to translation
]
-->
<Transform DEF='MovingBoxTransform'> |
| 535 |
<!-- ROUTE information for BoxPath node:
[from BoxTimer.fraction_changed to set_fraction
]
[from value_changed to MovingBoxTransform.translation
]
[from value_changed to MoveAimPoint3a.goalAimPoint
]
[from value_changed to MoveAimPoint3b.goalAimPoint
]
[from value_changed to MoveAimPoint3c.goalAimPoint
]
-->
<PositionInterpolator DEF='BoxPath' key='0 0.25 0.5 0.75 1' keyValue='-5 1 5 45 1 5 45 1 -45 -5 1 -45 -5 1 5'/> |
| 536 |
<!-- ROUTE information for BoxTimer node:
[from fraction_changed to BoxPath.set_fraction
]
-->
<TimeSensor DEF='BoxTimer' cycleInterval='10' loop='true'/> |
| 537 | < ROUTE fromNode='BoxPath' fromField='value_changed' toNode='MovingBoxTransform' toField='translation'/> |
| 538 | < ROUTE fromNode='BoxPath' fromField='value_changed' toNode='MoveAimPoint3a' toField='goalAimPoint'/> |
| 539 | < ROUTE fromNode='BoxPath' fromField='value_changed' toNode='MoveAimPoint3b' toField='goalAimPoint'/> |
| 540 | < ROUTE fromNode='BoxPath' fromField='value_changed' toNode='MoveAimPoint3c' toField='goalAimPoint'/> |
| 541 | < ROUTE fromNode='BoxTimer' fromField='fraction_changed' toNode='BoxPath' toField='set_fraction'/> |
| 542 | <Shape> |
| 543 | <Box/> |
| 544 | <Appearance> |
| 545 | <Material/> |
| 546 |
<ImageTexture
url=' "../earth-topo.png
" "https://www.web3d.org/x3d/content/examples/Basic/earth-topo.png
" '/>
|
| 547 | </Appearance> |
| 548 | </Shape> |
| 549 | </Transform> |
| 550 | <!-- ================ CrossHair visualization for center of screen ================ --> |
| 551 | <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" '> |
| 552 |
<field name='enabled' type='SFBool' accessType='initializeOnly'
appinfo='whether CrissHair orititype is enabled or not'/> |
| 553 |
<field name='set_enabled' type='SFBool' accessType='inputOnly'
appinfo='control whether enabled/disabled'/> |
| 554 |
<field name='markerColor' type='SFColor' accessType='inputOutput'
appinfo='color of CrossHair marker'/> |
| 555 |
<field name='scale' type='SFVec3f' accessType='inputOutput'
appinfo='size of CrossHair in meters'/> |
| 556 |
<field name='positionOffsetFromCamera' type='SFVec3f' accessType='inputOutput'
appinfo='distance in front of HUD viewpoint'/> |
| 557 | </ExternProtoDeclare> |
| 558 |
<!-- ROUTE information for CrossHairInstance node:
[from Camera_SimpleShotsTest.isBound to set_enabled
]
[from Camera_AimPointTest.isBound to set_enabled
]
-->
<ProtoInstance name='CrossHair' DEF='CrossHairInstance'> |
| 559 | <fieldValue name='enabled' value='true'/> |
| 560 | <fieldValue name='markerColor' value='1 0.5 0'/> |
| 561 | <fieldValue name='scale' value='1 1 1'/> |
| 562 | <fieldValue name='positionOffsetFromCamera' value='0 0 -6'/> |
| 563 | </ProtoInstance> |
| 564 | <!-- turn on CrossHairInstance when animated camera viewpoints are bound --> |
| 565 | < ROUTE fromNode='Camera_SimpleShotsTest' fromField='isBound' toNode='CrossHairInstance' toField='set_enabled'/> |
| 566 | < ROUTE fromNode='Camera_AimPointTest' fromField='isBound' toNode='CrossHairInstance' toField='set_enabled'/> |
| 567 | <!-- 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'/> --> |
| 568 | <!-- =============== TODO Launch Prototype Example ============== --> |
| 569 | <Anchor description='launch CameraExample scene' parameter='"target=_blank"' url=' "CameraExample.x3d" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraExample.x3d" "CameraExample.wrl" "https://www.web3d.org/x3d/content/examples/Basic/development/CameraExample.wrl" '> |
| 570 | <Transform translation='0 -3 0'> |
| 571 | <Shape> |
| 572 | <Text string='"CameraPrototype" "defines a prototype" "" "Click on this text to see" "CameraExample scene"'> |
| 573 | <FontStyle justify='"MIDDLE" "MIDDLE"' size='0.5'/> |
| 574 | </Text> |
| 575 | <Appearance> |
| 576 | <Material diffuseColor='1 1 0.2'/> |
| 577 | </Appearance> |
| 578 | </Shape> |
| 579 | </Transform> |
| 580 | </Anchor> |
| 581 | </Scene> |
| 582 | </X3D> |
Event Graph ROUTE Table entries with 23 ROUTE connections total, showing X3D event-model relationships for this scene.
Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.
| line 302
TouchSensor |
description='Click to animate SimpleShotsTest' User-interaction hint for this node.(TouchSensor description is providing a tooltip) |
| line 467
TouchSensor |
description='Click to animate AimPointTest' User-interaction hint for this node.(TouchSensor description is providing a tooltip) |
|
CameraShapeTouched
TouchSensor isActive SFBool |
ViewFrustumToggle
BooleanToggle set_boolean SFBool |
then
|
ViewFrustumToggle
BooleanToggle toggle SFBool |
ViewFrustumNode
ProtoInstance visible SFBool |
|
BoxTimer
TimeSensor fraction_changed SFFloat |
BoxPath
PositionInterpolator set_fraction SFFloat |
then
|
BoxPath
PositionInterpolator value_changed SFVec3f |
MovingBoxTransform
Transform translation SFVec3f |
||
|
then
|
BoxPath
PositionInterpolator value_changed SFVec3f |
MoveAimPoint3a
ProtoInstance goalAimPoint SFVec3f |
||||
|
then
|
BoxPath
PositionInterpolator value_changed SFVec3f |
MoveAimPoint3b
ProtoInstance goalAimPoint SFVec3f |
||||
|
then
|
BoxPath
PositionInterpolator value_changed SFVec3f |
MoveAimPoint3c
ProtoInstance goalAimPoint SFVec3f |
||||
| line 119
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 125
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 131
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 150
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 156
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 181
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 187
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 226
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 244
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 250
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 471
ProtoInstance OfflineRender |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
BoomDown
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
BoomPause
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
CameraBoom
ProtoInstance CameraShot |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
CameraBoomUp
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
CameraTilt
ProtoInstance CameraShot |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
CrossHairInstance
ProtoInstance CrossHair |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
Dolly
ProtoInstance CameraShot |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
DollyMove1
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
MoveAimPoint3a
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
MoveAimPoint3b
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
MoveAimPoint3c
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
MoveAimPoint3d
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
Pan
ProtoInstance CameraShot |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
PanLeft
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
PanRight
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
Shot5
ProtoInstance CameraShot |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
TiltDown
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
TiltPause
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
TiltReset
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
TiltUp
ProtoInstance CameraMovement |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
ViewFrustumNode
ProtoInstance ViewFrustum |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
|
Zoom
ProtoInstance CameraShot |
No direct ROUTE connection found for events to/from this node. This ProtoInstance contains SFNode/MFNode fieldValue declarations with direct access to other nodes, and thus has potential to produce run-time animation. |
| line 569
Anchor |
description='launch CameraExample scene' User-interaction hint for this node. |
<!--
Color-coding legend: X3D terminology
<X3dNode
DEF='idName' field='value'/>
matches XML terminology
<XmlElement
DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement)
(Grey background inside box: inserted documentation)
(Magenta background: X3D Extensibility)
<ProtoInstance name='ProtoName'>
<field
name='fieldName'/> </ProtoInstance>
-->
<!--
For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints.
-->