CAST II Game Engine

   MAIN       FEATURES       SCREENSHOTS       FORUMS       MANUAL       DOWNLOADS       CONTACTS   
Units
Class Hierarchy
Classes, Interfaces and Objects
Types
Enumerations
Variables
Constants
Functions and Procedures
Identifiers

Unit Base3D

Description

Basic 3D Unit

(C) 2003-2007 George "Mirage" Bakhtadze. www.casteng.com
The source code may be used under either MPL 1.1 or LGPL 2.1 license. See included license.txt file
Unit contains basic 3D types and routines

Functions and Procedures

Overview

function AddVector3s(const V1, V2: TVector3s): TVector3s; overload;
procedure AddVector3s(out Result: TVector3s; const V1, V2: TVector3s); overload;
procedure AddVector4s(out Result: TVector4s; const V1, V2: TVector4s); overload;
function AddVector4s(const V1, V2: TVector4s): TVector4s; overload;
function ArcTan2(const Y, X: Extended): Extended;
function CartesianProductVector3s(const V1, V2: TVector3s): TVector3s;
procedure CrossProductVector3s(out Result: TVector3s; const V1, V2: TVector3s); overload;
function CrossProductVector3s(const V1, V2: TVector3s): TVector3s; overload;
function CutMatrix3s(const M: TMatrix4s): TMatrix3s; overload;
procedure CutMatrix3s(out Result: TMatrix3s; const M: TMatrix4s); overload;
function DotProductVector3s(const V1, V2: TVector3s): Single;
function EqualsMatrix3s(const M1, M2: TMatrix3s): Boolean;
function EqualsMatrix4s(const M1, M2: TMatrix4s): Boolean;
function EqualsQuaternions(Q1, Q2: TQuaternion): Boolean;
function EqualsVector3s(const V1, V2: TVector3s): Boolean;
function EqualsVector4s(const V1, V2: TVector4s): Boolean;
procedure ExpandBBox(var BoundingBox: TBoundingBox; const X, Y, Z: Single); overload;
procedure ExpandBBox(var BoundingBox: TBoundingBox; const Point: TVector3s); overload;
function ExpandMatrix3s(const M: TMatrix3s): TMatrix4s; overload;
function ExpandVector3s(const V: Tvector3s): TVector4s; overload;
procedure ExpandVector3s(out Result: TVector4s; const V: Tvector3s); overload;
procedure FastNormalizeVector3s(var Result: TVector3s; Length: Single = 1); overload;
procedure FastNormalizeVector4s(var Result: TVector4s; Length: Single = 1);
function GetMagnitudeApprox(const V: TVector3s): Single;
function GetPerpendicular3s(const V: TVector3s): TVector3s; overload;
procedure GetPerpendicular3s(out Result: TVector3s; const V: TVector3s); overload;
function GetPlane(A, B, C, D: Single): TPlane;
function GetPlaneFromPointNormal(const Point, Normal: TVector3s): TPlane;
procedure GetQuaternion(out Result: TQuaternion; const Angle: Single; const Axis: TVector3s); overload;
function GetQuaternion(const Angle: Single; const Axis: TVector3s): TQuaternion; overload;
procedure GetTransposedMatrix3s(out Result: TMatrix3s; const M: TMatrix3s); overload;
function GetTransposedMatrix3s(const M: TMatrix3s): TMatrix3s; overload;
procedure GetTransposedMatrix4s(out Result: TMatrix4s; const M: TMatrix4s); overload;
function GetTransposedMatrix4s(const M: TMatrix4s): TMatrix4s; overload;
procedure GetVector2s(out Result: TVector2s; const X, Y: Single); overload;
function GetVector2s(const X, Y: Single): TVector2s; overload;
function GetVector3s(const X, Y, Z: Single): TVector3s; overload;
procedure GetVector3s(out Result: TVector3s; const X, Y, Z: Single); overload;
procedure GetVector4s(out Result: TVector4s; const X, Y, Z, W: Single); overload;
function GetVector4s(const X, Y, Z, W: Single): TVector4s; overload;
procedure GetVectorRotateQuat(out Result: TQuaternion; const OldDir, NewDir: TVector3s);
function InvertAffineMatrix4s(const M: TMatrix4s): TMatrix4s;
function InvertMatrix3s(const M: TMatrix3s): TMatrix3s;
function InvertMatrix4s(const M: TMatrix4s): TMatrix4s;
procedure InvertRotTransMatrix(out Result: TMatrix4s; const M: TMatrix4s); overload;
function InvertRotTransMatrix(const M: TMatrix4s): TMatrix4s; overload;
function IsMatrixAffine(const M: TMatrix4s): Boolean;
function IsPointsSameSide(const Origin, Dir, P1, P2: TVector3s): Boolean;
function MatDet(const M: TMatrix4s): Single;
function Matrix3sByQuat(const Quat: TQuaternion): TMatrix3s; overload;
procedure Matrix3sByQuat(var Result: TMatrix3s; const Quat: TQuaternion); overload;
procedure Matrix4sByQuat(var Result: TMatrix4s; const Quat: TQuaternion); overload;
function Matrix4sByQuat(const Quat: TQuaternion): TMatrix4s; overload;
procedure MulMatrix3s(out Result: TMatrix3s; const M1, M2: TMatrix3s); overload;
function MulMatrix3s(const M1, M2: TMatrix3s): TMatrix3s; overload;
procedure MulMatrix4s(out Result: TMatrix4s; const M1, M2: TMatrix4s); overload;
function MulMatrix4s(const M1, M2: TMatrix4s): TMatrix4s; overload;
procedure MulQuaternion(out Result: TQuaternion; const Quat1, Quat2: TQuaternion); overload;
function MulQuaternion(const Quat1, Quat2: TQuaternion): TQuaternion; overload;
procedure NormalizeAngle(var Angle: Single);
procedure NormalizePlane(var APlane: TPlane);
function NormalizeQuaternion(const Quat: TQuaternion): TQuaternion; overload;
procedure NormalizeQuaternion(out Result: TQuaternion; const Quat: TQuaternion); overload;
function NormalizeVector3s(const V: TVector3s; Length: Single = 1): TVector3s; overload;
procedure NormalizeVector3s(out Result: TVector3s; const V: TVector3s; Length: Single = 1); overload;
function NormalizeVector4s(const V: TVector4s; Length: Single = 1): TVector4s;
procedure PlaneFromPointNormal(out Result: TPlane; const Point, Normal: TVector3s);
procedure ReflectionMatrix4s(out Result: TMatrix4s; const PlanePoint, PlaneNormal: TVector3s); overload;
function ReflectionMatrix4s(const PlanePoint, PlaneNormal: TVector3s): TMatrix4s; overload;
procedure ReflectVector3s(out Result: TVector3s; const V, N: TVector3s); overload;
function ReflectVector3s(const V, N: TVector3s): TVector3s; overload;
procedure ScaleMatrix4s(out Result: TMatrix4s; const X, Y, Z: Single); overload;
function ScaleMatrix4s(const X, Y, Z: Single): TMatrix4s; overload;
procedure ScaleVector3s(out Result: TVector3s; const V: TVector3s; const Factor: Single); overload;
function ScaleVector3s(const V: TVector3s; const Factor: Single): TVector3s; overload;
function ScaleVector4s(const V: TVector4s; const Factor: Single): TVector4s; overload;
procedure ScaleVector4s(out Result: TVector4s; const V: TVector4s; const Factor: Single); overload;
function SqrMagnitude(const V: TVector3s): Single;
function SubVector3s(const V1, V2: TVector3s): TVector3s; overload;
procedure SubVector3s(out Result: TVector3s; const V1, V2: TVector3s); overload;
procedure SubVector4s(out Result: TVector4s; const V1, V2: TVector4s); overload;
function SubVector4s(const V1, V2: TVector4s): TVector4s; overload;
procedure Transform3Vector3s(out Result: TVector3s; const M: TMatrix3s; const V: TVector3s); overload;
function Transform3Vector3s(const M: TMatrix3s; const V: TVector3s): TVector3s; overload;
function Transform3Vector3sTransp(const M: TMatrix3s; const V: TVector3s): TVector3s; overload;
procedure Transform4Vector33s(out Result: TVector3s; const M: TMatrix4s; const V: TVector3s); overload;
function Transform4Vector33s(const M: TMatrix4s; const V: TVector3s): TVector3s; overload;
procedure Transform4Vector3s(out Result: TVector4s; const M: TMatrix4s; const V: TVector3s); overload;
function Transform4Vector3s(const M: TMatrix4s; const V: TVector3s): TVector4s; overload;
function Transform4Vector4s(const M: TMatrix4s; const V: TVector4s): TVector4s; overload;
procedure Transform4Vector4s(out Result: TVector4s; const M: TMatrix4s; const V: TVector4s); overload;
procedure TranslationMatrix4s(out Result: TMatrix4s; const X, Y, Z: Single); overload;
function TranslationMatrix4s(const X, Y, Z: Single): TMatrix4s; overload;
procedure TranspMulMatrix3s(out Result: TMatrix3s; const M1, M2: TMatrix3s); overload;
function TranspMulMatrix3s(const M1, M2: TMatrix3s): TMatrix3s; overload;
procedure TranspMulMatrix4s(out Result: TMatrix4s; const M1, M2: TMatrix4s); overload;
function TranspMulMatrix4s(const M1, M2: TMatrix4s): TMatrix4s; overload;
procedure TransposeMatrix3s(var M: TMatrix3s);
procedure TransposeMatrix4s(var M: TMatrix4s);
function Vec2s(const X, Y: Single): TVector2s;
function Vec3s(const X, Y, Z: Single): TVector3s;
function Vec4s(const X, Y, Z, W: Single): TVector4s; overload;
procedure XRotationMatrix3s(out Result: TMatrix3s; const Angle: Single); overload;
function XRotationMatrix3s(const Angle: Single): TMatrix3s; overload;
procedure XRotationMatrix4s(out Result: TMatrix4s; const Angle: Single); overload;
function XRotationMatrix4s(const Angle: Single): TMatrix4s; overload;
procedure YRotationMatrix3s(out Result: TMatrix3s; const Angle: Single); overload;
function YRotationMatrix3s(const Angle: Single): TMatrix3s; overload;
procedure YRotationMatrix4s(out Result: TMatrix4s; const Angle: Single); overload;
function YRotationMatrix4s(const Angle: Single): TMatrix4s; overload;
function ZRotationMatrix3s(const Angle: Single): TMatrix3s; overload;
procedure ZRotationMatrix3s(out Result: TMatrix3s; const Angle: Single); overload;
function ZRotationMatrix4s(const Angle: Single): TMatrix4s; overload;
procedure ZRotationMatrix4s(out Result: TMatrix4s; const Angle: Single); overload;

