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

Index for ProtoDeclare definition : Pad

Index for DEF nodes : Clock, Movee, Mover

Index for Viewpoint image : Viewpoint_1
-->
<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='ClockfromField='fraction_changedtoNode='MovertoField='set_fraction'/>
<ROUTE fromNode='MoverfromField='value_changedtoNode='MoveetoField='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>
<!--

Index for ProtoDeclare definition : Pad

Index for DEF nodes : Clock, Movee, Mover

Index for Viewpoint image : Viewpoint_1
-->

<!-- Color key: <X3dNode DEF='idName' field='value'/> matches <XmlElement DEF='idName' attribute='value'/>
(Light blue background: behavior node) (Grey background: inserted documentation) (Magenta background: X3D Extensibility)
    <Prototype name='ProtoName'> <field name='fieldName'/> </Prototype> -->

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