{ "X3D": {
    "encoding":"UTF-8",
    "@profile":"Immersive",
    "@version":"3.3",
    "@xsd:noNamespaceSchemaLocation":"https://www.web3d.org/specifications/x3d-3.3.xsd",
    "JSON schema":"https://www.web3d.org/specifications/x3d-4.0-JSONSchema.autogenerated.json",
    "head": {
        "meta": [
          {
            "@name":"title",
            "@content":"Floater.x3d"
          },
          {
            "@name":"description",
            "@content":"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."
          },
          {
            "@name":"creator",
            "@content":"David R. Nadeau"
          },
          {
            "@name":"translator",
            "@content":"Don Brutzman"
          },
          {
            "@name":"created",
            "@content":"1 July 1998"
          },
          {
            "@name":"translated",
            "@content":"2 February 2014"
          },
          {
            "@name":"modified",
            "@content":"20 October 2019"
          },
          {
            "@name":"Image",
            "@content":"Floater.png"
          },
          {
            "@name":"reference",
            "@content":"originals/floater.wrl"
          },
          {
            "@name":"reference",
            "@content":"http://www.siggraph.org/s98"
          },
          {
            "@name":"reference",
            "@content":"http://www.siggraph.org/s98/conference/courses/18.html"
          },
          {
            "@name":"reference",
            "@content":"http://www.sdsc.edu/~moreland/courses/Siggraph98/vrml97/slides/mt0008.htm"
          },
          {
            "@name":"reference",
            "@content":"http://www.sdsc.edu/~moreland/courses/Siggraph98/vrml97/slides/mt0135htm"
          },
          {
            "@name":"reference",
            "@content":"http://www.sdsc.edu/~moreland/courses/Siggraph98/vrml97/vrml97.htm"
          },
          {
            "@name":"reference",
            "@content":"https://www.web3d.org/x3d/content/examples/X3dResources.html"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/Vrml2Sourcebook/Siggraph98Course/Floater.x3d"
          },
          {
            "@name":"generator",
            "@content":"Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit, https://www.web3d.org/x3d/tools/X3D-Edit"
          },
          {
            "@name":"license",
            "@content":"../license.html"
          },
          {
            "@name":"translated",
            "@content":"17 April 2026"
          },
          {
            "@name":"generator",
            "@content":"X3dToJson.xslt, https://www.web3d.org/x3d/stylesheets/X3dToJson.html"
          },
          {
            "@name":"reference",
            "@content":"X3D JSON encoding: https://www.web3d.org/wiki/index.php/X3D_JSON_Encoding"
          }
        ]
    },
    "Scene": {
        "-children":[
          {
            "#comment":"Complexity is created from simplicity via two tricks:"
          },
          {
            "#comment":"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."
          },
          {
            "#comment":"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."
          },
          {
            "#comment":"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."
          },
          {
            "#comment":"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."
          },
          {
            "#comment":"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 view",
              "@position":[0.0,1.6,10.0]
            }
          },
          { "NavigationInfo":
            {
              "@headlight":false
            }
          },
          { "Background":
            {
              "@skyColor":[0.0,0.1,0.4]
            }
          },
          { "DirectionalLight":
            {
              "@color":[0.3,1.0,0.3],
              "@direction":[0.5,-1.0,-0.7]
            }
          },
          { "DirectionalLight":
            {
              "@color":[0.0,0.3,1.0],
              "@direction":[-0.5,1.0,0.7]
            }
          },
          { "ProtoDeclare":
            {
              "@name":"Pad",
              "ProtoInterface": {
                  "field": [
                    {
                      "@name":"rotation",
                      "@accessType":"inputOutput",
                      "@type":"SFRotation",
                      "@value":[0.0,0.0,1.0,0.0]
                    },
                    {
                      "@name":"cycleInterval",
                      "@accessType":"inputOutput",
                      "@type":"SFTime",
                      "@value":10.0
                    },
                    {
                      "@name":"translation",
                      "@accessType":"inputOutput",
                      "@type":"SFVec3f",
                      "@value":[0.0,0.0,0.0]
                    }
                  ]
              },
              "ProtoBody": {
                  "-children":[
                    { "Collision":
                      {
                        "@enabled":false,
                        "-children":[
                          { "Transform":
                            {
                              "IS": {
                                  "connect": [
                                    {
                                      "@nodeField":"translation",
                                      "@protoField":"translation"
                                    },
                                    {
                                      "@nodeField":"rotation",
                                      "@protoField":"rotation"
                                    }
                                  ]
                              },
                              "-children":[
                                { "Transform":
                                  {
                                    "@DEF":"Movee",
                                    "-children":[
                                      { "Shape":
                                        {
                                          "-appearance":
                                            { "Appearance":
                                              {
                                                "-material":
                                                  { "Material":
                                                    {
                                                      "@diffuseColor":[1.0,1.0,1.0]
                                                    }
                                                  }
                                              }
                                            },
                                          "-geometry":
                                            { "Box":
                                              {
                                                "@size":[4.0,0.2,2.0]
                                              }
                                            }
                                        }
                                      },
                                      { "TimeSensor":
                                        {
                                          "@DEF":"Clock",
                                          "@loop":true,
                                          "@startTime":1.0,
                                          "IS": {
                                              "connect": [
                                                {
                                                  "@nodeField":"cycleInterval",
                                                  "@protoField":"cycleInterval"
                                                }
                                              ]
                                          }
                                        }
                                      },
                                      { "PositionInterpolator":
                                        {
                                          "@DEF":"Mover",
                                          "@key":[0.0,0.5,1.0],
                                          "@keyValue":[-10.0,0.0,0.0,10.0,0.0,0.0,-10.0,0.0,0.0]
                                        }
                                      }
                                    ]
                                  }
                                }
                              ]
                            }
                          }
                        ]
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"fraction_changed",
                        "@fromNode":"Clock",
                        "@toField":"set_fraction",
                        "@toNode":"Mover"
                      }
                    },
                    { "ROUTE":
                      {
                        "@fromField":"value_changed",
                        "@fromNode":"Mover",
                        "@toField":"set_translation",
                        "@toNode":"Movee"
                      }
                    }
                  ]
              }
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"cycleInterval",
                  "@value":10.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,4.0,0.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"cycleInterval",
                  "@value":12.0
                },
                {
                  "@name":"translation",
                  "@value":[-2.0,0.0,-2.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"cycleInterval",
                  "@value":14.0
                },
                {
                  "@name":"translation",
                  "@value":[2.0,6.0,-4.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"cycleInterval",
                  "@value":16.0
                },
                {
                  "@name":"translation",
                  "@value":[-4.0,2.0,-8.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"cycleInterval",
                  "@value":18.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,-6.0,-10.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"cycleInterval",
                  "@value":10.0
                },
                {
                  "@name":"translation",
                  "@value":[4.0,-2.0,-10.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"cycleInterval",
                  "@value":8.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,-4.0,-0.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,1.0,0.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":10.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,4.0,0.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,1.0,0.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":12.0
                },
                {
                  "@name":"translation",
                  "@value":[-2.0,0.0,-2.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,1.0,0.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":14.0
                },
                {
                  "@name":"translation",
                  "@value":[2.0,6.0,-4.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,1.0,0.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":16.0
                },
                {
                  "@name":"translation",
                  "@value":[-4.0,2.0,-8.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,1.0,0.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":18.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,-6.0,-10.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,1.0,0.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":10.0
                },
                {
                  "@name":"translation",
                  "@value":[4.0,-2.0,-10.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,1.0,0.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":8.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,-4.0,-0.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,0.0,1.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":10.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,4.0,0.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,0.0,1.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":12.0
                },
                {
                  "@name":"translation",
                  "@value":[-2.0,0.0,-2.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,0.0,1.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":14.0
                },
                {
                  "@name":"translation",
                  "@value":[2.0,6.0,-4.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,0.0,1.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":16.0
                },
                {
                  "@name":"translation",
                  "@value":[-4.0,2.0,-8.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,0.0,1.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":18.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,-6.0,-10.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,0.0,1.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":10.0
                },
                {
                  "@name":"translation",
                  "@value":[4.0,-2.0,-10.0]
                }
              ]
            }
          },
          { "ProtoInstance":
            {
              "@name":"Pad",
              "fieldValue": [
                {
                  "@name":"rotation",
                  "@value":[0.0,0.0,1.0,1.571]
                },
                {
                  "@name":"cycleInterval",
                  "@value":8.0
                },
                {
                  "@name":"translation",
                  "@value":[0.0,-4.0,-0.0]
                }
              ]
            }
          }
        ]
    }
  }
}