Description

function AddVector3s(const V1, V2: TVector3s): TVector3s; overload;

 

procedure AddVector3s(out Result: TVector3s; const V1, V2: TVector3s); overload;

 

procedure AddVector4s(out Result: TVector4s; const V1, V2: TVector4s); overload;

 

function AddVector4s(const V1, V2: TVector4s): TVector4s; overload;

 

function ArcTan2(const Y, X: Extended): Extended;

Arctangent

function CartesianProductVector3s(const V1, V2: TVector3s): TVector3s;

Vectors cartesian product

procedure CrossProductVector3s(out Result: TVector3s; const V1, V2: TVector3s); overload;

Vectors cross product

function CrossProductVector3s(const V1, V2: TVector3s): TVector3s; overload;

Vectors cross product

function CutMatrix3s(const M: TMatrix4s): TMatrix3s; overload;

Cuts 3x3 matrix from the specified 4x4 matrix

procedure CutMatrix3s(out Result: TMatrix3s; const M: TMatrix4s); overload;

Cuts 3x3 matrix from the specified 4x4 matrix

function DotProductVector3s(const V1, V2: TVector3s): Single;

Vectors dot product

function EqualsMatrix3s(const M1, M2: TMatrix3s): Boolean;

Returns True if M1 and M2 are equal

