Class TAbstractViewpointNode

DescriptionHierarchyFieldsMethodsProperties

Unit

Declaration

type TAbstractViewpointNode = class(TAbstractBindableNode)

Description

Common ancestor for both VRML 1.0 camera nodes and VRML/X3D >= 2.0 viewpoint nodes.

Hierarchy

Overview

Methods

Public procedure CreateNode; override;
Public function TransformationChange: TNodeTransformationChange; override;
Public function Position: TSFVec3f; virtual; abstract;
Public class function ProjectionType: TProjectionType; virtual; abstract;
Public procedure GetView(out CamPos, CamDir, CamUp, GravityUp: TVector3Single);

Properties

Public property FdOrientation: TSFRotation read FFdOrientation;
Public property FdDirection: TMFVec3f read FFdDirection;
Public property FdUp: TMFVec3f read FFdUp;
Public property FdGravityUp: TSFVec3f read FFdGravityUp;
Public property EventCameraMatrix: TX3DEvent read FEventCameraMatrix;
Public property EventCameraInverseMatrix: TX3DEvent read FEventCameraInverseMatrix;
Public property EventCameraRotationMatrix: TX3DEvent read FEventCameraRotationMatrix;
Public property EventCameraRotationInverseMatrix: TX3DEvent read FEventCameraRotationInverseMatrix;
Public property FdCameraMatrixSendAlsoOnOffscreenRendering: TSFBool read FFdCameraMatrixSendAlsoOnOffscreenRendering;

Description

Methods

Public procedure CreateNode; override;
 
Public function TransformationChange: TNodeTransformationChange; override;
 
Public function Position: TSFVec3f; virtual; abstract;

Position of the viewpoint.

This is an abstract function, not a simple FdPosition, because one of the descendants (TAbstractX3DViewpointNode) doesn't have FdPosition field. For now, all non-abstract descendants (for both VRML 1.0 and VRML >= 2.0) override this and expose their position field correctly.

Public class function ProjectionType: TProjectionType; virtual; abstract;
 
Public procedure GetView(out CamPos, CamDir, CamUp, GravityUp: TVector3Single);

Calculate camera vectors (position, direction, up, gravity up). Follows VRML/X3D specification:

  • position is taken directly from FdPosition field,

  • direction and up are (respectively) -Z and +Y rotated by FdOrientation,

  • gravity up is +Y.

They are all then transformed by the current viewpoint transformation (determined by parent nodes like Transform).

One conclusion from the above is that the only way to change the gravity up vector (this determines in which direction viewer falls down) is to use the Transform node around the viewpoint node.

Additionally, as an extension, we also look at FdDirection and FdUp and FdGravityUp vectors. See http://castle-engine.sourceforge.net/x3d_extensions.php#section_ext_cameras_alt_orient

Returned CamDir, CamUp, GravityUp are always normalized.

Properties

Public property FdOrientation: TSFRotation read FFdOrientation;
 
Public property FdDirection: TMFVec3f read FFdDirection;
 
Public property FdUp: TMFVec3f read FFdUp;
 
Public property FdGravityUp: TSFVec3f read FFdGravityUp;
 
Public property EventCameraMatrix: TX3DEvent read FEventCameraMatrix;
 
Public property EventCameraInverseMatrix: TX3DEvent read FEventCameraInverseMatrix;
 
Public property EventCameraRotationMatrix: TX3DEvent read FEventCameraRotationMatrix;
 
Public property EventCameraRotationInverseMatrix: TX3DEvent read FEventCameraRotationInverseMatrix;
 
Public property FdCameraMatrixSendAlsoOnOffscreenRendering: TSFBool read FFdCameraMatrixSendAlsoOnOffscreenRendering;
 

Generated by PasDoc 0.12.1 on 2013-02-04 20:26:55