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; |
function AddVector4s(const V1, V2: TVector4s): TVector4s; overload; |
procedure AddVector4s(out Result: TVector4s; const V1, V2: 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; |
function ExpandMatrix3s(const M: TMatrix3s): TMatrix4s; overload; |
procedure ExpandVector3s(out Result: TVector4s; const V: Tvector3s); overload; |
function ExpandVector3s(const V: Tvector3s): TVector4s; 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; |
function GetVector2s(const X, Y: Single): TVector2s; overload; |
procedure GetVector2s(out Result: TVector2s; const X, Y: Single); overload; |
function GetVector3s(const X, Y, Z: Single): TVector3s; overload; |
procedure GetVector3s(out Result: TVector3s; const X, Y, Z: Single); overload; |
function GetVector4s(const X, Y, Z, W: Single): TVector4s; overload; |
procedure GetVector4s(out Result: TVector4s; const X, Y, Z, W: Single); overload; |
procedure GetVectorRotateQuat(out Result: TQuaternion; const OldDir, NewDir: TVector3s); |
function InvertAffineMatrix4s(const M: TMatrix4s): TMatrix4s; |
function InvertMatrix3s(const M: TMatrix3s): TMatrix3s; |
function InvertMatrix4s(M: TMatrix4s): TMatrix4s; |
function InvertRotTransMatrix(const M: TMatrix4s): TMatrix4s; overload; |
procedure InvertRotTransMatrix(out Result: TMatrix4s; const M: 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; |
function MulMatrix3s(const M1, M2: TMatrix3s): TMatrix3s; overload; |
procedure MulMatrix3s(out Result: TMatrix3s; const M1, M2: 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); |
procedure NormalizeQuaternion(out Result: TQuaternion; const Quat: TQuaternion); overload; |
function NormalizeQuaternion(const Quat: TQuaternion): 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; |
function ReflectVector3s(const V, N: TVector3s): TVector3s; overload; |
procedure ReflectVector3s(out Result: TVector3s; const V, N: 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; |
procedure SubVector3s(out Result: TVector3s; const V1, V2: TVector3s); overload; |
function SubVector3s(const V1, V2: TVector3s): TVector3s; overload; |
function SubVector4s(const V1, V2: TVector4s): TVector4s; overload; |
procedure SubVector4s(out Result: TVector4s; const V1, V2: TVector4s); overload; |
function Transform3Vector3s(const M: TMatrix3s; const V: TVector3s): TVector3s; overload; |
procedure Transform3Vector3s(out Result: TVector3s; const M: TMatrix3s; const V: TVector3s); overload; |
function Transform3Vector3sTransp(const M: TMatrix3s; const V: TVector3s): TVector3s; overload; |
function Transform4Vector33s(const M: TMatrix4s; const V: TVector3s): TVector3s; overload; |
procedure Transform4Vector33s(out Result: TVector3s; const M: TMatrix4s; const V: TVector3s); overload; |
function Transform4Vector3s(const M: TMatrix4s; const V: TVector3s): TVector4s; overload; |
procedure Transform4Vector3s(out Result: TVector4s; const M: TMatrix4s; const V: TVector3s); overload; |
procedure Transform4Vector4s(out Result: TVector4s; const M: TMatrix4s; const V: TVector4s); overload; |
function Transform4Vector4s(const M: TMatrix4s; const V: TVector4s): TVector4s; overload; |
function TranslationMatrix4s(const X, Y, Z: Single): TMatrix4s; overload; |
procedure TranslationMatrix4s(out Result: TMatrix4s; const X, Y, Z: Single); overload; |
function TranspMulMatrix3s(const M1, M2: TMatrix3s): TMatrix3s; overload; |
procedure TranspMulMatrix3s(out Result: TMatrix3s; const M1, M2: TMatrix3s); overload; |
function TranspMulMatrix4s(const M1, M2: TMatrix4s): TMatrix4s; overload; |
procedure TranspMulMatrix4s(out Result: TMatrix4s; const M1, M2: 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; |
function XRotationMatrix4s(const Angle: Single): TMatrix4s; overload; |
procedure XRotationMatrix4s(out Result: TMatrix4s; const Angle: Single); overload; |
function YRotationMatrix3s(const Angle: Single): TMatrix3s; overload; |
procedure YRotationMatrix3s(out Result: TMatrix3s; const Angle: Single); 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 SphereOOBBColDet(M1, M2: TMatrix3s; P1, P2: TVector3s; const Sphere, OOBB: TBoundingVolume; CoordStep: Integer): Boolean; // Пересечение сферы и бокса function OOBBOOBBColDet(M1, M2: TMatrix3s; P1, P2: TVector3s; const OOBB1, OOBB2: TBoundingVolume): Boolean; // Пересечение äвух боксов function OOBBOOBBColDet2D(M1, M2: TMatrix3s; P1, P2: TVector3s; const OOBB1, OOBB2: TBoundingVolume): Boolean; // ToFix: Add scale support function VolumeColDet(const Volume1, Volume2: TBoundingVolumes): TCollisionResult; // Пересечение äвух наборов объемов function VolumeColTest(const Volume1, Volume2: TBoundingVolumes): Boolean; // function VolumeColDet2D(const Volume1, Volume2: TBoundingVolumes): TCollisionResult; // ToFix: Take location in account function VolumeColTest2D(const Volume1, Volume2: TBoundingVolumes): Boolean; // function NewBoundingVolume(AVolumeKind: Cardinal; AOffset, ADimensions: TVector3s; ANext: PBoundingVolume = nil): PBoundingVolume; procedure DisposeBoundingVolumes(var Volumes: TBoundingVolumes);
Vectors cartesian product
Vectors cross product
Vectors cross product
Cuts 3x3 matrix from the specified 4x4 matrix
Cuts 3x3 matrix from the specified 4x4 matrix
Vectors dot product
Returns True if M1 and M2 are equal
Returns True if M1 and M2 are equal
Returns True if the given quaternions are equal
Returns True if V1 and V2 are equal
Returns True if V1 and V2 are equal
Expands a 3x3 matrix to 4x3 matrix by filling new components with 0 except _44 which filled with 1
Expands a 3-dimensional vector to 4-dimensional by filling w-component by 1
Expands a 3-dimensional vector to 4-dimensional by filling w-component with 1
Forces the vector V's length to the specified length using fast InvSqrt
Forces the vector V's length to the specified length using fast InvSqrt
Returns approximated magnitude of V (need testing)
Retuns a vector which is orthogonal to V
Retuns a vector which is orthogonal to V
Returns a plane by the given equation coeficients (AX + BY + CZ + D = 0)
Returns a plane by the specified point and normal
Retuns a normalized quaternion by the specified axis and angle
Retuns a normalized quaternion by the specified axis and angle
Returns transposed matrix
Returns transposed matrix
Returns transposed matrix
Returns transposed matrix
Returns a 2-dimensional vector with the specified components
Returns a 2-dimensional vector with the specified components
Returns a 3-dimensional vector with the specified components
Returns a 3-dimensional vector with the specified components
Returns a 4-dimensional vector with the specified components
Returns a 4-dimensional vector with the specified components
Returns a quaternion which specifies a rotation from OldDir to NewDir.
OldDir to NewDir should be normalized (needs testing)
Returns inversion of a matrix which contains affine transfomations (rotations, translations and scaling). Faster then InvertMatrix4s
3x3 matrix inversion (current dummy implementation: transpose)
Returns inversion of the specified matrix
Returns inversion of a matrix which contains only rotations and translations. Faster then InvertAffineMatrix4s
Returns inversion of a matrix which contains only rotations and translations. Faster then InvertAffineMatrix4s
Returns True if the specified matrix is affine (last column is 0, 0, 0, 1)
Returns True if both P1 and P2 points are at the same side of the ray
Returns determinant of the specified matrix
Returns a 3x3 rotation matrix which specifies the same rotation as Quat
Fills Result with a 3x3 rotation matrix which specifies the same rotation as Quat.
Fills Result with a 4x4 rotation matrix which specifies the same rotation as Quat.
Returns a 4x4 rotation matrix which specifies the same rotation as Quat
Matrix multiplication
Matrix multiplication
Matrix multiplication
Matrix multiplication
Returns product of Quat1 and Quat2
Returns product of Quat1 and Quat2
Forces Angle to [0..2*pi] range
Normalizes the plane equation coefficients
Retuns the normalized version of Quat
Retuns the normalized version of Quat
Forces the vector V's length to the specified length
Forces then vector V's length to the specified length
Forces the vector V's length to the specified length
Returns a plane by the specified point and normal
Returns matrix containing reflection by the specified plane transformation
Returns matrix containing reflection by the specified plane transformation
Returns V reflected from surface with the normal N
Returns V reflected from surface with the normal N
Returns scaling matrix
Returns scaling matrix
Scales the vector V by the specified factor and returns it in Result
Scales the vector V by the specified factor
Scales the vector V by the specified factor
Scales the vector V by the specified factor and returns it in Result
Returns the squared magnitude of V
Returns 3-dimensional vector V transformed by matrix M
Returns 3-dimensional vector V transformed by matrix M
Returns 3-dimensional vector V transformed by transposed matrix M
Returns 3-dimensional vector V transformed by matrix M
Returns 3-dimensional vector V transformed by matrix M
Returns expanded 3-dimensional vector V transformed by matrix M
Returns expanded 3-dimensional vector V transformed by matrix M
Returns 4-dimensional vector V transformed by matrix M
Returns 4-dimensional vector V transformed by matrix M
Returns translation matrix
Returns translation matrix
Matrix multiplication and transpose
Matrix multiplication and transpose
Matrix multiplication and transpose
Matrix multiplication and transpose
Returns transposed matrix
Returns transposed matrix
Returns a 2-dimensional vector with the specified components
Returns a 3-dimensional vector with the specified components
Returns a 4-dimensional vector with the specified components
Returns rotation over X-axis matrix
Returns rotation over X-axis matrix
Returns rotation over X-axis matrix
Returns rotation over X-axis matrix
Returns rotation over Y-axis matrix
Returns rotation over Y-axis matrix
Returns rotation over Y-axis matrix
Returns rotation over Y-axis matrix
Returns rotation over Z-axis matrix
Returns rotation over Z-axis matrix
Returns rotation over Z-axis matrix
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); 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
Axis-aligned (in model space) bounding box given by
3x3 single-precision floating point matrix
4x4 single-precision floating point matrix
Plane given by equation AX+BY+CZ+D = 0 or by normal and distance
Quaternion type. Used for specifying rotations
Constants
Overview
CosTabOffs = SinTableSize div 4; |
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
Offset in sine table to compute cosines
Size of sine table. Must be power of 2
Variables
Overview
Description
Sinus table
|
Last modified: 4 Jul, 2008
Copyright (C) 2006-2008, casteng.com
|