| 1 |
<?xml version="1.0" encoding="UTF-8"?>
|
| 2 |
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.0//EN" "https://www.web3d.org/specifications/x3d-3.0.dtd">
|
| 3 | <X3D profile='Immersive' version='3.0' xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation='https://www.web3d.org/specifications/x3d-3.0.xsd'> |
| 4 | <head> |
| 5 | <meta name='title' content=' ExplodingBuildingPrototype.x3d '/> |
| 6 | <meta name='description' content='A simple prototype for exploding structure components, experimenting with the "Hello World" of explosions. This prototype demonstrates a simplified and scalable approach for modeling explosions. Each chunk of geometry inside an Exploder prototype is given initial/final position/orientation. Intermediate heights for each polygon are at the same height as the distance traveled over ground.'/> |
| 7 | <meta name='creator' content='Don Brutzman'/> |
| 8 | <meta name='created' content='1 January 2001'/> |
| 9 | <meta name='modified' content='28 November 2019'/> |
| 10 | <meta name='reference' content='Exploding building schematic layout diagram:'/> |
| 11 | <meta name='Image' content=' ExplodingBuildingLayout.pdf '/> |
| 12 | <meta name='Image' content=' ExplodingBuildingSnapshots.pdf '/> |
| 13 |
<meta name='Image' content='ExplodingBuildingMontage.png' />
|
| 14 | <meta name='MovingImage' content='ExplodingBuildingExampleVideo.mov'/> |
| 15 | <meta name='reference' content='ExplodingBuildingLargeExample.wrl'/> |
| 16 | <meta name='reference' content='Rotation calculations performed using the Dizzy utility from Vapour Technologies by James Smith.'/> |
| 17 | <meta name='reference' content='http://www.vapourtech.com'/> |
| 18 | <meta name='reference' content='DIS-Java-VRML Working Group'/> |
| 19 | <meta name='reference' content='https://www.web3d.org/WorkingGroups/vrtp/dis-java-vrml'/> |
| 20 | <meta name='identifier' content=' https://www.web3d.org/x3d/content/examples/Savage/Tools/Explosions/ExplodingBuildingPrototype.x3d '/> |
| 21 | <meta name='generator' content='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit'/> |
| 22 | <meta name='license' content='../../license.html'/> |
| 23 | </head> |
| 24 | <Scene> |
| 25 | <WorldInfo title='ExplodingBuildingPrototype.x3d'/> |
| 26 | <ProtoDeclare name='Exploder' appinfo='Explode contained geometry through animation on demand'> |
| 27 | <ProtoInterface> |
| 28 |
<field name='geometry' type='SFNode' accessType='initializeOnly'
appinfo='geometry node, to be used inside a Shape'> |
| 29 | <!-- initialization node (if any) goes here --> |
| 30 | </field> |
| 31 |
<field name='material' type='SFNode' accessType='initializeOnly'
appinfo='Material node for this geometry, to be used inside a Shape'> |
| 32 | <!-- initialization node (if any) goes here --> |
| 33 | </field> |
| 34 |
<field name='initialPosition' type='SFVec3f' value='0 0 0' accessType='initializeOnly'
appinfo='starting point'/> |
| 35 |
<field name='finalPosition' type='SFVec3f' value='0 0 0' accessType='initializeOnly'
appinfo='finish point'/> |
| 36 |
<field name='initialOrientation' type='SFRotation' value='0 1 0 0' accessType='initializeOnly'
appinfo='starting point orientation'/> |
| 37 |
<field name='finalOrientation' type='SFRotation' value='0 1 0 0' accessType='initializeOnly'
appinfo='finish point orientation'/> |
| 38 |
<field name='set_fraction' type='SFFloat' accessType='inputOnly'
appinfo='animation input'/> |
| 39 | </ProtoInterface> |
| 40 | <ProtoBody> |
| 41 |
<!-- ROUTE information for LocationTransform node:
[from ProtoPositionInterpolator.value_changed to translation
]
-->
<Transform DEF='LocationTransform'> |
| 42 | <IS> |
| 43 | <connect nodeField='translation' protoField='initialPosition'/> |
| 44 | </IS> |
| 45 |
<!-- ROUTE information for RotationTransform node:
[from ProtoOrientationInterpolator.value_changed to rotation
]
-->
<Transform DEF='RotationTransform'> |
| 46 | <IS> |
| 47 | <connect nodeField='rotation' protoField='initialOrientation'/> |
| 48 | </IS> |
| 49 | <Shape DEF='AnimatedShape'> |
| 50 | <IS> |
| 51 | <connect nodeField='geometry' protoField='geometry'/> |
| 52 | </IS> |
| 53 | <Appearance DEF='AnimatedShapeAppearance'> |
| 54 | <IS> |
| 55 | <connect nodeField='material' protoField='material'/> |
| 56 | </IS> |
| 57 | </Appearance> |
| 58 | </Shape> |
| 59 | </Transform> |
| 60 | </Transform> |
| 61 | <!-- only initial node in ProtoBody is rendered --> |
| 62 |
<!-- ROUTE information for ProtoAnimationScript node:
[from position_changeds to ProtoPositionInterpolator.keyValue
]
[from rotationValues to ProtoOrientationInterpolator.keyValue
]
-->
<Script DEF='ProtoAnimationScript'> |
| 63 | <field name='initialPosition' type='SFVec3f' accessType='initializeOnly'/> |
| 64 | <field name='finalPosition' type='SFVec3f' accessType='initializeOnly'/> |
| 65 | <field name='initialOrientation' type='SFRotation' accessType='initializeOnly'/> |
| 66 | <field name='finalOrientation' type='SFRotation' accessType='initializeOnly'/> |
| 67 | <field name='position_changeds' type='MFVec3f' accessType='outputOnly'/> |
| 68 | <field name='rotationValues' type='MFRotation' accessType='outputOnly'/> |
| 69 | <IS> |
| 70 | <connect nodeField='initialPosition' protoField='initialPosition'/> |
| 71 | <connect nodeField='finalPosition' protoField='finalPosition'/> |
| 72 | <connect nodeField='initialOrientation' protoField='initialOrientation'/> |
| 73 | <connect nodeField='finalOrientation' protoField='finalOrientation'/> |
| 74 | </IS> |
<![CDATA[
ecmascript:
function initialize ()
{
dx = finalPosition.x - initialPosition.x;
dy = finalPosition.y - initialPosition.y;
dz = finalPosition.z - initialPosition.z;
// Browser.println ('dx=' + dx + ', dy=' + dy + ', dz=' + dz);
distance = Math.sqrt (dx*dx + dy*dy + dz*dz);
// Browser.println ('distance =' + distance);
quarterPoint = initialPosition.add (new SFVec3f ( dx/4, dy/4 + 0.707*distance, dz/4));
halfwaypoint = initialPosition.add (new SFVec3f ( dx/2, dy/2 + distance, dz/2));
three4thsPoint = initialPosition.add (new SFVec3f (3*dx/4, 3*dy/4 + 0.707*distance/2, 3*dz/4));
position_changeds = new MFVec3f (initialPosition, initialPosition, quarterPoint, halfwaypoint, three4thsPoint, finalPosition);
// Browser.println ('position_changeds =' + position_changeds);
rotationValues = new MFRotation (initialOrientation, finalOrientation);
// Browser.println ('initialPosition =' + initialPosition);
// Browser.println ('finalPosition =' + finalPosition);
// Browser.println ('position_changeds =' + position_changeds);
// Browser.println ('initialOrientation=' + initialOrientation);
// Browser.println ('finalOrientation =' + finalOrientation);
// Browser.println ('rotationValues=' + rotationValues);
}
]]>
|
|
| 76 | </Script> |
| 77 | <!-- keyValue arrays for following interpolators get recalculated and reset by ProtoAnimationScript --> |
| 78 |
<!-- ROUTE information for ProtoPositionInterpolator node:
[from ProtoAnimationScript.position_changeds to keyValue
]
[from value_changed to LocationTransform.translation
]
-->
<PositionInterpolator DEF='ProtoPositionInterpolator' key='0 0.2 0.4 0.6 0.8 1' keyValue='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0'> |
| 79 | <IS> |
| 80 | <connect nodeField='set_fraction' protoField='set_fraction'/> |
| 81 | </IS> |
| 82 | </PositionInterpolator> |
| 83 |
<!-- ROUTE information for ProtoOrientationInterpolator node:
[from ProtoAnimationScript.rotationValues to keyValue
]
[from value_changed to RotationTransform.rotation
]
-->
<OrientationInterpolator DEF='ProtoOrientationInterpolator' key='0 1' keyValue='0 1 0 0 0 1 0 0'> |
| 84 | <IS> |
| 85 | <connect nodeField='set_fraction' protoField='set_fraction'/> |
| 86 | </IS> |
| 87 | </OrientationInterpolator> |
| 88 | < ROUTE fromNode='ProtoPositionInterpolator' fromField='value_changed' toNode='LocationTransform' toField='translation'/> |
| 89 | < ROUTE fromNode='ProtoOrientationInterpolator' fromField='value_changed' toNode='RotationTransform' toField='rotation'/> |
| 90 | < ROUTE fromNode='ProtoAnimationScript' fromField='position_changeds' toNode='ProtoPositionInterpolator' toField='keyValue'/> |
| 91 | < ROUTE fromNode='ProtoAnimationScript' fromField='rotationValues' toNode='ProtoOrientationInterpolator' toField='keyValue'/> |
| 92 | </ProtoBody> |
| 93 | </ProtoDeclare> |
| 94 | <!-- ============================ --> |
| 95 | <Viewpoint description='ExplodingBuilding Prototype' position='0 0 12'/> |
| 96 | <Background groundAngle='1.57' groundColor='0.6 0.9 0.6 0.6 0.9 0.6' skyColor='0.6 0.6 0.9'/> |
| 97 | <Anchor description='ExplodingBuilding Example' parameter='"target=_blank"' url=' "ExplodingBuildingExample.x3d" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Explosions/ExplodingBuildingExample.x3d" "ExplodingBuildingExample.wrl" "https://www.web3d.org/x3d/content/examples/Savage/Tools/Explosions/ExplodingBuildingExample.wrl" '> |
| 98 | <Shape> |
| 99 | <Text string='"ExplodingBuildingPrototype" "is a prototype definition file" "" "Click this text to see" "ExplodingBuildingExample"'> |
| 100 | <FontStyle justify='"MIDDLE" "MIDDLE"'/> |
| 101 | </Text> |
| 102 | <Appearance> |
| 103 | <Material diffuseColor='0.2 0.2 0.8'/> |
| 104 | </Appearance> |
| 105 | </Shape> |
| 106 | </Anchor> |
| 107 | </Scene> |
| 108 | </X3D> |
Event Graph ROUTE Table entries with 4 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.
|
ProtoAnimationScript
Script position_changeds MFVec3f |
ProtoPositionInterpolator
PositionInterpolator keyValue MFVec3f |
then
|
ProtoPositionInterpolator
PositionInterpolator value_changed SFVec3f |
LocationTransform
Transform translation SFVec3f |
||
|
ProtoAnimationScript
Script rotationValues MFRotation |
ProtoOrientationInterpolator
OrientationInterpolator keyValue MFRotation |
then
|
ProtoOrientationInterpolator
OrientationInterpolator value_changed SFRotation |
RotationTransform
Transform rotation SFRotation |
| line 97
Anchor |
description='ExplodingBuilding Example' 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)
<ProtoDeclare name='ProtoName'>
<field
name='fieldName'/> </ProtoDeclare>
-->
<!--
For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints.
-->