Castle Game EngineIntroduction Units Class Hierarchy Classes, Interfaces, Objects and Records Types Variables Constants Functions and Procedures Identifiers
|
Record TGenericVector3
Unit
CastleVectorsInternalDouble
Declaration
type TGenericVector3 = record
Description
Vector of 3 floating-point values.
This is generic type (although not using "proper" Pascal generics for implementation reasons). In has two actual uses:
TVector3, a vector of 3 Single values (floats with single precision),
TVector3Double, a vector of 3 Double values (floats with double precision).
The actual type of TGenericScalar is Single or Double for (respectively) TVector3 or TVector3Double.
Overview
Internal Types
Fields
Methods
class operator + (const A, B: TGenericVector3): TGenericVector3; inline; |
class operator - (const A, B: TGenericVector3): TGenericVector3; inline; |
class operator - (const V: TGenericVector3): TGenericVector3; inline; |
class operator * (const V: TGenericVector3; const Scalar: TGenericScalar): TGenericVector3; inline; |
class operator * (const Scalar: TGenericScalar; const V: TGenericVector3): TGenericVector3; inline; |
class operator * (const V1, V2: TGenericVector3): TGenericVector3; inline; |
class operator / (const V: TGenericVector3; const Scalar: TGenericScalar): TGenericVector3; inline; |
procedure Init(const X, Y, Z: TGenericScalar); inline; |
function ToString: string; |
function ToRawString: string; |
function Normalize: TGenericVector3; inline; |
procedure NormalizeMe; inline; |
function Length: TGenericScalar; inline; |
function LengthSqr: TGenericScalar; inline; |
function AdjustToLength(const NewLength: TGenericScalar): TGenericVector3; inline; |
class function CrossProduct(const V1, V2: TGenericVector3): TGenericVector3; static; inline; |
class function DotProduct(const V1, V2: TGenericVector3): TGenericScalar; static; inline; |
function Abs: TGenericVector3; inline; |
function Min: TGenericScalar; |
function Max: TGenericScalar; |
function Average: TGenericScalar; inline; |
function IsZero: boolean; overload; inline; |
function IsZero(const Epsilon: TGenericScalar): boolean; overload; inline; |
function IsPerfectlyZero: boolean; inline; |
class function Equals(const V1, V2: TGenericVector3): boolean; overload; inline; static; |
class function Equals(const V1, V2: TGenericVector3; const Epsilon: TGenericScalar): boolean; overload; inline; static; |
class function PerfectlyEquals(const V1, V2: TGenericVector3): boolean; static; inline; |
function XY: TGenericVector2; inline; |
class function Lerp(const A: TGenericScalar; const V1, V2: TGenericVector3): TGenericVector3; static; inline; |
class function Zero: TGenericVector3; static; inline; |
Properties
Description
Internal Types
Fields
Methods
class operator * (const V1, V2: TGenericVector3): TGenericVector3; inline; |
Vector * vector makes a component-wise multiplication. This is consistent with GLSL and other vector APIs.
|
function ToString: string; |
|
function ToRawString: string; |
Convert to string using the most precise (not always easily readable by humans) float format. This may use the exponential (scientific) notation to represent the floating-point value, if needed.
This is suitable for storing the value in a file, with a best precision possible.
|
procedure NormalizeMe; inline; |
|
function LengthSqr: TGenericScalar; inline; |
Vector length squared. This is slightly faster than Length as it avoids calculating a square root along the way. (But, please remember to not optimize your code without a need. Optimize only parts that are proven bottlenecks, otherwise don't make the code less readable for the sake of speed.)
|
function AdjustToLength(const NewLength: TGenericScalar): TGenericVector3; inline; |
Calculate a new vector scaled so that it has length equal to NewLength. NewLength may be negative, in which case we'll negate the vector and then adjust it's length to Abs(NewLength).
|
class function CrossProduct(const V1, V2: TGenericVector3): TGenericVector3; static; inline; |
Vector cross product. See http://en.wikipedia.org/wiki/Cross_product .
Result is a vector orthogonal to both given vectors. Generally there are two such vectors, this method returns the one following right-hand rule. More precisely, V1, V2 and Product(V1, V2) are in the same relation as basic X, Y, Z axes. Reverse the order of arguments to get negated result.
If you use this to calculate a normal vector of a triangle (P0, P1, P2): note that VectorProduct(P1 - P0, P1 - P2) points out from CCW triangle side in right-handed coordinate system.
When V1 and V2 are parallel (that is, when V1 = V2 multiplied by some scalar), and this includes the case when one of them is zero, then result is a zero vector.
|
function Average: TGenericScalar; inline; |
Average from all components.
|
function IsZero: boolean; overload; inline; |
Are all components equal to zero (within some epsilon margin).
|
function IsZero(const Epsilon: TGenericScalar): boolean; overload; inline; |
Are all components equal to zero (within Epsilon margin).
|
function IsPerfectlyZero: boolean; inline; |
|
class function Equals(const V1, V2: TGenericVector3): boolean; overload; inline; static; |
Compare two vectors, with epsilon to tolerate slightly different floats.
|
class function PerfectlyEquals(const V1, V2: TGenericVector3): boolean; static; inline; |
Compare two vectors using exact comparison (like the "=" operator to compare floats).
|
Properties
property X: TGenericScalar index 0 read GetItemsInt write SetItemsInt; |
|
property Y: TGenericScalar index 1 read GetItemsInt write SetItemsInt; |
|
property Z: TGenericScalar index 2 read GetItemsInt write SetItemsInt; |
|
Generated by PasDoc 0.15.0.
|