function EqualsMatrix4s(const M1, M2: TMatrix4s): Boolean;

Returns True if M1 and M2 are equal

function EqualsQuaternions(Q1, Q2: TQuaternion): Boolean;

Returns True if the given quaternions are equal

function EqualsVector3s(const V1, V2: TVector3s): Boolean;

Returns True if V1 and V2 are equal

function EqualsVector4s(const V1, V2: TVector4s): Boolean;

Returns True if V1 and V2 are equal

procedure ExpandBBox(var BoundingBox: TBoundingBox; const X, Y, Z: Single); overload;

Expands the bounding box to fit the given coordinates

procedure ExpandBBox(var BoundingBox: TBoundingBox; const Point: TVector3s); overload;

Expands the bounding box to fit the given point

function ExpandMatrix3s(const M: TMatrix3s): TMatrix4s; overload;

Expands a 3x3 matrix to 4x3 matrix by filling new components with 0 except _44 which filled with 1

function ExpandVector3s(const V: Tvector3s): TVector4s; overload;

Expands a 3-dimensional vector to 4-dimensional by filling w-component with 1

procedure ExpandVector3s(out Result: TVector4s; const V: Tvector3s); overload;

Expands a 3-dimensional vector to 4-dimensional by filling w-component by 1

procedure FastNormalizeVector3s(var Result: TVector3s; Length: Single = 1); overload;

