<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.3//EN" "https://www.web3d.org/specifications/x3d-3.3.dtd">
<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 ' >
<head>
<meta name='titlecontent='Floater.x3d'/>
<meta name='descriptioncontent='Floating pads world: a collection of white pads are created. Each pad slides back and forth horizontally or vertically at its own speed. A green light illuminates the tops of the pads while a blue light illuminates the bottoms.'/>
<meta name='creatorcontent='David R. Nadeau'/>
<meta name='translatorcontent='Don Brutzman'/>
<meta name='createdcontent='1 July 1998'/>
<meta name='translatedcontent='2 February 2014'/>
<meta name='modifiedcontent='20 October 2019'/>
<meta name='Imagecontent='Floater.png' />
<meta name='referencecontent='originals/floater.wrl'/>
<meta name='referencecontent=' http://www.siggraph.org/s98 '/>
<meta name='referencecontent=' http://www.siggraph.org/s98/conference/courses/18.html '/>
<meta name='referencecontent=' http://www.sdsc.edu/~moreland/courses/Siggraph98/vrml97/slides/mt0008.htm '/>
<meta name='referencecontent=' http://www.sdsc.edu/~moreland/courses/Siggraph98/vrml97/slides/mt0135htm '/>
<meta name='referencecontent=' http://www.sdsc.edu/~moreland/courses/Siggraph98/vrml97/vrml97.htm '/>
<meta name='referencecontent=' https://www.web3d.org/x3d/content/examples/X3dResources.html '/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Siggraph98Course/Floater.x3d '/>
<meta name='generatorcontent='Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html'/>
<meta name='generatorcontent='X3D-Edit, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../license.html'/>
</head>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: Clock, Movee, Mover

Index for Viewpoint node: Viewpoint_1

