PxMat33T#

Defined in include/foundation/PxMat33.h

template<class Type>
class PxMat33T#

3x3 matrix class

Some clarifications, as there have been much confusion about matrix formats etc in the past.

Short:

  • Matrix have base vectors in columns (vectors are column matrices, 3x1 matrices).

  • Matrix is physically stored in column major format

  • Matrices are concaternated from left

Long: Given three base vectors a, b and c the matrix is stored as

|a.x b.x c.x| |a.y b.y c.y| |a.z b.z c.z|

Vectors are treated as columns, so the vector v is

|x| |y| |z|

And matrices are applied before the vector (pre-multiplication) v’ = M*v

|x’| |a.x b.x c.x| |x| |a.x*x + b.x*y + c.x*z| |y’| = |a.y b.y c.y| * |y| = |a.y*x + b.y*y + c.y*z| |z’| |a.z b.z c.z| |z| |a.z*x + b.z*y + c.z*z|

Physical storage and indexing: To be compatible with popular 3d rendering APIs (read D3d and OpenGL) the physical indexing is

|0 3 6| |1 4 7| |2 5 8|

index = column*3 + row

which in C++ translates to M[column][row]

The mathematical indexing is M_row,column and this is what is used for _-notation so _12 is 1st row, second column and operator(row, column)!

Public Functions

inline PxMat33T()#

Default constructor.

inline PxMat33T(PxIDENTITY)#

identity constructor

inline PxMat33T(PxZERO)#

zero constructor

inline PxMat33T(
const PxVec3T<Type> &col0,
const PxVec3T<Type> &col1,
const PxVec3T<Type> &col2,
)#

Construct from three base vectors.

inline explicit PxMat33T(Type r)#

constructor from a scalar, which generates a multiple of the identity matrix

inline explicit PxMat33T(Type values[])#

Construct from Type[9].

inline explicit PxMat33T(const PxQuatT<Type> &q)#

Construct from a quaternion.

inline PxMat33T(const PxMat33T &other)#

Copy constructor.

inline PxMat33T &operator=(const PxMat33T &other)#

Assignment operator.

inline bool operator==(const PxMat33T &m) const#

returns true if the two matrices are exactly equal

inline const PxMat33T getTranspose() const#

Get transposed matrix.

inline const PxMat33T getInverse() const#

Get the real inverse.

inline Type getDeterminant() const#

Get determinant.

inline const PxMat33T operator-() const#

Unary minus.

inline const PxMat33T operator+(const PxMat33T &other) const#

Add.

inline const PxMat33T operator-(const PxMat33T &other) const#

Subtract.

inline const PxMat33T operator*(Type scalar) const#

Scalar multiplication.

inline const PxVec3T<Type> operator*(
const PxVec3T<Type> &vec,
) const#

Matrix vector multiplication (returns ‘this->transform(vec)’)

inline const PxMat33T operator*(const PxMat33T &other) const#

Matrix multiplication.

inline PxMat33T &operator+=(const PxMat33T &other)#

Equals-add.

inline PxMat33T &operator-=(const PxMat33T &other)#

Equals-sub.

inline PxMat33T &operator*=(Type scalar)#

Equals scalar multiplication.

inline PxMat33T &operator*=(const PxMat33T &other)#

Equals matrix multiplication.

inline Type operator()(PxU32 row, PxU32 col) const#

Element access, mathematical way!

inline Type &operator()(PxU32 row, PxU32 col)#

Element access, mathematical way!

inline const PxVec3T<Type> transform(
const PxVec3T<Type> &other,
) const#

Transform vector by matrix, equal to v’ = M*v.

inline const PxVec3T<Type> transformTranspose(
const PxVec3T<Type> &other,
) const#

Transform vector by matrix transpose, v’ = M^t*v.

inline const Type *front() const#
inline PxVec3T<Type> &operator[](PxU32 num)#
inline const PxVec3T<Type> &operator[](PxU32 num) const#

Public Members

PxVec3T<Type> column0#
PxVec3T<Type> column1#
PxVec3T<Type> column2#

Public Static Functions

static inline const PxMat33T createDiagonal(const PxVec3T<Type> &d)#

Construct from diagonal, off-diagonals are zero.

static inline const PxMat33T outer(
const PxVec3T<Type> &a,
const PxVec3T<Type> &b,
)#

Computes the outer product of two vectors.

Friends

template<class Type2>
inline friend PxMat33T<Type2> operator*(
Type2,
const PxMat33T<Type2>&,
)#