Forces the vector V's length to the specified length using fast InvSqrt

procedure FastNormalizeVector4s(var Result: TVector4s; Length: Single = 1);

Forces the vector V's length to the specified length using fast InvSqrt

function GetMagnitudeApprox(const V: TVector3s): Single;

Returns approximated magnitude of V (need testing)

function GetPerpendicular3s(const V: TVector3s): TVector3s; overload;

Retuns a vector which is orthogonal to V

procedure GetPerpendicular3s(out Result: TVector3s; const V: TVector3s); overload;

Retuns a vector which is orthogonal to V

function GetPlane(A, B, C, D: Single): TPlane;

Returns a plane by the given equation coeficients (AX + BY + CZ + D = 0)

function GetPlaneFromPointNormal(const Point, Normal: TVector3s): TPlane;

Returns a plane by the specified point and normal

procedure GetQuaternion(out Result: TQuaternion; const Angle: Single; const Axis: TVector3s); overload;

Retuns a normalized quaternion by the specified axis and angle

function GetQuaternion(const Angle: Single; const Axis: TVector3s): TQuaternion; overload;

Retuns a normalized quaternion by the specified axis and angle

procedure GetTransposedMatrix3s(out Result: TMatrix3s; const M: TMatrix3s); overload;

Returns transposed matrix

function GetTransposedMatrix3s(const M: TMatrix3s): TMatrix3s; overload;

Returns transposed matrix

procedure GetTransposedMatrix4s(out Result: TMatrix4s; const M: TMatrix4s); overload;

Returns transposed matrix

function GetTransposedMatrix4s(const M: TMatrix4s): TMatrix4s; overload;

Returns transposed matrix

procedure GetVector2s(out Result: TVector2s; const X, Y: Single); overload;

Returns a 2-dimensional vector with the specified components

function GetVector2s(const X, Y: Single): TVector2s; overload;

