4x4 homogeneous matrix class. Supports both affine and projective operations.
More...
|
| Matrix () |
| No init. More...
|
|
| Matrix (Real _00, Real _01, Real _02, Real _03, Real _10, Real _11, Real _12, Real _13, Real _20, Real _21, Real _22, Real _23, Real _30, Real _31, Real _32, Real _33) |
| Construct from values. More...
|
|
| Matrix (Real scalar) |
| Initialize with scalar in every element. More...
|
|
| Matrix (const Real *a, sdt rows, sdt cols, bool rowMajor=true) |
| Initialize from array with dimensions (rows x cols). If the array is in row-major format set rowMajor to true, otherwise set to false for column-major. More...
|
|
| Matrix (const Quat &q) |
| Construct from quaternion. More...
|
|
| Matrix (const Transform &tm) |
| Initialize from transform. More...
|
|
template<class T > |
| Matrix (const MatrixBase< T > &rhs) |
| Construct from matrix of same size. More...
|
|
template<class T > |
Matrix< s_rows, T::s_cols, Real > | operator* (const T &rhs) const |
| Forward to base. More...
|
|
Matrix | operator* (Real rhs) const |
|
Matrix & | fromIdentity () |
| Make matrix identity. More...
|
|
Matrix & | fromTrs (const Vec3 &trans, const Quat &rot=Quat::identity, const Vec3 &scale=Vec3::one, const Quat &skew=Quat::identity) |
| Init from translation, rotation, scale and skew. More...
|
|
Matrix & | fromScalar (Real f) |
| Initialize with scalar in every element. More...
|
|
Matrix & | fromTm (const Transform &tm) |
| Initialize from transform. More...
|
|
Matrix & | fromObliqueProjection (const Vec3 &normal, const Vec3 &point, const Vec3 &dir) |
| Construct a matrix that represents a projection onto a plane along a direction. More...
|
|
Matrix & | fromPerspectiveProjection (const Vec3 &normal, const Vec3 &point, const Vec3 &eye) |
| Construct a matrix that represents a perspective projection onto a plane. More...
|
|
Matrix & | fromReflection (const Vec3 &normal, const Vec3 &point) |
| Construct a matrix that represents a reflection on a plane. More...
|
|
Matrix & | fromLookAt (const Vec3 &eye, const Vec3 &at, const Vec3 &up) |
| Construct a matrix suitable for a camera. More...
|
|
template<class T > |
Matrix & | operator= (const MatrixBase< T > &rhs) |
| Assign to matrix of same size. More...
|
|
Matrix & | mul (const Matrix &rhs, Matrix &res) const |
|
Matrix && | mul (const Matrix &rhs, Matrix &&res) const |
|
VecCol | operator* (const VecCol &v) const |
| Square matrix, so multiplying a column vector on the right returns a column vector of the same dimension. More...
|
|
Vec3 | operator* (const Vec3 &v) const |
| Assumes vector has w = 1, transforms and projects result back into w = 1. More...
|
|
Vec2 | operator* (const Vec2 &v) const |
| Assumes vector has (z,w) = (0,1), transforms and projects result back into w = 1. More...
|
|
Vec3 | mulAffine (const Vec3 &v) const |
| Transform vector with affine part of matrix (apply pos/rot/scale). Same as operator*() but without projection back into w = 1. More...
|
|
Vec3 | mulRotScale (const Vec3 &v) const |
| Transform vector with upper-left 3x3 rot/scale sub-matrix (no translation) More...
|
|
Matrix & | transpose (Matrix &res) const |
|
Matrix && | transpose (Matrix &&res) const |
|
void | transposeInPlace () |
|
Matrix & | transposeMul (const Matrix &rhs, Matrix &res) const |
|
Matrix && | transposeMul (const Matrix &rhs, Matrix &&res) const |
|
Matrix & | mulTranspose (const Matrix &rhs, Matrix &res) const |
|
Matrix && | mulTranspose (const Matrix &rhs, Matrix &&res) const |
|
Matrix & | transposeMulTranspose (const Matrix &rhs, Matrix &res) const |
|
Matrix && | transposeMulTranspose (const Matrix &rhs, Matrix &&res) const |
|
void | orthonormalize () |
| Gram-Schmidt orthonormalization on upper-left 3x3 submatrix. Useful for re-normalizing an orthonormal basis to eliminate rounding errors. More...
|
|
Matrix | inverse (optional< Real & > det=optnull) const |
| Get the inverse of this matrix. The determinant will be returned in det if specified. More...
|
|
Matrix | adjugate () const |
| The adjugate matrix is the transpose of the cofactor matrix (used in inversion) More...
|
|
Real | determinant () const |
| Get the determinant. More...
|
|
void | decompose (optional< Vec3 & > trans=optnull, optional< Quat & > rot=optnull, optional< Vec3 & > scale=optnull, optional< Quat & > skew=optnull) const |
| Decompose matrix into translation, rotation, scale and skew. More...
|
|
Vec3 | getTrans () const |
| Get translation. More...
|
|
void | setTrans (const Vec3 &v) |
| Set translation. More...
|
|
Quat | getRot () const |
| Get rotation. Beware: bogus if mat contains scale/skew. More...
|
|
void | setRot (const Quat &q) |
| Set rotation. Beware: overwrites scale/skew. More...
|
|
Vec3 | getScale () const |
| Get scale. Beware: bogus if mat contains rot/skew. More...
|
|
void | setScale (const Vec3 &v, const Quat &skew=Quat::identity) |
| Set scale. Beware: overwrites rotation. More...
|
|
void | setScale (Real f) |
| Set uniform scale. Beware: overwrites rotation. More...
|
|
Matrix & | translate (const Vec3 &v) |
| Make a tm that performs this transform first, then does a translation. ie. T * This. More...
|
|
Matrix & | preTranslate (const Vec3 &v) |
| Make a tm that does a translation first, then performs this transform. ie. This * T. More...
|
|
Matrix & | rotate (const Quat &q) |
| Make a tm that performs this transform first, then does a rotation. ie. R * This. More...
|
|
Matrix & | preRotate (const Quat &q) |
| Make a tm that does a rotation first, then performs this transform. ie. This * R. More...
|
|
Matrix & | scale (const Vec3 &v, const Quat &skew=Quat::identity) |
| Make a tm that performs this transform first, then does a scale. ie. S * This. More...
|
|
Matrix & | scale (Real f) |
| Uniform scale. More...
|
|
Matrix & | preScale (const Vec3 &v, const Quat &skew=Quat::identity) |
| Make a tm that does a scale first, then performs this transform. ie. This * S. More...
|
|
Matrix & | preScale (Real f) |
| Uniform prescale. More...
|
|
MatrixS & | fromArray (const Num *a, bool rowMajor=true) |
| Initialize from array. If the array is in row-major format set rowMajor to true, otherwise set to false for column-major. More...
|
|
MatrixS & | fromArray (const Real *a, bool rowMajor=true) |
|
MatrixS & | fromZero () |
| Zero all elements. More...
|
|
MatrixS & | fromScalar (Real f) |
| Initialize with scalar in every element. More...
|
|
MatrixS & | fromIdentity () |
| Make matrix identity. For non-square matrices the identity is in the upper-left square block, the rest is filled with zero. More...
|
|
matrix::Builder< MatrixS > | operator<< (T &&val) |
| Initialize matrix elements from scalars and other matrices using the comma operator: Matrix() << 1, 2, vec*5 ... The number of assigned elements must total up to be the matrix size exactly. More...
|
|
MatrixBase & | operator= (const MatrixBase< T > &rhs) |
| Assign to matrix of any size. Asserts that any fixed dimensions in this matrix match those in rhs. More...
|
|
Matrix | cast () |
| Convert to a matrix of another real type. More...
|
|
bool | operator== (const MatrixBase< T > &rhs) const |
|
bool | operator!= (const MatrixBase< T > &rhs) const |
|
bool | operator< (const MatrixBase< T > &rhs) const |
|
bool | operator> (const MatrixBase< T > &rhs) const |
|
bool | operator<= (const MatrixBase< T > &rhs) const |
|
bool | operator>= (const MatrixBase< T > &rhs) const |
|
Res && | add (const T &rhs, Res &&res) const |
| Add another matrix. Stores result in and returns res. res may reference the same matrix as this or rhs. More...
|
|
MatrixS | operator+ () const |
|
MatrixS | operator+ (const MatrixBase< T > &rhs) const |
|
MatrixS & | operator+= (const MatrixBase< T > &rhs) |
|
Res && | sub (const T &rhs, Res &&res) const |
| Subtract another matrix. Stores result in and returns res. res may reference the same matrix as this or rhs. More...
|
|
MatrixS | operator- () const |
|
MatrixS | operator- (const MatrixBase< T > &rhs) const |
|
MatrixS & | operator-= (const MatrixBase< T > &rhs) |
|
Res && | mul (const T &rhs, Res &&res) const |
| Multiply with another matrix. This mat's column size must match rhs' row size. Stores result in and returns res. Complexity: . More...
|
|
Matrix< s_rows, T::s_cols, Real > | operator* (const T &rhs) const |
| Multiply with another matrix. Returns a new matrix. More...
|
|
MatrixS | operator* (Real rhs) const |
|
MatrixS & | operator*= (const MatrixBase< T > &rhs) |
|
MatrixS & | operator*= (Real rhs) |
|
MatrixS | operator/ (Real rhs) const |
|
MatrixS & | operator/= (Real rhs) |
|
MatrixS | elemAdd (Real rhs) const |
| Add rhs to each element. Returns a new matrix with the results. More...
|
|
MatrixS & | elemAddEq (Real rhs) |
| Add rhs to each element. More...
|
|
MatrixS | elemSub (Real rhs) const |
| Subtract rhs from each element. Returns a new matrix with the results. More...
|
|
MatrixS & | elemSubEq (Real rhs) |
| Subtract rhs from each element. More...
|
|
MatrixS | elemMul (const MatrixBase< T > &rhs) const |
| Multiply each element with its corresponding element in rhs. Returns a new matrix with the results. More...
|
|
MatrixS & | elemMulEq (const MatrixBase< T > &rhs) |
| Multiply each element with its corresponding element in rhs. More...
|
|
MatrixS | elemDiv (const MatrixBase< T > &rhs) const |
| Divide each element by its corresponding element in rhs. Returns a new matrix with the results. More...
|
|
MatrixS & | elemDivEq (const MatrixBase< T > &rhs) |
| Divide each element by its corresponding element in rhs. More...
|
|
MatrixS | elemAbs () const |
| Get the absolute value of each element. Returns a new matrix with the results. More...
|
|
MatrixS | elemSqr () const |
| Square each element. Returns a new matrix with the results. More...
|
|
MatrixS | elemInverse () const |
| Inverse each element. Returns a new matrix with the results. More...
|
|
MatrixS | elemMin (const MatrixBase< T > &rhs) const |
| Get the min of each element and its corresponding element in rhs. Returns a new matrix with the results. More...
|
|
MatrixS | elemMax (const MatrixBase< T > &rhs) const |
| Get the max of each element and its corresponding element in rhs. Returns a new matrix with the results. More...
|
|
bool | isZero () const |
| Check if each element is exactly zero. More...
|
|
bool | isNearZero (Real tol=Real_::zeroTol) const |
| Check if each element is close to zero. More...
|
|
MatrixS | clamp (const MatrixBase< T > &min, const MatrixBase< T > &max) const |
| Clamp each element between its corresponding elements in min and max. Returns a new matrix with the results. More...
|
|
Real | sum () const |
| Get the sum of all elements. More...
|
|
Real | prod () const |
| Get the product of all elements. More...
|
|
Real | mean () const |
| Get the mean of all elements. More...
|
|
Real | min () const |
| Get the minimum element. More...
|
|
Real | max () const |
| Get the maximum element. More...
|
|
matrix::Block< MatrixS, Rows, Cols > | block (sdt row, sdt col, sdt rows=-1, sdt cols=-1) |
| Get block at offset (row,col) with size (Rows, Cols). If Rows or Cols is fixed then rows or cols may be left unspecified. More...
|
|
matrix::Block< const MatrixS, Rows, Cols > | block (sdt row, sdt col, sdt rows=-1, sdt cols=-1) const |
|
matrix::Block< MatrixS > | block (sdt row, sdt col, sdt rows, sdt cols) |
| Get dynamic block at offset (row,col) with size (rows, cols) More...
|
|
matrix::Block< const MatrixS > | block (sdt row, sdt col, sdt rows, sdt cols) const |
|
matrix::Block< MatrixS, 1, s_cols > | row (sdt row) |
| Get row as a row vector. More...
|
|
matrix::Block< const MatrixS, 1, s_cols > | row (sdt row) const |
|
matrix::Block< MatrixS, s_rows, 1 > | col (sdt col) |
| Get column as a column vector. More...
|
|
matrix::Block< const MatrixS, s_rows, 1 > | col (sdt col) const |
|
MatrixS & | resize (sdt rows, sdt cols) |
| Sets number of rows/columns and reallocates only if the size has changed (rows*cols). All previous data is lost on reallocation. Returns self. More...
|
|
matrix::Iter< MatrixS > | begin () |
| Get an iterator over the elements in row-major order. More...
|
|
matrix::Iter< const MatrixS > | begin () const |
|
matrix::Iter< MatrixS > | end () |
| Get an iterator to the end of the iteration provided by begin() More...
|
|
matrix::Iter< const MatrixS > | end () const |
|
matrix::Iter< MatrixS > | iter (sdt i) |
| Get an iterator to the element at index. More...
|
|
matrix::Iter< const MatrixS > | iter (sdt i) const |
|
matrix::Iter< MatrixS > | iter (sdt row, sdt col) |
| Get an iterator to the element at (row, col) More...
|
|
matrix::Iter< const MatrixS > | iter (sdt row, sdt col) const |
|
Num * | toArray (Num *a, bool rowMajor=true) const |
| Copy matrix into array. If the array is in row-major format set rowMajor to true, otherwise set to false for column-major. More...
|
|
Real * | toArray (Real *a, bool rowMajor=true) const |
|
Res && | transpose (Res &&res) const |
| transpose and store result in res. Returns res. More...
|
|
Matrix< s_cols, s_rows, Real > | transpose () const |
| Returns new matrix. More...
|
|
void | transposeInPlace () |
| transpose and store in this matrix, only valid for square matrices More...
|
|
Res && | transposeMul (const T &rhs, Res &&res) const |
| Stores result in and returns res. More...
|
|
Matrix< s_cols, T::s_cols, Real > | transposeMul (const T &rhs) const |
| Returns new matrix. More...
|
|
Res && | mulTranspose (const T &rhs, Res &&res) const |
| Stores result in and returns res. More...
|
|
Matrix< s_rows, T::s_rows, Real > | mulTranspose (const T &rhs) const |
| Returns new matrix. More...
|
|
Res && | transposeMulTranspose (const T &rhs, Res &&res) const |
| Stores result in and returns res. More...
|
|
Matrix< s_cols, T::s_rows, Real > | transposeMulTranspose (const T &rhs) const |
| Returns new matrix. More...
|
|
auto | minor (sdt row, sdt col) const -> Matrix< (s_rows > 0)?s_rows-1:s_rows, (s_cols > 0)?s_cols-1:s_cols, Real > |
| Returns a matrix without the selected row and column. More...
|
|
Matrix< s_cols, s_rows, Real > | inverse (optional< Real & > det=optnull) const |
| Get the pseudo-inverse of this matrix. The pseudo-determinant will be returned in det if specified. More...
|
|
Real | determinant () const |
| Get the determinant. Returns the pseudo-determinant if this matrix is not square. More...
|
|
Real | cond () const |
| Get the condition value. A high value means the matrix is ill-conditioned and close to singular, so inversion and linear ops will be unreliable. More...
|
|
template<class Real, int Options>
class honey::Matrix< 4, 4, Real, Options >
4x4 homogeneous matrix class. Supports both affine and projective operations.
Matrix data is in row-major format. Transforms are applied on the left of column vectors (the standard way).
ie. To transform a column vector first by M0, followed by a transform of M1, apply:
Matrix4::VecRow Matrix4 Matrix4::VecCol (aka. Vec4)
[ x y z w ] | 0 1 2 3 | | x |
* | 4 5 6 7 | * | y |
| 8 9 10 11 | | z |
| 12 13 14 15 | | w |
Affine matrix translation is in the last column: