{ "X3D": {
    "encoding":"UTF-8",
    "@profile":"Immersive",
    "@version":"3.2",
    "@xsd:noNamespaceSchemaLocation":"https://www.web3d.org/specifications/x3d-3.2.xsd",
    "JSON schema":"https://www.web3d.org/specifications/x3d-4.0-JSONSchema.autogenerated.json",
    "head": {
        "-children":[
          {
            "#comment":"meta content='Rename and test these prototypes to match final names in X3D Specification Followers Component' name='TODO'"
          },
          {
            "#comment":"meta content='Ensure full coverage of follower nodes in order to provide backwards compatibility with X3D v3.0 and v3.1.' name='TODO'"
          }
        ],
        "meta": [
          {
            "@name":"title",
            "@content":"FollowerExternalPrototypeDeclarations.x3d"
          },
          {
            "@name":"description",
            "@content":"X3D Follower example using developmental prototypes."
          },
          {
            "@name":"creator",
            "@content":"Herbert Stocker"
          },
          {
            "@name":"translator",
            "@content":"Don Brutzman"
          },
          {
            "@name":"created",
            "@content":"18 April 2006"
          },
          {
            "@name":"translated",
            "@content":"10 April 2012"
          },
          {
            "@name":"modified",
            "@content":"7 December 2024"
          },
          {
            "@name":"warning",
            "@content":"This scene was used for X3D development and is no longer correct."
          },
          {
            "@name":"specificationSection",
            "@content":"X3D Architecture, clause 39 Followers component"
          },
          {
            "@name":"specificationUrl",
            "@content":"https://www.web3d.org/specifications/X3Dv4/ISO-IEC19775-1v4-IS/Part01/components/followers.html"
          },
          {
            "@name":"reference",
            "@content":"FollowerPrototypeDeclarations.x3d"
          },
          {
            "@name":"reference",
            "@content":"originals/Chasers.wrl"
          },
          {
            "@name":"reference",
            "@content":"originals/Dampers.wrl"
          },
          {
            "@name":"reference",
            "@content":"Stocker_06_Followers.pdf"
          },
          {
            "@name":"reference",
            "@content":"http://www.hersto.com/Publications/Followers"
          },
          {
            "@name":"requires",
            "@content":"X3D version 3.2 or greater"
          },
          {
            "@name":"subject",
            "@content":"X3D Follower Chaser Damper"
          },
          {
            "@name":"reference",
            "@content":"https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html"
          },
          {
            "@name":"identifier",
            "@content":"https://www.web3d.org/x3d/content/examples/Basic/Followers/FollowerExternalPrototypeDeclarations.x3d"
          },
          {
            "@name":"generator",
            "@content":"Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html"
          },
          {
            "@name":"generator",
            "@content":"X3D-Edit 3.3, https://www.web3d.org/x3d/tools/X3D-Edit"
          },
          {
            "@name":"license",
            "@content":"../../license.html"
          },
          {
            "@name":"translated",
            "@content":"20 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":[
          { "WorldInfo":
            {
              "@info":["The ExternProto nodes found in this file implement principles described in the paper","Linear Filters - Animating Objects in a Flexible and Pleasing Way","They have been proposed and added to the X3D standard in 2006.","Webpage: http://www.hersto.net/Followers","Please use the code in this file in any content or application you like","or modify it in any way.","The code here works, however things like detecting when a transition has ended","and when the node can stop calculating and updating the output or secondary fields","like set_value or initial_destination are not yet implemented.","Nevertheless, set_destination and value_changed do work."],
              "@title":"Follower (Chaser and Damper) nodes"
            }
          },
          {
            "#comment":"================================================"
          },
          {
            "#comment":"Do not use these! The following ExternProtoDeclares were produced when converting the original examples, and are included for completeness only."
          },
          { "ExternProtoDeclare":
            {
              "@name":"OrientationChaser",
              "@url":["originals/Chasers.x3d#OrientationChaser","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.x3d#OrientationChaser","originals/Chasers.wrl#OrientationChaser","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.wrl#OrientationChaser"],
              "-children":[
                {
                  "#comment":"\"urn:inet:hersto.net:node:OrientationChaser\" \"Chasers.x3d#OrientationChaser\""
                },
                {
                  "#comment":"\"http://www.hersto.net/Followers/Chasers.wrl#OrientationChaser\""
                }
              ],
              "field": [
                {
                  "@name":"value_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"set_value",
                  "@accessType":"inputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"isActive",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"set_destination",
                  "@accessType":"inputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"duration",
                  "@accessType":"initializeOnly",
                  "@type":"SFTime"
                },
                {
                  "@name":"initial_destination",
                  "@accessType":"initializeOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"initial_value",
                  "@accessType":"initializeOnly",
                  "@type":"SFRotation"
                }
              ]
            }
          },
          { "ExternProtoDeclare":
            {
              "@name":"OrientationDamper",
              "@url":["originals/Chasers.x3d#OrientationDamper","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.x3d#OrientationDamper","originals/Chasers.wrl#OrientationDamper","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.wrl#OrientationDamper"],
              "-children":[
                {
                  "#comment":"\"urn:inet:hersto.net:node:OrientationDamper\" \"Dampers.wrl#OrientationDamper\""
                },
                {
                  "#comment":"http://www.hersto.net/Followers/Dampers.wrl#OrientationDamper\""
                }
              ],
              "field": [
                {
                  "@name":"isLoaded",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"value_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"set_destination",
                  "@accessType":"inputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"initial_destination",
                  "@accessType":"initializeOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"order",
                  "@accessType":"initializeOnly",
                  "@type":"SFInt32"
                },
                {
                  "@name":"tau",
                  "@accessType":"inputOutput",
                  "@type":"SFFloat"
                },
                {
                  "@name":"set_value",
                  "@accessType":"inputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"initial_value",
                  "@accessType":"initializeOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"isActive",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"eps",
                  "@accessType":"initializeOnly",
                  "@type":"SFFloat"
                }
              ]
            }
          },
          { "ExternProtoDeclare":
            {
              "@name":"PlacementChaser",
              "@url":["originals/Chasers.x3d#PlacementChaser","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.x3d#PlacementChaser","originals/Chasers.wrl#PlacementChaser","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.wrl#PlacementChaser"],
              "field": [
                {
                  "@name":"isLoaded",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"set_valuePos",
                  "@accessType":"inputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"set_valueOri",
                  "@accessType":"inputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"set_destinationPos",
                  "@accessType":"inputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"duration",
                  "@accessType":"initializeOnly",
                  "@type":"SFTime"
                },
                {
                  "@name":"set_destinationOri",
                  "@accessType":"inputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"initial_valuePos",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"initial_destinationPos",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"valuePos_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"initial_valueOri",
                  "@accessType":"initializeOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"initial_destinationOri",
                  "@accessType":"initializeOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"valueOri_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFRotation"
                },
                {
                  "@name":"isActive",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                }
              ]
            }
          },
          { "ExternProtoDeclare":
            {
              "@name":"Position2fDamper",
              "@url":["originals/Chasers.x3d#Position2fDamper","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.x3d#Position2fDamper","originals/Chasers.wrl#Position2fDamper","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.wrl#Position2fDamper"],
              "field": [
                {
                  "@name":"isLoaded",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"value_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"set_destination",
                  "@accessType":"inputOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"initial_destination",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"order",
                  "@accessType":"initializeOnly",
                  "@type":"SFInt32"
                },
                {
                  "@name":"tau",
                  "@accessType":"inputOutput",
                  "@type":"SFFloat"
                },
                {
                  "@name":"set_value",
                  "@accessType":"inputOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"initial_value",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"isActive",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"eps",
                  "@accessType":"initializeOnly",
                  "@type":"SFFloat"
                }
              ],
              "-children":[
                {
                  "#comment":"\"urn:inet:hersto.net:node:Position2fDamper\""
                },
                {
                  "#comment":"\"http://www.hersto.net/Followers/\"originals/Dampers.wrl#Position2fDamper\""
                }
              ]
            }
          },
          { "ExternProtoDeclare":
            {
              "@name":"Position2fChaser",
              "@url":["originals/Chasers.x3d#Position2fChaser","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.x3d#Position2fChaser","originals/Chasers.wrl#Position2fChaser","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.wrl#Position2fChaser"],
              "-children":[
                {
                  "#comment":"\"urn:inet:hersto.net:node:Position2fChaser\""
                },
                {
                  "#comment":"\"http://www.hersto.net/Followers/Chasers.wrl#Position2fChaser\""
                }
              ],
              "field": [
                {
                  "@name":"value_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"set_value",
                  "@accessType":"inputOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"isActive",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"set_destination",
                  "@accessType":"inputOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"duration",
                  "@accessType":"initializeOnly",
                  "@type":"SFTime"
                },
                {
                  "@name":"initial_destination",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec2f"
                },
                {
                  "@name":"initial_value",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec2f"
                }
              ]
            }
          },
          { "ExternProtoDeclare":
            {
              "@name":"PositionChaser",
              "@url":["originals/Chasers.x3d#PositionChaser","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.x3d#PositionChaser","originals/Chasers.wrl#PositionChaser","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.wrl#PositionChaser"],
              "-children":[
                {
                  "#comment":"\"urn:inet:hersto.net:node:PositionChaser\""
                },
                {
                  "#comment":"\"http://www.hersto.net/Followers/Chasers.wrl#PositionChaser\""
                }
              ],
              "field": [
                {
                  "@name":"value_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"set_value",
                  "@accessType":"inputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"isActive",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"set_destination",
                  "@accessType":"inputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"duration",
                  "@accessType":"initializeOnly",
                  "@type":"SFTime"
                },
                {
                  "@name":"initial_destination",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"initial_value",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec3f"
                }
              ]
            }
          },
          { "ExternProtoDeclare":
            {
              "@name":"PositionDamper",
              "@url":["originals/Chasers.x3d#PositionDamper","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.x3d#PositionDamper","originals/Chasers.wrl#PositionDamper","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Chasers.wrl#PositionDamper"],
              "-children":[
                {
                  "#comment":"\"urn:inet:hersto.net:node:PositionDamper\""
                },
                {
                  "#comment":"\"http://www.hersto.net/Followers/Dampers.wrl#PositionDamper\""
                }
              ],
              "field": [
                {
                  "@name":"isLoaded",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"value_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"set_destination",
                  "@accessType":"inputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"initial_destination",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"order",
                  "@accessType":"initializeOnly",
                  "@type":"SFInt32"
                },
                {
                  "@name":"tau",
                  "@accessType":"inputOutput",
                  "@type":"SFFloat"
                },
                {
                  "@name":"set_value",
                  "@accessType":"inputOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"initial_value",
                  "@accessType":"initializeOnly",
                  "@type":"SFVec3f"
                },
                {
                  "@name":"isActive",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"eps",
                  "@accessType":"initializeOnly",
                  "@type":"SFFloat"
                }
              ]
            }
          },
          { "ExternProtoDeclare":
            {
              "@name":"ScalarDamper",
              "@url":["originals/Dampers.wrl#ScalarDamper","https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/Dampers.wrl#ScalarDamper"],
              "field": [
                {
                  "@name":"isLoaded",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"value_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFFloat"
                },
                {
                  "@name":"set_destination",
                  "@accessType":"inputOnly",
                  "@type":"SFFloat"
                },
                {
                  "@name":"initial_destination",
                  "@accessType":"initializeOnly",
                  "@type":"SFFloat"
                },
                {
                  "@name":"order",
                  "@accessType":"initializeOnly",
                  "@type":"SFInt32"
                },
                {
                  "@name":"tau",
                  "@accessType":"inputOutput",
                  "@type":"SFFloat"
                },
                {
                  "@name":"set_value",
                  "@accessType":"inputOnly",
                  "@type":"SFFloat"
                },
                {
                  "@name":"transparency_changed",
                  "@accessType":"outputOnly",
                  "@type":"SFFloat"
                },
                {
                  "@name":"initial_value",
                  "@accessType":"initializeOnly",
                  "@type":"SFFloat"
                },
                {
                  "@name":"isActive",
                  "@accessType":"outputOnly",
                  "@type":"SFBool"
                },
                {
                  "@name":"eps",
                  "@accessType":"initializeOnly",
                  "@type":"SFFloat"
                }
              ]
            }
          }
        ]
    }
  }
}