Returns a 2-dimensional vector with the specified components

function GetVector3s(const X, Y, Z: Single): TVector3s; overload;

Returns a 3-dimensional vector with the specified components

procedure GetVector3s(out Result: TVector3s; const X, Y, Z: Single); overload;

Returns a 3-dimensional vector with the specified components

procedure GetVector4s(out Result: TVector4s; const X, Y, Z, W: Single); overload;

Returns a 4-dimensional vector with the specified components

function GetVector4s(const X, Y, Z, W: Single): TVector4s; overload;

Returns a 4-dimensional vector with the specified components

procedure GetVectorRotateQuat(out Result: TQuaternion; const OldDir, NewDir: TVector3s);

Returns a quaternion which specifies a rotation from OldDir to NewDir.
OldDir to NewDir should be normalized (needs testing)

function InvertAffineMatrix4s(const M: TMatrix4s): TMatrix4s;

Returns inversion of a matrix which contains affine transfomations (rotations, translations and scaling). Faster then InvertMatrix4s

function InvertMatrix3s(const M: TMatrix3s): TMatrix3s;

3x3 matrix inversion (current dummy implementation: transpose)

function InvertMatrix4s(const M: TMatrix4s): TMatrix4s;

Returns inversion of the specified matrix

procedure InvertRotTransMatrix(out Result: TMatrix4s; const M: TMatrix4s); overload;

Returns inversion of a matrix which contains only rotations and translations. Faster then InvertAffineMatrix4s

function InvertRotTransMatrix(const M: TMatrix4s): TMatrix4s; overload;

Returns inversion of a matrix which contains only rotations and translations. Faster then InvertAffineMatrix4s

function IsMatrixAffine(const M: TMatrix4s): Boolean;

Returns True if the specified matrix is affine (last column is 0, 0, 0, 1)

function IsPointsSameSide(const Origin, Dir, P1, P2: TVector3s): Boolean;

Returns True if both P1 and P2 points are at the same side of the ray

function MatDet(const M: TMatrix4s): Single;

Returns determinant of the specified matrix

function Matrix3sByQuat(const Quat: TQuaternion): TMatrix3s; overload;

Returns a 3x3 rotation matrix which specifies the same rotation as Quat

procedure Matrix3sByQuat(var Result: TMatrix3s; const Quat: TQuaternion); overload;

Fills Result with a 3x3 rotation matrix which specifies the same rotation as Quat.

procedure Matrix4sByQuat(var Result: TMatrix4s; const Quat: TQuaternion); overload;

Fills Result with a 4x4 rotation matrix which specifies the same rotation as Quat.

function Matrix4sByQuat(const Quat: TQuaternion): TMatrix4s; overload;

Returns a 4x4 rotation matrix which specifies the same rotation as Quat

procedure MulMatrix3s(out Result: TMatrix3s; const M1, M2: TMatrix3s); overload;

Matrix multiplication

function MulMatrix3s(const M1, M2: TMatrix3s): TMatrix3s; overload;

Matrix multiplication

procedure MulMatrix4s(out Result: TMatrix4s; const M1, M2: TMatrix4s); overload;

Matrix multiplication

function MulMatrix4s(const M1, M2: TMatrix4s): TMatrix4s; overload;

Matrix multiplication

procedure MulQuaternion(out Result: TQuaternion; const Quat1, Quat2: TQuaternion); overload;

Returns product of Quat1 and Quat2

function MulQuaternion(const Quat1, Quat2: TQuaternion): TQuaternion; overload;

Returns product of Quat1 and Quat2

procedure NormalizeAngle(var Angle: Single);

Forces Angle to [0..2*pi] range

procedure NormalizePlane(var APlane: TPlane);

Normalizes the plane equation coefficients

function NormalizeQuaternion(const Quat: TQuaternion): TQuaternion; overload;

Retuns the normalized version of Quat

