X3DViewpointNode : X3DBindableNode {
  SFBool     [in,out] autoCenterOfRotation FALSE
    doc: """
      When @true, the center of rotation is automatically calculated looking at the middle of scene bounding box. The @link(CenterOfRotation) value is ignored then.

      This field is a Castle Game Engine extension of the X3D standard. The default value (@false) makes behavior compatible with X3D standard. Note that, in contrast, @link(TCastleExamineNavigation.AutoCenterOfRotation) default is @true -- because TCastleExamineNavigation doesn't have to match X3D standard, and the default @true makes it work out-of-the-box on more scenes.
    """
  SFVec3f    [in,out] centerOfRotation  0 0 0
    range: (-Inf,Inf)
  SFString   [in,out] description       ""
    change: chNone
  SFBool     [in,out] jump              TRUE
  SFRotation [in,out] orientation       0 0 1 0
    range: [-1,1],(-Inf,Inf)
    doc: Orientation of the viewpoint, expressed as rotation to transform default direction and up (DefaultX3DCameraDirection, DefaultX3DCameraUp).
  SFBool     [in,out] retainUserOffsets FALSE

  # CASTLE GAME ENGINE EXTENSIONS:
  SFMatrix4f [out]         cameraMatrix
  SFMatrix4f [out]         cameraInverseMatrix
  SFMatrix3f [out]         cameraRotationMatrix
  SFMatrix3f [out]         cameraRotationInverseMatrix
  SFBool     [in,out]      cameraMatrixSendAlsoOnOffscreenRendering  FALSE
  MFVec3f    [in,out]      direction   []
  MFVec3f    [in,out]      up          []
  SFVec3f    [in,out]      gravityUp   0 1 0
    doc: Specify the gravity vector explicitly. See https://castle-engine.io/x3d_implementation_navigation_extensions.php . @deprecated
  SFBool     [in,out]      gravityTransform  TRUE
    doc: Should the gravity vector be affected by the viewpoint transformation, that is by the @link(TTransformNode) instances that contain this TAbstractViewpointNode.
}

Billboard : X3DGroupingNode {
  SFVec3f [in,out] axisOfRotation 0 1 0
    range: (-Inf,Inf)
    doc: Axis around which the billboard rotates to face the camera. Can be zero to rotate freely.
}

Collision : X3DGroupingNode, X3DSensorNode {
  SFBool  [in,out] enabled TRUE
    change: chEverything
  SFTime  [out]    collideTime
  SFBool  [out]    isActive
  SFNode  []       proxy          NULL
    range: X3DChildNode
    change: chEverything
}

LOD : X3DGroupingNode {
  SFInt32 [out]    level_changed
  SFVec3f []       center           0 0 0
    range: (-Inf,Inf)
    # Just redisplay, and new appropriate LOD children will be displayed
    change: chRedisplay
  SFBool  []       forceTransitions FALSE
  MFFloat []       range            []
    range: [0,Inf) or -1
    # Just redisplay, and new appropriate LOD children will be displayed
    change: chRedisplay
}