Index for ProtoDeclare definition: Pad
-->
<Scene>
<!-- Complexity is created from simplicity via two tricks: -->
<!-- 1. Create a set of simple shapes, then repeat the same shapes several times. In this case, there are only 7 original pads moving left and right. Those 7 are repeated again, but turned around the Y axis so that they slide front to back. The same 7 are repeated again, but rotated around the Z axis so that they slide up and down. The effect is one of a complex bunch of moving shapes when in reality there are only 7. -->
<!-- 2. Give each moving shape a slightly different cycle interval for its animation. This makes all the movement out of sync, which again creates the appearance of complexity. -->
<!-- A PROTO is used to create a new Pad node that incorporates a box shape, a time sensor, a position interpolator, and routes to connect them together. Fields to the Pad node control the initial placement of the pad, and it's animation cycle interval. -->
<!-- Add textures. Particularly try adding a texture with a transparency (alpha) channel. Using transparency textures you can add stripes, checks, or whatever to the pads. One approach that looks interesting is to add a cloud texture, but make the sky behind the clouds transparent in the texture. When mapped, this creates a blobby indistinct shape on each pad. -->
<!-- Add a Transform node around the entire group of pads, then use an OrientationInterpolator and TimeSensor to slowly spin the world. Remembering the complexity tricks above, you can create a complex tumble by using three nested Transform nodes (X, Y, and Z), each with its own OrientationInterpolator and TimeSensor. Give the three TimeSensors slightly different cycleInterval values (such as 5.0, 7.0, and 11.0). Prime numbers are good choices. Since the cycle times are different for the three spins, they don't sync up, and it looks like a chaotic tumble. -->
<WorldInfo info='"Copyright (c) 1996, David R. Nadeau"title='Floating Pads World'/>
<Viewpoint description='Entry viewposition='0.0 1.6 10.0'/>
<NavigationInfo headlight='false'/>
<Background skyColor='0.0 0.1 0.4'/>
<DirectionalLight color='0.3 1.0 0.3direction='0.5 -1.0 -0.7'/>
<DirectionalLight color='0.0 0.3 1.0direction='-0.5 1.0 0.7'/>
<ProtoDeclare name='Pad'>
<ProtoInterface>
<field name='rotationtype='SFRotationvalue='0.0 0.0 1.0 0.0accessType='inputOutput'/>
<field name='cycleIntervaltype='SFTimevalue='10.0accessType='inputOutput'/>
<field name='translationtype='SFVec3fvalue='0.0 0.0 0.0accessType='inputOutput'/>
</ProtoInterface>
<ProtoBody>
<Collision enabled='false'>
<Transform>
<IS>
<connect nodeField='translationprotoField='translation'/>
<connect nodeField='rotationprotoField='rotation'/>
</IS>
<!-- ROUTE information for Movee node:  [from Mover.value_changed to set_translation ] -->
<Transform DEF='Movee'>
<Shape>
<Appearance>
<Material diffuseColor='1.0 1.0 1.0'/>
</Appearance>
<Box size='4.0 0.2 2.0'/>
</Shape>
<!-- ROUTE information for Clock node:  [from fraction_changed to Mover.set_fraction ] -->
<TimeSensor DEF='Clockloop='truestartTime='1.0'>
<IS>
<connect nodeField='cycleIntervalprotoField='cycleInterval'/>
</IS>
</TimeSensor>
<!-- ROUTE information for Mover node:  [from Clock.fraction_changed to set_fraction ] [from value_changed to Movee.set_translation ] -->
<PositionInterpolator DEF='Moverkey='0.0 0.5 1.0keyValue='-10.0 0.0 0.0 10.0 0.0 0.0 -10.0 0.0 0.0'/>
</Transform>
</Transform>
</Collision>
< ROUTE  fromNode=' Clock' fromField='fraction_changed' toNode=' Mover' toField='set_fraction'/>
< ROUTE  fromNode=' Mover' fromField='value_changed' toNode=' Movee' toField='set_translation'/>
</ProtoBody>
</ProtoDeclare>
<ProtoInstance name='Pad'>
<fieldValue name='cycleIntervalvalue='10.0'/>
<fieldValue name='translationvalue='0.0 4.0 0.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='cycleIntervalvalue='12.0'/>
<fieldValue name='translationvalue='-2.0 0.0 -2.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='cycleIntervalvalue='14.0'/>
<fieldValue name='translationvalue='2.0 6.0 -4.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='cycleIntervalvalue='16.0'/>
<fieldValue name='translationvalue='-4.0 2.0 -8.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='cycleIntervalvalue='18.0'/>
<fieldValue name='translationvalue='0.0 -6.0 -10.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='cycleIntervalvalue='10.0'/>
<fieldValue name='translationvalue='4.0 -2.0 -10.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='cycleIntervalvalue='8.0'/>
<fieldValue name='translationvalue='0.0 -4.0 -0.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 1.0 0.0 1.571'/>
<fieldValue name='cycleIntervalvalue='10.0'/>
<fieldValue name='translationvalue='0.0 4.0 0.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 1.0 0.0 1.571'/>
<fieldValue name='cycleIntervalvalue='12.0'/>
<fieldValue name='translationvalue='-2.0 0.0 -2.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 1.0 0.0 1.571'/>
<fieldValue name='cycleIntervalvalue='14.0'/>
<fieldValue name='translationvalue='2.0 6.0 -4.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 1.0 0.0 1.571'/>
<fieldValue name='cycleIntervalvalue='16.0'/>
<fieldValue name='translationvalue='-4.0 2.0 -8.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 1.0 0.0 1.571'/>
<fieldValue name='cycleIntervalvalue='18.0'/>
<fieldValue name='translationvalue='0.0 -6.0 -10.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 1.0 0.0 1.571'/>
<fieldValue name='cycleIntervalvalue='10.0'/>
<fieldValue name='translationvalue='4.0 -2.0 -10.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 1.0 0.0 1.571'/>
<fieldValue name='cycleIntervalvalue='8.0'/>
<fieldValue name='translationvalue='0.0 -4.0 -0.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 0.0 1.0 1.571'/>
<fieldValue name='cycleIntervalvalue='10.0'/>
<fieldValue name='translationvalue='0.0 4.0 0.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 0.0 1.0 1.571'/>
<fieldValue name='cycleIntervalvalue='12.0'/>
<fieldValue name='translationvalue='-2.0 0.0 -2.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 0.0 1.0 1.571'/>
<fieldValue name='cycleIntervalvalue='14.0'/>
<fieldValue name='translationvalue='2.0 6.0 -4.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 0.0 1.0 1.571'/>
<fieldValue name='cycleIntervalvalue='16.0'/>
<fieldValue name='translationvalue='-4.0 2.0 -8.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 0.0 1.0 1.571'/>
<fieldValue name='cycleIntervalvalue='18.0'/>
<fieldValue name='translationvalue='0.0 -6.0 -10.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 0.0 1.0 1.571'/>
<fieldValue name='cycleIntervalvalue='10.0'/>
<fieldValue name='translationvalue='4.0 -2.0 -10.0'/>
</ProtoInstance>
<ProtoInstance name='Pad'>
<fieldValue name='rotationvalue='0.0 0.0 1.0 1.571'/>
<fieldValue name='cycleIntervalvalue='8.0'/>
<fieldValue name='translationvalue='0.0 -4.0 -0.0'/>
</ProtoInstance>
</Scene>
</X3D>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: Clock, Movee, Mover

Index for Viewpoint node: Viewpoint_1

Index for ProtoDeclare definition: Pad
-->

Event Graph ROUTE Table entries with 2 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.

Clock
TimeSensor
fraction_changed
SFFloat

ROUTE
event to
(1)
Mover
PositionInterpolator
set_fraction
SFFloat

 
 
then
Mover
PositionInterpolator
value_changed
SFVec3f

ROUTE
event to
(2)
Movee
Transform
set_translation
SFVec3f



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 



ProtoInstance
Pad
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 


-->

<!-- Online at
https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Siggraph98Course/FloaterIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Siggraph98Course/Floater.x3d -->

<!-- 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> -->

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