procedure NormalizeQuaternion(out Result: TQuaternion; const Quat: TQuaternion); overload;

Retuns the normalized version of Quat

function NormalizeVector3s(const V: TVector3s; Length: Single = 1): TVector3s; overload;

Forces the vector V's length to the specified length

procedure NormalizeVector3s(out Result: TVector3s; const V: TVector3s; Length: Single = 1); overload;

Forces then vector V's length to the specified length

function NormalizeVector4s(const V: TVector4s; Length: Single = 1): TVector4s;

Forces the vector V's length to the specified length

procedure PlaneFromPointNormal(out Result: TPlane; const Point, Normal: TVector3s);

Returns a plane by the specified point and normal

procedure ReflectionMatrix4s(out Result: TMatrix4s; const PlanePoint, PlaneNormal: TVector3s); overload;

Returns matrix containing reflection by the specified plane transformation

function ReflectionMatrix4s(const PlanePoint, PlaneNormal: TVector3s): TMatrix4s; overload;

Returns matrix containing reflection by the specified plane transformation

procedure ReflectVector3s(out Result: TVector3s; const V, N: TVector3s); overload;

Returns V reflected from surface with the normal N

function ReflectVector3s(const V, N: TVector3s): TVector3s; overload;

Returns V reflected from surface with the normal N

procedure ScaleMatrix4s(out Result: TMatrix4s; const X, Y, Z: Single); overload;

Returns scaling matrix

function ScaleMatrix4s(const X, Y, Z: Single): TMatrix4s; overload;

Returns scaling matrix

procedure ScaleVector3s(out Result: TVector3s; const V: TVector3s; const Factor: Single); overload;

Scales the vector V by the specified factor and returns it in Result

function ScaleVector3s(const V: TVector3s; const Factor: Single): TVector3s; overload;

Scales the vector V by the specified factor

function ScaleVector4s(const V: TVector4s; const Factor: Single): TVector4s; overload;

Scales the vector V by the specified factor

procedure ScaleVector4s(out Result: TVector4s; const V: TVector4s; const Factor: Single); overload;

Scales the vector V by the specified factor and returns it in Result

function SqrMagnitude(const V: TVector3s): Single;

Returns the squared magnitude of V

function SubVector3s(const V1, V2: TVector3s): TVector3s; overload;

 

procedure SubVector3s(out Result: TVector3s; const V1, V2: TVector3s); overload;

 

procedure SubVector4s(out Result: TVector4s; const V1, V2: TVector4s); overload;

 

function SubVector4s(const V1, V2: TVector4s): TVector4s; overload;

 

procedure Transform3Vector3s(out Result: TVector3s; const M: TMatrix3s; const V: TVector3s); overload;

Returns 3-dimensional vector V transformed by matrix M

function Transform3Vector3s(const M: TMatrix3s; const V: TVector3s): TVector3s; overload;

Returns 3-dimensional vector V transformed by matrix M

function Transform3Vector3sTransp(const M: TMatrix3s; const V: TVector3s): TVector3s; overload;

Returns 3-dimensional vector V transformed by transposed matrix M

procedure Transform4Vector33s(out Result: TVector3s; const M: TMatrix4s; const V: TVector3s); overload;

Returns 3-dimensional vector V transformed by matrix M

function Transform4Vector33s(const M: TMatrix4s; const V: TVector3s): TVector3s; overload;

Returns 3-dimensional vector V transformed by matrix M

procedure Transform4Vector3s(out Result: TVector4s; const M: TMatrix4s; const V: TVector3s); overload;

Returns expanded 3-dimensional vector V transformed by matrix M

function Transform4Vector3s(const M: TMatrix4s; const V: TVector3s): TVector4s; overload;

Returns expanded 3-dimensional vector V transformed by matrix M

function Transform4Vector4s(const M: TMatrix4s; const V: TVector4s): TVector4s; overload;

Returns 4-dimensional vector V transformed by matrix M

