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='29 January 2024'/> |
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://savage.nps.edu/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![]() ![]() |
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![]() ![]() |
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![]() ![]() |
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![]() ![]() |
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![]() ![]() |
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 MoveAimPoint3.1 node:
[from BoxPath.value_changed to goalAimPoint
]
-->
<ProtoInstance name='CameraMovement' DEF='MoveAimPoint3.1'> |
413 | <fieldValue name='description' value='AimPoint 3.1 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 MoveAimPoint3.2 node:
[from BoxPath.value_changed to goalAimPoint
]
-->
<ProtoInstance name='CameraMovement' DEF='MoveAimPoint3.2'> |
420 | <fieldValue name='description' value='AimPoint 3.2 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 MoveAimPoint3.3 node:
[from BoxPath.value_changed to goalAimPoint
]
-->
<ProtoInstance name='CameraMovement' DEF='MoveAimPoint3.3'> |
427 | <fieldValue name='description' value='AimPoint 3.3 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='MoveAimPoint3.4'> |
434 | <fieldValue name='description' value='AimPoint 3.4 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 MoveAimPoint3.1.goalAimPoint
]
[from value_changed to MoveAimPoint3.2.goalAimPoint
]
[from value_changed to MoveAimPoint3.3.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='MoveAimPoint3.1' toField='goalAimPoint'/> |
539 | < ROUTE fromNode='BoxPath' fromField='value_changed' toNode='MoveAimPoint3.2' toField='goalAimPoint'/> |
540 | < ROUTE fromNode='BoxPath' fromField='value_changed' toNode='MoveAimPoint3.3' 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![]() ![]() |
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.
TouchSensor |
description='Click to animate SimpleShotsTest' User-interaction hint for this node.(TouchSensor description is providing a tooltip) |
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 |
MoveAimPoint3.1
ProtoInstance goalAimPoint SFVec3f |
||||
then
|
BoxPath
PositionInterpolator value_changed SFVec3f |
MoveAimPoint3.2
ProtoInstance goalAimPoint SFVec3f |
||||
then
|
BoxPath
PositionInterpolator value_changed SFVec3f |
MoveAimPoint3.3
ProtoInstance goalAimPoint SFVec3f |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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. |
ProtoInstance OfflineRender |
No ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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. |
MoveAimPoint3.4
ProtoInstance CameraMovement |
No ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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 ROUTE connection found for output events 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. |
Anchor |
description='launch CameraExample scene' User-interaction hint for this node. |
<!--
Color 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.
-->