Castle Game EngineIntroduction Units Class Hierarchy Classes, Interfaces, Objects and Records Types Variables Constants Functions and Procedures Identifiers |
Class TExamineCamera
Unit
CastleCameras
Declaration
type TExamineCamera = class(TCamera)
Description
Navigate the 3D model in examine mode, like you would hold a box with the model inside. The model is displayed around MoveAmount 3D point, it's rotated by Rotations and scaled by ScaleFactor (scaled around MoveAmount point).
Hierarchy
Overview
Fields
Methods
 |
constructor Create(AOwner: TComponent); override; |
 |
destructor Destroy; override; |
 |
function Matrix: TMatrix4Single; override; |
 |
function MatrixInverse: TMatrix4Single; |
 |
function RotationMatrix: TMatrix4Single; override; |
 |
procedure Update(const SecondsPassed: Single; var HandleInput: boolean); override; |
 |
function AllowSuspendForInput: boolean; override; |
 |
function Press(const Event: TInputPressRelease): boolean; override; |
 |
function Motion(const Event: TInputMotion): boolean; override; |
 |
function SensorTranslation(const X, Y, Z, Length: Double; const SecondsPassed: Single): boolean; override; |
 |
function SensorRotation(const X, Y, Z, Angle: Double; const SecondsPassed: Single): boolean; override; |
 |
procedure Init(const AModelBox: TBox3D; const ARadius: Single); |
 |
procedure StopRotating; |
 |
procedure Scale(const ScaleBy: Single); |
 |
procedure Move(coord: integer; const MoveDistance: Single); |
 |
procedure GetView(out APos, ADir, AUp: TVector3Single); override; |
 |
procedure GetView(out APos, ADir, AUp, AGravityUp: TVector3Single); override; |
 |
function GetPosition: TVector3Single; override; |
 |
function GetGravityUp: TVector3Single; override; |
 |
procedure SetView(const APos, ADir, AUp: TVector3Single; const AdjustUp: boolean = true); override; |
 |
procedure SetView(const APos, ADir, AUp, AGravityUp: TVector3Single; const AdjustUp: boolean = true); override; |
 |
procedure VisibleChange; override; |
 |
function GetNavigationType: TNavigationType; override; |
Properties
Description
Fields
 |
internal const DefaultRotationAccelerationSpeed = 5.0; |
|
 |
internal const DefaultRotationSpeed = 2.0; |
|
Methods
 |
constructor Create(AOwner: TComponent); override; |
|
 |
destructor Destroy; override; |
|
 |
procedure Update(const SecondsPassed: Single; var HandleInput: boolean); override; |
|
 |
function AllowSuspendForInput: boolean; override; |
|
 |
function Motion(const Event: TInputMotion): boolean; override; |
|
 |
function SensorTranslation(const X, Y, Z, Length: Double; const SecondsPassed: Single): boolean; override; |
|
 |
function SensorRotation(const X, Y, Z, Angle: Double; const SecondsPassed: Single): boolean; override; |
|
 |
procedure Init(const AModelBox: TBox3D; const ARadius: Single); |
Initialize most important properties of this class: sets ModelBox and goes to a nice view over the entire scene.
In other words, this is just a shortcut to setting ModelBox, setting suitable initial view by SetInitialView, and then going to initial view by GoToInitial.
|
 |
procedure StopRotating; |
Sets RotationsAnim to zero, stopping the rotation of the model.
|
 |
procedure Scale(const ScaleBy: Single); |
|
 |
procedure Move(coord: integer; const MoveDistance: Single); |
|
 |
procedure GetView(out APos, ADir, AUp, AGravityUp: TVector3Single); override; |
|
 |
procedure SetView(const APos, ADir, AUp: TVector3Single; const AdjustUp: boolean = true); override; |
|
 |
procedure SetView(const APos, ADir, AUp, AGravityUp: TVector3Single; const AdjustUp: boolean = true); override; |
|
 |
procedure VisibleChange; override; |
|
Properties
 |
property Rotations: TQuaternion read FRotations write SetRotations; |
Current rotation of the model. Rotation is done around ModelBox middle (with MoveAmount added).
|
 |
property RotationsAnim: TVector3Single read FRotationsAnim write SetRotationsAnim; |
Continous rotation animation, applied each Update to Rotations.
|
 |
property MoveAmount: TVector3Single read FMoveAmount write SetMoveAmount; |
MoveAmount says how to translate the model. It's always added to the middle of ModelBox, this is usually comfortable.
The default value of this is zero vector. If you want to just see the whole model, you may want to set this to something like
MoveAmount := Middle of ModelBox + (0, 0, -2 * ModelSize)
Actually, Init method does the above for you.
|
 |
property CenterOfRotation: TVector3Single read FCenterOfRotation write SetCenterOfRotation; |
|
 |
property Turntable: boolean
read FTurntable write FTurntable default false; |
Turntable rotates the scene around its Y axis instead of current camera axis.
|
 |
property ScaleFactor: Single
read FScaleFactor write SetScaleFactor default 1; |
How the model is scaled. Scaling is done around MoveAmount added to the middle of ModelBox. May never be zero (or too near zero).
|
 |
property ModelBox: TBox3D read FModelBox write SetModelBox; |
The aproximate size of 3D model that will be viewed. This is the crucial property of this class that you have to set, to make the navigation work best. Setting this sets also CenterOfRotation to the middle of the box.
The idea is that usually this is the only property that you have to set. ScaleFactor, MoveAmount, RotationsAnim will be almost directly controlled by user (through Press and other events). Rotations will be automatically modified by Update.
So often you only need to set ModelBox , once, and everything else will work smoothly.
Initially this is EmptyBox3D.
|
 |
property Inputs_Move: T3BoolInputs read FInputs_Move; |
Alternative ways to access Input_Move/Rotate(X|Y|Z)(Inc|Dec). Index the array (2nd index true means increase) instead of having to use the full identifier.
|
 |
property MouseNavigation: boolean
read GetMouseNavigation write SetMouseNavigation default true; deprecated; |
Warning: this symbol is deprecated.
Include/exclude ciMouseDragging from Input instead.
|
 |
property RotationAccelerate: boolean
read FRotationAccelerate write SetRotationAccelerate default true; |
When True , rotation keys make the rotation faster, and the model keeps rotating even when you don't hold any keys. When False , you have to hold rotation keys to rotate.
|
|