Jolt Physics
A multi core friendly Game Physics Engine
|
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix. More...
#include <Mat44.h>
Public Types | |
using | Type = Vec4::Type |
using | ArgType = Mat44Arg |
Public Member Functions | |
Mat44 ()=default | |
Constructor. | |
JPH_INLINE | Mat44 (Vec4Arg inC1, Vec4Arg inC2, Vec4Arg inC3, Vec4Arg inC4) |
JPH_INLINE | Mat44 (Vec4Arg inC1, Vec4Arg inC2, Vec4Arg inC3, Vec3Arg inC4) |
Mat44 (const Mat44 &inM2)=default | |
Mat44 & | operator= (const Mat44 &inM2)=default |
JPH_INLINE | Mat44 (Type inC1, Type inC2, Type inC3, Type inC4) |
JPH_INLINE float | operator() (uint inRow, uint inColumn) const |
Get float component by element index. | |
JPH_INLINE float & | operator() (uint inRow, uint inColumn) |
JPH_INLINE bool | operator== (Mat44Arg inM2) const |
Comparsion. | |
JPH_INLINE bool | operator!= (Mat44Arg inM2) const |
JPH_INLINE bool | IsClose (Mat44Arg inM2, float inMaxDistSq=1.0e-12f) const |
Test if two matrices are close. | |
JPH_INLINE Mat44 | operator* (Mat44Arg inM) const |
Multiply matrix by matrix. | |
JPH_INLINE Vec3 | operator* (Vec3Arg inV) const |
Multiply vector by matrix. | |
JPH_INLINE Vec4 | operator* (Vec4Arg inV) const |
JPH_INLINE Vec3 | Multiply3x3 (Vec3Arg inV) const |
Multiply vector by only 3x3 part of the matrix. | |
JPH_INLINE Vec3 | Multiply3x3Transposed (Vec3Arg inV) const |
Multiply vector by only 3x3 part of the transpose of the matrix ( \(result = this^T \: inV\)) | |
JPH_INLINE Mat44 | Multiply3x3 (Mat44Arg inM) const |
Multiply 3x3 matrix by 3x3 matrix. | |
JPH_INLINE Mat44 | Multiply3x3LeftTransposed (Mat44Arg inM) const |
Multiply transpose of 3x3 matrix by 3x3 matrix ( \(result = this^T \: inM\)) | |
JPH_INLINE Mat44 | Multiply3x3RightTransposed (Mat44Arg inM) const |
Multiply 3x3 matrix by the transpose of a 3x3 matrix ( \(result = this \: inM^T\)) | |
JPH_INLINE Mat44 | operator* (float inV) const |
Multiply matrix with float. | |
JPH_INLINE Mat44 & | operator*= (float inV) |
Multiply matrix with float. | |
JPH_INLINE Mat44 | operator+ (Mat44Arg inM) const |
Per element addition of matrix. | |
JPH_INLINE Mat44 | operator- () const |
Negate. | |
JPH_INLINE Mat44 | operator- (Mat44Arg inM) const |
Per element subtraction of matrix. | |
JPH_INLINE Mat44 & | operator+= (Mat44Arg inM) |
Per element addition of matrix. | |
JPH_INLINE Vec3 | GetAxisX () const |
Access to the columns. | |
JPH_INLINE void | SetAxisX (Vec3Arg inV) |
JPH_INLINE Vec3 | GetAxisY () const |
JPH_INLINE void | SetAxisY (Vec3Arg inV) |
JPH_INLINE Vec3 | GetAxisZ () const |
JPH_INLINE void | SetAxisZ (Vec3Arg inV) |
JPH_INLINE Vec3 | GetTranslation () const |
JPH_INLINE void | SetTranslation (Vec3Arg inV) |
JPH_INLINE Vec3 | GetDiagonal3 () const |
JPH_INLINE void | SetDiagonal3 (Vec3Arg inV) |
JPH_INLINE Vec4 | GetDiagonal4 () const |
JPH_INLINE void | SetDiagonal4 (Vec4Arg inV) |
JPH_INLINE Vec3 | GetColumn3 (uint inCol) const |
JPH_INLINE void | SetColumn3 (uint inCol, Vec3Arg inV) |
JPH_INLINE Vec4 | GetColumn4 (uint inCol) const |
JPH_INLINE void | SetColumn4 (uint inCol, Vec4Arg inV) |
JPH_INLINE void | StoreFloat4x4 (Float4 *outV) const |
Store matrix to memory. | |
JPH_INLINE Mat44 | Transposed () const |
Transpose matrix. | |
JPH_INLINE Mat44 | Transposed3x3 () const |
Transpose 3x3 subpart of matrix. | |
JPH_INLINE Mat44 | Inversed () const |
Inverse 4x4 matrix. | |
JPH_INLINE Mat44 | InversedRotationTranslation () const |
Inverse 4x4 matrix when it only contains rotation and translation. | |
JPH_INLINE float | GetDeterminant3x3 () const |
Get the determinant of a 3x3 matrix. | |
JPH_INLINE Mat44 | Adjointed3x3 () const |
Get the adjoint of a 3x3 matrix. | |
JPH_INLINE Mat44 | Inversed3x3 () const |
Inverse 3x3 matrix. | |
JPH_INLINE bool | SetInversed3x3 (Mat44Arg inM) |
*this = inM.Inversed3x3(), returns false if the matrix is singular in which case *this is unchanged | |
JPH_INLINE Mat44 | GetRotation () const |
Get rotation part only (note: retains the first 3 values from the bottom row) | |
JPH_INLINE Mat44 | GetRotationSafe () const |
Get rotation part only (note: also clears the bottom row) | |
JPH_INLINE void | SetRotation (Mat44Arg inRotation) |
Updates the rotation part of this matrix (the first 3 columns) | |
JPH_INLINE Quat | GetQuaternion () const |
Convert to quaternion. | |
JPH_INLINE Mat44 | GetDirectionPreservingMatrix () const |
Get matrix that transforms a direction with the same transform as this matrix (length is not preserved) | |
JPH_INLINE Mat44 | PreTranslated (Vec3Arg inTranslation) const |
Pre multiply by translation matrix: result = this * Mat44::sTranslation(inTranslation) | |
JPH_INLINE Mat44 | PostTranslated (Vec3Arg inTranslation) const |
Post multiply by translation matrix: result = Mat44::sTranslation(inTranslation) * this (i.e. add inTranslation to the 4-th column) | |
JPH_INLINE Mat44 | PreScaled (Vec3Arg inScale) const |
Scale a matrix: result = this * Mat44::sScale(inScale) | |
JPH_INLINE Mat44 | PostScaled (Vec3Arg inScale) const |
Scale a matrix: result = Mat44::sScale(inScale) * this. | |
JPH_INLINE Mat44 | Decompose (Vec3 &outScale) const |
JPH_INLINE Mat44 | ToMat44 () const |
In single precision mode just return the matrix itself. | |
Static Public Member Functions | |
static JPH_INLINE Mat44 | sZero () |
Zero matrix. | |
static JPH_INLINE Mat44 | sIdentity () |
Identity matrix. | |
static JPH_INLINE Mat44 | sNaN () |
Matrix filled with NaN's. | |
static JPH_INLINE Mat44 | sLoadFloat4x4 (const Float4 *inV) |
Load 16 floats from memory. | |
static JPH_INLINE Mat44 | sLoadFloat4x4Aligned (const Float4 *inV) |
Load 16 floats from memory, 16 bytes aligned. | |
static JPH_INLINE Mat44 | sRotationX (float inX) |
Rotate around X, Y or Z axis (angle in radians) | |
static JPH_INLINE Mat44 | sRotationY (float inY) |
static JPH_INLINE Mat44 | sRotationZ (float inZ) |
static JPH_INLINE Mat44 | sRotation (Vec3Arg inAxis, float inAngle) |
Rotate around arbitrary axis. | |
static JPH_INLINE Mat44 | sRotation (QuatArg inQuat) |
Rotate from quaternion. | |
static JPH_INLINE Mat44 | sTranslation (Vec3Arg inV) |
Get matrix that translates. | |
static JPH_INLINE Mat44 | sRotationTranslation (QuatArg inR, Vec3Arg inT) |
Get matrix that rotates and translates. | |
static JPH_INLINE Mat44 | sInverseRotationTranslation (QuatArg inR, Vec3Arg inT) |
Get inverse matrix of sRotationTranslation. | |
static JPH_INLINE Mat44 | sScale (float inScale) |
Get matrix that scales uniformly. | |
static JPH_INLINE Mat44 | sScale (Vec3Arg inV) |
Get matrix that scales (produces a matrix with (inV, 1) on its diagonal) | |
static JPH_INLINE Mat44 | sOuterProduct (Vec3Arg inV1, Vec3Arg inV2) |
Get outer product of inV and inV2 (equivalent to \(inV1 \otimes inV2\)) | |
static JPH_INLINE Mat44 | sCrossProduct (Vec3Arg inV) |
Get matrix that represents a cross product \(A \times B = \text{sCrossProduct}(A) \: B\). | |
static JPH_INLINE Mat44 | sQuatLeftMultiply (QuatArg inQ) |
Returns matrix ML so that \(ML(q) \: p = q \: p\) (where p and q are quaternions) | |
static JPH_INLINE Mat44 | sQuatRightMultiply (QuatArg inQ) |
Returns matrix MR so that \(MR(q) \: p = p \: q\) (where p and q are quaternions) | |
static JPH_INLINE Mat44 | sLookAt (Vec3Arg inPos, Vec3Arg inTarget, Vec3Arg inUp) |
Friends | |
JPH_INLINE Mat44 | operator* (float inV, Mat44Arg inM) |
ostream & | operator<< (ostream &inStream, Mat44Arg inM) |
To String. | |
Holds a 4x4 matrix of floats, but supports also operations on the 3x3 upper left part of the matrix.
using Mat44::ArgType = Mat44Arg |
using Mat44::Type = Vec4::Type |
|
default |
Constructor.
Intentionally not initialized for performance reasons
|
default |
Mat44 Mat44::Adjointed3x3 | ( | ) | const |
Get the adjoint of a 3x3 matrix.
Decompose a matrix into a rotation & translation part and into a scale part so that: this = return_value * Mat44::sScale(outScale). This equation only holds when the matrix is orthogonal, if it is not the returned matrix will be made orthogonal using the modified Gram-Schmidt algorithm (see: https://en.wikipedia.org/wiki/Gram%E2%80%93Schmidt_process)
|
inline |
Access to the columns.
|
inline |
|
inline |
float Mat44::GetDeterminant3x3 | ( | ) | const |
Get the determinant of a 3x3 matrix.
|
inline |
|
inline |
|
inline |
Get matrix that transforms a direction with the same transform as this matrix (length is not preserved)
Quat Mat44::GetQuaternion | ( | ) | const |
Convert to quaternion.
Mat44 Mat44::GetRotation | ( | ) | const |
Get rotation part only (note: retains the first 3 values from the bottom row)
Mat44 Mat44::GetRotationSafe | ( | ) | const |
Get rotation part only (note: also clears the bottom row)
|
inline |
Mat44 Mat44::Inversed | ( | ) | const |
Inverse 4x4 matrix.
Mat44 Mat44::Inversed3x3 | ( | ) | const |
Inverse 3x3 matrix.
Mat44 Mat44::InversedRotationTranslation | ( | ) | const |
Inverse 4x4 matrix when it only contains rotation and translation.
bool Mat44::IsClose | ( | Mat44Arg | inM2, |
float | inMaxDistSq = 1.0e-12f ) const |
Test if two matrices are close.
Multiply transpose of 3x3 matrix by 3x3 matrix ( \(result = this^T \: inM\))
Multiply 3x3 matrix by the transpose of a 3x3 matrix ( \(result = this \: inM^T\))
Multiply vector by only 3x3 part of the transpose of the matrix ( \(result = this^T \: inV\))
|
inline |
Get float component by element index.
Mat44 Mat44::operator* | ( | float | inV | ) | const |
Multiply matrix with float.
Mat44 & Mat44::operator*= | ( | float | inV | ) |
Multiply matrix with float.
Mat44 Mat44::operator- | ( | ) | const |
Negate.
bool Mat44::operator== | ( | Mat44Arg | inM2 | ) | const |
Comparsion.
Scale a matrix: result = Mat44::sScale(inScale) * this.
Post multiply by translation matrix: result = Mat44::sTranslation(inTranslation) * this (i.e. add inTranslation to the 4-th column)
Scale a matrix: result = this * Mat44::sScale(inScale)
Pre multiply by translation matrix: result = this * Mat44::sTranslation(inTranslation)
Get matrix that represents a cross product \(A \times B = \text{sCrossProduct}(A) \: B\).
|
inline |
|
inline |
|
inline |
|
inline |
|
inline |
bool Mat44::SetInversed3x3 | ( | Mat44Arg | inM | ) |
*this = inM.Inversed3x3(), returns false if the matrix is singular in which case *this is unchanged
void Mat44::SetRotation | ( | Mat44Arg | inRotation | ) |
Updates the rotation part of this matrix (the first 3 columns)
|
inline |
|
static |
Identity matrix.
Get inverse matrix of sRotationTranslation.
Load 16 floats from memory, 16 bytes aligned.
Returns a look at matrix that transforms from world space to view space
inPos | Position of the camera |
inTarget | Target of the camera |
inUp | Up vector |
Get outer product of inV and inV2 (equivalent to \(inV1 \otimes inV2\))
Returns matrix ML so that \(ML(q) \: p = q \: p\) (where p and q are quaternions)
Returns matrix MR so that \(MR(q) \: p = p \: q\) (where p and q are quaternions)
Get matrix that rotates and translates.
|
static |
Rotate around X, Y or Z axis (angle in radians)
|
static |
|
static |
|
static |
Get matrix that scales uniformly.
Get matrix that scales (produces a matrix with (inV, 1) on its diagonal)
void Mat44::StoreFloat4x4 | ( | Float4 * | outV | ) | const |
Store matrix to memory.
|
static |
Zero matrix.
|
inline |
In single precision mode just return the matrix itself.
Mat44 Mat44::Transposed | ( | ) | const |
Transpose matrix.
Mat44 Mat44::Transposed3x3 | ( | ) | const |
Transpose 3x3 subpart of matrix.
|
friend |
To String.