procedure Transform4Vector4s(out Result: TVector4s; const M: TMatrix4s; const V: TVector4s); overload;

Returns 4-dimensional vector V transformed by matrix M

procedure TranslationMatrix4s(out Result: TMatrix4s; const X, Y, Z: Single); overload;

Returns translation matrix

function TranslationMatrix4s(const X, Y, Z: Single): TMatrix4s; overload;

Returns translation matrix

procedure TranspMulMatrix3s(out Result: TMatrix3s; const M1, M2: TMatrix3s); overload;

Matrix multiplication and transpose

function TranspMulMatrix3s(const M1, M2: TMatrix3s): TMatrix3s; overload;

Matrix multiplication and transpose

procedure TranspMulMatrix4s(out Result: TMatrix4s; const M1, M2: TMatrix4s); overload;

Matrix multiplication and transpose

function TranspMulMatrix4s(const M1, M2: TMatrix4s): TMatrix4s; overload;

Matrix multiplication and transpose

procedure TransposeMatrix3s(var M: TMatrix3s);

Returns transposed matrix

procedure TransposeMatrix4s(var M: TMatrix4s);

Returns transposed matrix

function Vec2s(const X, Y: Single): TVector2s;

Returns a 2-dimensional vector with the specified components

function Vec3s(const X, Y, Z: Single): TVector3s;

Returns a 3-dimensional vector with the specified components

function Vec4s(const X, Y, Z, W: Single): TVector4s; overload;

Returns a 4-dimensional vector with the specified components

procedure XRotationMatrix3s(out Result: TMatrix3s; const Angle: Single); overload;

Returns rotation over X-axis matrix

function XRotationMatrix3s(const Angle: Single): TMatrix3s; overload;

Returns rotation over X-axis matrix

procedure XRotationMatrix4s(out Result: TMatrix4s; const Angle: Single); overload;

Returns rotation over X-axis matrix

function XRotationMatrix4s(const Angle: Single): TMatrix4s; overload;

Returns rotation over X-axis matrix

procedure YRotationMatrix3s(out Result: TMatrix3s; const Angle: Single); overload;

Returns rotation over Y-axis matrix

function YRotationMatrix3s(const Angle: Single): TMatrix3s; overload;

Returns rotation over Y-axis matrix

procedure YRotationMatrix4s(out Result: TMatrix4s; const Angle: Single); overload;

Returns rotation over Y-axis matrix

function YRotationMatrix4s(const Angle: Single): TMatrix4s; overload;

Returns rotation over Y-axis matrix

function ZRotationMatrix3s(const Angle: Single): TMatrix3s; overload;

Returns rotation over Z-axis matrix

procedure ZRotationMatrix3s(out Result: TMatrix3s; const Angle: Single); overload;

Returns rotation over Z-axis matrix

function ZRotationMatrix4s(const Angle: Single): TMatrix4s; overload;

Returns rotation over Z-axis matrix

procedure ZRotationMatrix4s(out Result: TMatrix4s; const Angle: Single); overload;

Returns rotation over Z-axis matrix

Types

Overview

PPlane = ^TPlane;
TBoundingBox = record P1, P2: TVector3s; end;
TMatrix3s = packed record case Integer of 0: (_11, _12, _13: Single; _21, _22, _23: Single; _31, _32, _33: Single); 1: (M: array [0..2, 0..2] of Single); 2: (ViewRight, ViewUp, ViewForward: TVector3s); 3: (A: array[0..8] of Single); 4: (Rows: array[0..2] of TVector3s); end;
TMatrix4s = packed record case Integer of 0: (_11, _12, _13, _14: Single; _21, _22, _23, _24: Single; _31, _32, _33, _34: Single; _41, _42, _43, _44: Single); 1: (M: array [0..3, 0..3] of Single); 2: (ViewRight: TVector3s; _dummy1: Single; ViewUp: TVector3s; _dummy2: Single; ViewForward: TVector3s; _dummy3: Single; ViewTranslate: TVector3s); 3: (ViewRight4s, ViewUp4s, ViewForward4s, ViewTranslate4s: TVector4s); 4: (A: array[0..15] of Single); 5: (Rows: array[0..3] of TVector4s); end;
TPlane = packed record case Integer of 0: (A, B, C, D: Single); 1: (Normal: TVector3s; Distance: Single); 2: (V: TVector4s); end;
TQuaternion = array[0..3] of Single;

