X3D Model Documentation: ExplodingBuildingPrototype.x3d

  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='titlecontent=' ExplodingBuildingPrototype.x3d '/>
  6            <meta name='descriptioncontent='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='creatorcontent='Don Brutzman'/>
  8            <meta name='createdcontent='1 January 2001'/>
  9            <meta name='modifiedcontent='28 November 2019'/>
 10            <meta name='referencecontent='Exploding building schematic layout diagram:'/>
 11            <meta name='Imagecontent=' ExplodingBuildingLayout.pdf '/>
 12            <meta name='Imagecontent=' ExplodingBuildingSnapshots.pdf '/>
 13            <meta name='Imagecontent='ExplodingBuildingMontage.png'/>
 14            <meta name='MovingImagecontent='ExplodingBuildingExampleVideo.mov'/>
 15            <meta name='referencecontent='ExplodingBuildingLargeExample.wrl'/>
 16            <meta name='referencecontent='Rotation calculations performed using the Dizzy utility from Vapour Technologies by James Smith.'/>
 17            <meta name='referencecontent='http://www.vapourtech.com'/>
 18            <meta name='referencecontent='DIS-Java-VRML Working Group'/>
 19            <meta name='referencecontent='https://www.web3d.org/WorkingGroups/vrtp/dis-java-vrml'/>
 20            <meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Savage/Tools/Explosions/ExplodingBuildingPrototype.x3d '/>
 21            <meta name='generatorcontent='X3D-Edit 3.2, https://www.web3d.org/x3d/tools/X3D-Edit'/>
 22            <meta name='licensecontent='../../license.html'/>
 23       </head>
<!--

<!--
Event Graph ROUTE Table shows event connections.
-->
<!-- to top DEF nodes index: AnimatedShape, AnimatedShapeAppearance, LocationTransform, ProtoAnimationScript, ProtoOrientationInterpolator, ProtoPositionInterpolator, RotationTransform

Index for Viewpoint node: Viewpoint_1

Index for ProtoDeclare definition: Exploder
-->
 24       <Scene>
 25            <WorldInfo title='ExplodingBuildingPrototype.x3d'/>
 26            <ProtoDeclare name='Exploderappinfo='Explode contained geometry through animation on demand'>
 27                 <ProtoInterface>
 28                      <field name='geometrytype='SFNodeaccessType='initializeOnly'
                     appinfo='geometry node, to be used inside a Shape'>
 29                           <!-- initialization node (if any) goes here -->
 30                      </field>
 31                      <field name='materialtype='SFNodeaccessType='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='initialPositiontype='SFVec3fvalue='0 0 0accessType='initializeOnly'
                     appinfo='starting point'/>
 35                      <field name='finalPositiontype='SFVec3fvalue='0 0 0accessType='initializeOnly'
                     appinfo='finish point'/>
 36                      <field name='initialOrientationtype='SFRotationvalue='0 1 0 0accessType='initializeOnly'
                     appinfo='starting point orientation'/>
 37                      <field name='finalOrientationtype='SFRotationvalue='0 1 0 0accessType='initializeOnly'
                     appinfo='finish point orientation'/>
 38                      <field name='set_fractiontype='SFFloataccessType='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='translationprotoField='initialPosition'/>
 44                           </IS>
 45 
                         <!-- ROUTE information for RotationTransform node:  [from ProtoOrientationInterpolator.value_changed to rotation ] -->
                         <Transform DEF='RotationTransform'>
 46                                <IS>
 47                                     <connect nodeField='rotationprotoField='initialOrientation'/>
 48                                </IS>
 49                                <Shape DEF='AnimatedShape'>
 50                                     <IS>
 51                                          <connect nodeField='geometryprotoField='geometry'/>
 52                                     </IS>
 53                                     <Appearance DEF='AnimatedShapeAppearance'>
 54                                          <IS>
 55                                               <connect nodeField='materialprotoField='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='initialPositiontype='SFVec3faccessType='initializeOnly'/>
 64                           <field name='finalPositiontype='SFVec3faccessType='initializeOnly'/>
 65                           <field name='initialOrientationtype='SFRotationaccessType='initializeOnly'/>
 66                           <field name='finalOrientationtype='SFRotationaccessType='initializeOnly'/>
 67                           <field name='position_changedstype='MFVec3faccessType='outputOnly'/>
 68                           <field name='rotationValuestype='MFRotationaccessType='outputOnly'/>
 69                           <IS>
 70                                <connect nodeField='initialPositionprotoField='initialPosition'/>
 71                                <connect nodeField='finalPositionprotoField='finalPosition'/>
 72                                <connect nodeField='initialOrientationprotoField='initialOrientation'/>
 73                                <connect nodeField='finalOrientationprotoField='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='ProtoPositionInterpolatorkey='0 0.2 0.4 0.6 0.8 1keyValue='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0'>
 79                           <IS>
 80                                <connect nodeField='set_fractionprotoField='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='ProtoOrientationInterpolatorkey='0 1keyValue='0 1 0 0 0 1 0 0'>
 84                           <IS>
 85                                <connect nodeField='set_fractionprotoField='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 Prototypeposition='0 0 12'/>
 96            <Background groundAngle='1.57groundColor='0.6 0.9 0.6 0.6 0.9 0.6skyColor='0.6 0.6 0.9'/>
 97            <Anchor description='ExplodingBuilding Exampleparameter='"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 shows event connections.
-->
<!-- to top DEF nodes index: AnimatedShape, AnimatedShapeAppearance, LocationTransform, ProtoAnimationScript, ProtoOrientationInterpolator, ProtoPositionInterpolator, RotationTransform

Index for Viewpoint node: Viewpoint_1

Index for ProtoDeclare definition: Exploder
-->
X3D Tooltips element index: Anchor, Appearance, Background, connect, field, FontStyle, head, IS, Material, meta, OrientationInterpolator, PositionInterpolator, ProtoBody, ProtoDeclare, ProtoInterface, ROUTE, Scene, Script, Shape, Text, Transform, Viewpoint, WorldInfo, X3D, plus documentation for accessType definitions, type definitions, XML data types, and field types

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

ROUTE
event to
(1)
ProtoPositionInterpolator
PositionInterpolator
keyValue
MFVec3f
then
 
 
 
ProtoPositionInterpolator
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
LocationTransform
Transform
translation
SFVec3f
ProtoAnimationScript
Script
rotationValues
MFRotation

ROUTE
event to
(1)
ProtoOrientationInterpolator
OrientationInterpolator
keyValue
MFRotation
then
 
 
 
ProtoOrientationInterpolator
OrientationInterpolator
value_changed
SFRotation

ROUTE
event to
(2)
RotationTransform
Transform
rotation
SFRotation

line 97
Anchor
description='ExplodingBuilding Example' 
User-interaction hint for this node. 

Additional guidance on X3D animation can be found in the 10-Step Animation Design Process and Event Tracing hint sheets. Have fun with X3D! 😀

-->
<!-- Online at
https://www.web3d.org/x3d/content/examples/Savage/Tools/Explosions/ExplodingBuildingPrototypeIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Savage/Tools/Explosions/ExplodingBuildingPrototype.x3d -->

<!-- Color-coding legend: X3D terminology <X3dNode  DEF='idNamefield='value'/> matches XML terminology <XmlElement  DEF='idNameattribute='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> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->