NavigationInfo : X3DBindableNode {
  MFFloat  [in,out] avatarSize      [0.25, 1.6, 0.75]
    range: [0,Inf)
    change: chNavigationInfo
  SFBool   [in,out] headlight       TRUE
    change: chHeadLightOn
    doc: Control the headlight. @deprecated Instead of this, control the headlight by placing light component (like TCastleDirectionalLight or TCastleSpotLight) as child of TCastleCamera.
  SFFloat  [in,out] speed           1.0
    range: [0,Inf)
    change: chNavigationInfo
    doc: Movement speed. @deprecated Instead of this, control the move speed using @link(TCastleWalkNavigation.MoveSpeed).
  SFTime   [in,out] transitionTime  1.0
    range: [0, Inf)
  MFString [in,out] transitionType  ["LINEAR"]
    range: ["TELEPORT","LINEAR","ANIMATE",...]
  MFString [in,out] type            ["EXAMINE", "ANY"]
    # Note: default value was ["WALK", "ANY"] in VRML 97.
    # X3D changed default value. We follow newer X3D.
    range: ["ANY","WALK","EXAMINE","FLY","LOOKAT","NONE",...]
    change: chNavigationInfo
  SFFloat  [in,out] visibilityLimit 0.0
    range: [0,Inf)
  SFBool   [out]    transitionComplete
  SFString [in,out] blendingSort    "DEFAULT"
    range: ["AUTO", "NONE", "2D", "3D", "3D_ORIGIN", "3D_GROUND"]
    enumerated-type: TShapeSort ShapeSortNames sortAuto
    change: chRedisplay
    doc: """
      Best blending sort for this scene. It may be honored by some model viewers, e.g. castle-model-viewer honors this to display currently loaded scene.

      Note: In CGE applications, the blending sort is determined by @link(TCastleViewport.BlendingSort). It is up to each particular application if, and how, to honor this value on @className. In general, CGE applications may display multiple models (multiple TCastleScene) and there's not necessarily any scene that is "central" or "main", so most CGE applications will just ignore this, at least on most loaded models.

      If an application wants to honor this property of @className, then set @link(TCastleViewport.BlendingSort) based on the bound navigation info node. For example like this:

      @longCode(#
      if (Scene.NavigationInfoStack.Top <> nil) and
         (Scene.NavigationInfoStack.Top.BlendingSort <> sortAuto) then
        MainViewport.BlendingSort :=
          Scene.NavigationInfoStack.Top.BlendingSort;
      #)

      The value sortAuto (specified as string "AUTO" in X3D file)
      says to not change @link(TCastleViewport.BlendingSort).
      The @link(TCastleViewport.BlendingSort) may be, in turn, also sortAuto,
      which means that we will detect whether to use sort2D or sort3D depending
      on camera.
    """
  SFBool [] timeOriginAtLoad FALSE
    doc: @deprecated When this is @true, world time @link(TCastleSceneCore.Time) equals 0 when the scene is loaded. Otherwise (when this is @false, by default) world time 0 means "January 1, 1970" and when the scene is loaded the world time is a big number (and should only be processed as Double, not Single floating-point value). See https://castle-engine.io/x3d_time_origin_considered_uncomfortable.php for discussion.
  SFFloat [in,out] headBobbing TCastleWalkNavigation.DefaultHeadBobbing
    range: [0,1)
    change: chNavigationInfo
    doc: Intensity of head bobbing. 0 means to not do head bobbing. Must be >= 0 and < 1, but sensible values are close to 0 (while any values < 1 are technically allowed, but they make the head bobbing effect crazily exaggerated). See https://castle-engine.io/x3d_implementation_navigation_extensions.php#section_ext_head_bobbing .
  SFFloat [in,out] headBobbingTime TCastleWalkNavigation.DefaultHeadBobbingTime
    range: (0,Inf)
    change: chNavigationInfo
    doc: How much time passes to make full head bobbing sequence (camera swing up and then down back to original height). See https://castle-engine.io/x3d_implementation_navigation_extensions.php#section_ext_head_bobbing .
  SFNode     [in,out]      headlightNode           NULL
    range: X3DLightNode
    doc: Headlight to shine, if @link(Headlight) is @true. See https://castle-engine.io/x3d_implementation_navigation_extensions.php#section_ext_headlight . @deprecated Instead of this, control the headlight by placing light component (like TCastleDirectionalLight or TCastleSpotLight) as child of TCastleCamera.
}

OrthoViewpoint : X3DViewpointNode {
  MFFloat    [in,out] fieldOfView       [-1, -1, 1, 1]
    range: (-Inf,Inf)
    change: chViewpointProjection
  SFVec3f    [in,out] position          0 0 10
    range: (-Inf,Inf)
    change: chViewpointVectors
}

Viewpoint : X3DViewpointNode {
  SFFloat    [in,out] fieldOfView       Pi/4
    range: (0,Pi)
    change: chViewpointProjection
  SFVec3f    [in,out] position          0 0 10
    range: (-Inf,Inf)
    change: chViewpointVectors

  # CASTLE GAME ENGINE EXTENSIONS:
  SFBool     [in,out] fieldOfViewForceVertical FALSE
    change: chViewpointProjection
}

ViewpointGroup : X3DChildNode {
  SFVec3f  [in,out] center            0 0 0
    range: (-Inf,Inf)
  MFNode   [in,out] children          []
    range: X3DViewpointNode | ViewpointGroup
  SFString [in,out] description       ""
    change: chNone
  SFBool   [in,out] displayed         TRUE
  SFBool   [in,out] retainUserOffsets FALSE
  SFVec3f  [in,out] size              0 0 0
    range: (-Inf,Inf)
}