Description

PPlane = ^TPlane;

 

TBoundingBox = record P1, P2: TVector3s; end;

Axis-aligned (in model space) bounding box given by

TMatrix3s = packed record case Integer of 0: (_11, _12, _13: Single; _21, _22, _23: Single; _31, _32, _33: Single); 1: (M: array [0..2, 0..2] of Single); 2: (ViewRight, ViewUp, ViewForward: TVector3s); 3: (A: array[0..8] of Single); 4: (Rows: array[0..2] of TVector3s); end;

3x3 single-precision floating point matrix

TMatrix4s = packed record case Integer of 0: (_11, _12, _13, _14: Single; _21, _22, _23, _24: Single; _31, _32, _33, _34: Single; _41, _42, _43, _44: Single); 1: (M: array [0..3, 0..3] of Single); 2: (ViewRight: TVector3s; _dummy1: Single; ViewUp: TVector3s; _dummy2: Single; ViewForward: TVector3s; _dummy3: Single; ViewTranslate: TVector3s); 3: (ViewRight4s, ViewUp4s, ViewForward4s, ViewTranslate4s: TVector4s); 4: (A: array[0..15] of Single); 5: (Rows: array[0..3] of TVector4s); end;

4x4 single-precision floating point matrix

TPlane = packed record case Integer of 0: (A, B, C, D: Single); 1: (Normal: TVector3s; Distance: Single); 2: (V: TVector4s); end;

Plane given by equation AX+BY+CZ+D = 0 or by normal and distance

TQuaternion = array[0..3] of Single;

Quaternion type. Used for specifying rotations

Constants

Overview

CosTabOffs = SinTableSize div 4;
EmptyBoundingBox : TBoundingBox = (P1: (X: 0; Y: 0; Z: 0); P2: (X: 0; Y: 0; Z: 0));
IdentityMatrix3s : TMatrix3s = (m: ((1, 0, 0), (0, 1, 0), (0, 0, 1)) );
IdentityMatrix4s : TMatrix4s = (m: ((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)));
SinTableSize = 512;
ZeroVector3s : TVector3s = (X: 0; Y: 0; Z: 0);
ZeroVector4s : TVector4s = (X: 0; Y: 0; Z: 0; W: 0);

Description

CosTabOffs = SinTableSize div 4;

Offset in sine table to compute cosines

EmptyBoundingBox : TBoundingBox = (P1: (X: 0; Y: 0; Z: 0); P2: (X: 0; Y: 0; Z: 0));

 

IdentityMatrix3s : TMatrix3s = (m: ((1, 0, 0), (0, 1, 0), (0, 0, 1)) );

 

IdentityMatrix4s : TMatrix4s = (m: ((1, 0, 0, 0), (0, 1, 0, 0), (0, 0, 1, 0), (0, 0, 0, 1)));

 

SinTableSize = 512;

Size of sine table. Must be power of 2

ZeroVector3s : TVector3s = (X: 0; Y: 0; Z: 0);

 

ZeroVector4s : TVector4s = (X: 0; Y: 0; Z: 0; W: 0);

 

Variables

Overview

SinTable: array[0..SinTableSize + CosTabOffs] of Single;

Description

SinTable: array[0..SinTableSize + CosTabOffs] of Single;

Sinus table

Last modified: Jan 6, 2010
Copyright (C) 2006-2010, casteng.com