OpenVDB 3.2.0

Public Types | Public Member Functions | Static Public Member Functions | Protected Attributes | Related Functions | List of all members
Mat4< T > Class Template Reference

4x4 -matrix class. More...

`#include <Mat3.h>`

Inherits Mat< 4, T >.

## Public Types
typedef T | value_type
| Data type held by the matrix. More...
typedef T | ValueType
typedef Mat< 4, T > | MyBase
enum | SIZE_

## Public Member Functions
| Mat4 ()
| Trivial constructor, the matrix is NOT initialized. More...
template<typename Source >
| Mat4 (Source *a)
| Constructor given array of elements, the ordering is in row major form: More...
template<typename Source >
| Mat4 (Source a, Source b, Source c, Source d, Source e, Source f, Source g, Source h, Source i, Source j, Source k, Source l, Source m, Source n, Source o, Source p)
| Constructor given array of elements, the ordering is in row major form: More...
template<typename Source >
| Mat4 (const Vec4< Source > &v1, const Vec4< Source > &v2, const Vec4< Source > &v3, const Vec4< Source > &v4, bool rows=true)
| Mat4 (const Mat< 4, T > &m)
| Copy constructor. More...
template<typename Source >
| Mat4 (const Mat4< Source > &m)
| Conversion constructor. More...
void | setRow (int i, const Vec4< T > &v)
| Set ith row to vector v. More...
Vec4< T > | row (int i) const
| Get ith row, e.g. Vec4f v = m.row(1);. More...
void | setCol (int j, const Vec4< T > &v)
| Set jth column to vector v. More...
Vec4< T > | col (int j) const
| Get jth column, e.g. Vec4f v = m.col(0);. More...
T * | asPointer ()
| Direct access to the internal data. More...
const T * | asPointer () const
T & | operator() (int i, int j)
T | operator() (int i, int j) const
void | setRows (const Vec4< T > &v1, const Vec4< T > &v2, const Vec4< T > &v3, const Vec4< T > &v4)
| Set the rows of "this" matrix to the vectors v1, v2, v3, v4. More...
void | setColumns (const Vec4< T > &v1, const Vec4< T > &v2, const Vec4< T > &v3, const Vec4< T > &v4)
| Set the columns of "this" matrix to the vectors v1, v2, v3, v4. More...
OPENVDB_DEPRECATED void | setBasis (const Vec4< T > &v1, const Vec4< T > &v2, const Vec4< T > &v3, const Vec4< T > &v4)
| Set the rows of "this" matrix to the vectors v1, v2, v3, v4. More...
void | setZero ()
void | setIdentity ()
| Set "this" matrix to identity. More...
void | setMat3 (const Mat3< T > &m)
| Set upper left to a Mat3. More...
Mat3< T > | getMat3 () const
Vec3< T > | getTranslation () const
| Return the translation component. More...
void | setTranslation (const Vec3< T > &t)
template<typename Source >
const Mat4 & | operator= (const Mat4< Source > &m)
| Assignment operator. More...
bool | eq (const Mat4 &m, T eps=1.0e-8) const
| Test if "this" is equivalent to m with tolerance of eps value. More...
Mat4< T > | operator- () const
| Negation operator, for e.g. m1 = -m2;. More...
template<typename S >
const Mat4< T > & | operator*= (S scalar)
| Return m, where for . More...
template<typename S >
const Mat4< T > & | operator+= (const Mat4< S > &m1)
| Returns m0, where for . More...
template<typename S >
const Mat4< T > & | operator-= (const Mat4< S > &m1)
| Returns m0, where for . More...
template<typename S >
const Mat4< T > & | operator*= (const Mat4< S > &m1)
| Return m, where for . More...
Mat4 | transpose () const
Mat4 | inverse (T tolerance=0) const
T | det () const
| Determinant of matrix. More...
template<typename T0 >
void | setToTranslation (const Vec3< T0 > &v)
| Sets the matrix to a matrix that translates by v. More...
template<typename T0 >
void | preTranslate (const Vec3< T0 > &tr)
| Left multiples by the specified translation, i.e. Trans * (*this) More...
template<typename T0 >
void | postTranslate (const Vec3< T0 > &tr)
| Right multiplies by the specified translation matrix, i.e. (*this) * Trans. More...
template<typename T0 >
void | setToScale (const Vec3< T0 > &v)
| Sets the matrix to a matrix that scales by v. More...
template<typename T0 >
void | preScale (const Vec3< T0 > &v)
template<typename T0 >
void | postScale (const Vec3< T0 > &v)
void | setToRotation (Axis axis, T angle)
| Sets the matrix to a rotation about the given axis. More...
void | setToRotation (const Vec3< T > &axis, T angle)
| Sets the matrix to a rotation about an arbitrary axis. More...
void | setToRotation (const Vec3< T > &v1, const Vec3< T > &v2)
| Sets the matrix to a rotation that maps v1 onto v2 about the cross product of v1 and v2. More...
void | preRotate (Axis axis, T angle)
| Left multiplies by a rotation clock-wiseabout the given axis into this matrix. More...
void | postRotate (Axis axis, T angle)
| Right multiplies by a rotation clock-wiseabout the given axis into this matrix. More...
void | setToShear (Axis axis0, Axis axis1, T shearby)
| Sets the matrix to a shear along axis0 by a fraction of axis1. More...
void | preShear (Axis axis0, Axis axis1, T shear)
| Left multiplies a shearing transformation into the matrix. More...
void | postShear (Axis axis0, Axis axis1, T shear)
| Right multiplies a shearing transformation into the matrix. More...
template<typename T0 >
Vec4< T0 > | transform (const Vec4< T0 > &v) const
| Transform a Vec4 by post-multiplication. More...
template<typename T0 >
Vec3< T0 > | transform (const Vec3< T0 > &v) const
| Transform a Vec3 by post-multiplication, without homogenous division. More...
template<typename T0 >
Vec4< T0 > | pretransform (const Vec4< T0 > &v) const
| Transform a Vec4 by pre-multiplication. More...
template<typename T0 >
Vec3< T0 > | pretransform (const Vec3< T0 > &v) const
| Transform a Vec3 by pre-multiplication, without homogenous division. More...
template<typename T0 >
Vec3< T0 > | transformH (const Vec3< T0 > &p) const
| Transform a Vec3 by post-multiplication, doing homogenous divison. More...
template<typename T0 >
Vec3< T0 > | pretransformH (const Vec3< T0 > &p) const
| Transform a Vec3 by pre-multiplication, doing homogenous division. More...
template<typename T0 >
Vec3< T0 > | transform3x3 (const Vec3< T0 > &v) const
| Transform a Vec3 by post-multiplication, without translation. More...
std::string | str (unsigned indentation=0) const
void | write (std::ostream &os) const
void | read (std::istream &is)
T * | operator[] (int i)
const T * | operator[] (int i) const

## Static Public Member Functions
static const Mat4< T > & | identity ()
| Predefined constant for identity matrix. More...
static const Mat4< T > & | zero ()
| Predefined constant for zero matrix. More...
static Mat4 | translation (const Vec3d &v)
| Sets the matrix to a matrix that translates by v. More...
static unsigned | numRows ()
static unsigned | numColumns ()
static unsigned | numElements ()

## Protected Attributes
T | mm [SIZE *SIZE]

## Related Functions
(Note that these are not member functions.)
template<typename T0 , typename T1 >
bool | operator== (const Mat4< T0 > &m0, const Mat4< T1 > &m1)
| Equality operator, does exact floating point comparisons. More...
template<typename T0 , typename T1 >
bool | operator!= (const Mat4< T0 > &m0, const Mat4< T1 > &m1)
| Inequality operator, does exact floating point comparisons. More...
template<typename S , typename T >
Mat4< typename promote< S, T >::type > | operator* (S scalar, const Mat4< T > &m)
| Returns M, where for . More...
template<typename S , typename T >
Mat4< typename promote< S, T >::type > | operator* (const Mat4< T > &m, S scalar)
| Returns M, where for . More...
template<typename T , typename MT >
Vec4< typename promote< T, MT >::type > | operator* (const Mat4< MT > &_m, const Vec4< T > &_v)
| Returns v, where for . More...
template<typename T , typename MT >
Vec4< typename promote< T, MT >::type > | operator* (const Vec4< T > &_v, const Mat4< MT > &_m)
| Returns v, where for . More...
template<typename T , typename MT >
Vec3< typename promote< T, MT >::type > | operator* (const Mat4< MT > &_m, const Vec3< T > &_v)
| Returns v, where for . More...
template<typename T , typename MT >
Vec3< typename promote< T, MT >::type > | operator* (const Vec3< T > &_v, const Mat4< MT > &_m)
| Returns v, where for . More...
template<typename T0 , typename T1 >
Mat4< typename promote< T0, T1 >::type > | operator+ (const Mat4< T0 > &m0, const Mat4< T1 > &m1)
| Returns M, where for . More...
template<typename T0 , typename T1 >
Mat4< typename promote< T0, T1 >::type > | operator- (const Mat4< T0 > &m0, const Mat4< T1 > &m1)
| Returns M, where for . More...
template<typename T0 , typename T1 >
Mat4< typename promote< T0, T1 >::type > | operator* (const Mat4< T0 > &m0, const Mat4< T1 > &m1)
| Returns M, where for . More...

## Detailed Description

### template<typename T>
class openvdb::v3_2_0::math::Mat4< T >

4x4 -matrix class.

## Member Typedef Documentation

## ◆ MyBase

typedef Mat<4, T> MyBase

## ◆ value_type

typedef T value_type

Data type held by the matrix.

## ◆ ValueType

typedef T ValueType

## Member Enumeration Documentation

## ◆ SIZE_

enum SIZE_
| inherited

## Constructor & Destructor Documentation

## ◆ Mat4() [1/6]

Mat4 | ( |  | ) |
| inline

Trivial constructor, the matrix is NOT initialized.

## ◆ Mat4() [2/6]

Mat4 | ( | Source * | a | ) |
| inline

Constructor given array of elements, the ordering is in row major form:

    a[ 0] a[1]  a[ 2] a[ 3]
    a[ 4] a[5]  a[ 6] a[ 7]
    a[ 8] a[9]  a[10] a[11]
    a[12] a[13] a[14] a[15]

## ◆ Mat4() [3/6]

Mat4 | ( | Source | a,
|  | Source | b,
|  | Source | c,
|  | Source | d,
|  | Source | e,
|  | Source | f,
|  | Source | g,
|  | Source | h,
|  | Source | i,
|  | Source | j,
|  | Source | k,
|  | Source | l,
|  | Source | m,
|  | Source | n,
|  | Source | o,
|  | Source | p
| ) |  |
| inline

Constructor given array of elements, the ordering is in row major form:

    a b c d
    e f g h
    i j k l
    m n o p

## ◆ Mat4() [4/6]

Mat4 | ( | const Vec4< Source > & | v1,
|  | const Vec4< Source > & | v2,
|  | const Vec4< Source > & | v3,
|  | const Vec4< Source > & | v4,
|  | bool | rows = `true`
| ) |  |
| inline

Construct matrix from rows or columns vectors (defaults to rows for historical reasons)

## ◆ Mat4() [5/6]

Mat4 | ( | const Mat< 4, T > & | m | ) |
| inline

Copy constructor.

## ◆ Mat4() [6/6]

Mat4 | ( | const Mat4< Source > & | m | ) |
| inline explicit

Conversion constructor.

## Member Function Documentation

## ◆ asPointer() [1/2]

T* asPointer | ( |  | ) |
| inline

Direct access to the internal data.

## ◆ asPointer() [2/2]

const T* asPointer | ( |  | ) | const
| inline

## ◆ col()

Vec4<T> col | ( | int | j | ) | const
| inline

Get jth column, e.g. Vec4f v = m.col(0);.

## ◆ det()

T det | ( |  | ) | const
| inline

Determinant of matrix.

## ◆ eq()

bool eq | ( | const Mat4< T > & | m,
|  | T | eps = `1.0e-8`
| ) |  | const
| inline

Test if "this" is equivalent to m with tolerance of eps value.

## ◆ getMat3()

Mat3<T> getMat3 | ( |  | ) | const
| inline

## ◆ getTranslation()

Vec3<T> getTranslation | ( |  | ) | const
| inline

Return the translation component.

## ◆ identity()

static const Mat4<T>& identity | ( |  | ) |
| inline static

Predefined constant for identity matrix.

## ◆ inverse()

Mat4 inverse | ( | T | tolerance = `0` | ) | const
| inline

Returns
  inverse of this

Exceptions

  ArithmeticError | if singular

## ◆ numColumns()

static unsigned numColumns | ( |  | ) |
| inline static inherited

## ◆ numElements()

static unsigned numElements | ( |  | ) |
| inline static inherited

## ◆ numRows()

static unsigned numRows | ( |  | ) |
| inline static inherited

## ◆ operator()() [1/2]

T& operator() | ( | int | i,
|  | int | j
| ) |  |
| inline

Alternative indexed reference to the elements Note that the indices are row first and column second. e.g. m(0,0) = 1;

## ◆ operator()() [2/2]

T operator() | ( | int | i,
|  | int | j
| ) |  | const
| inline

Alternative indexed constant reference to the elements, Note that the indices are row first and column second. e.g. float f = m(1,0);

## ◆ operator*=() [1/2]

const Mat4<T>& operator*= | ( | S | scalar | ) |
| inline

Return m, where for .

## ◆ operator*=() [2/2]

const Mat4<T>& operator*= | ( | const Mat4< S > & | m1 | ) |
| inline

Return m, where for .

## ◆ operator+=()

const Mat4<T>& operator+= | ( | const Mat4< S > & | m1 | ) |
| inline

Returns m0, where for .

## ◆ operator-()

Mat4<T> operator- | ( |  | ) | const
| inline

Negation operator, for e.g. m1 = -m2;.

## ◆ operator-=()

const Mat4<T>& operator-= | ( | const Mat4< S > & | m1 | ) |
| inline

Returns m0, where for .

## ◆ operator=()

const Mat4& operator= | ( | const Mat4< Source > & | m | ) |
| inline

Assignment operator.

## ◆ operator[]() [1/2]

T* operator[] | ( | int | i | ) |
| inline

Array style reference to ith row e.g. m[1][3] = 4;

## ◆ operator[]() [2/2]

const T* operator[] | ( | int | i | ) | const
| inline

Array style reference to ith row e.g. m[1][3] = 4;

## ◆ postRotate()

void postRotate | ( | Axis | axis,
|  | T | angle
| ) |  |
| inline

Right multiplies by a rotation clock-wiseabout the given axis into this matrix.

Parameters

  axis | The axis (one of X, Y, Z) of rotation.
  angle | The clock-wise rotation angle, in radians.

## ◆ postScale()

void postScale | ( | const Vec3< T0 > & | v | ) |
| inline

## ◆ postShear()

void postShear | ( | Axis | axis0,
|  | Axis | axis1,
|  | T | shear
| ) |  |
| inline

Right multiplies a shearing transformation into the matrix.

See also
  setToShear

## ◆ postTranslate()

void postTranslate | ( | const Vec3< T0 > & | tr | ) |
| inline

Right multiplies by the specified translation matrix, i.e. (*this) * Trans.

## ◆ preRotate()

void preRotate | ( | Axis | axis,
|  | T | angle
| ) |  |
| inline

Left multiplies by a rotation clock-wiseabout the given axis into this matrix.

Parameters

  axis | The axis (one of X, Y, Z) of rotation.
  angle | The clock-wise rotation angle, in radians.

## ◆ preScale()

void preScale | ( | const Vec3< T0 > & | v | ) |
| inline

## ◆ preShear()

void preShear | ( | Axis | axis0,
|  | Axis | axis1,
|  | T | shear
| ) |  |
| inline

Left multiplies a shearing transformation into the matrix.

See also
  setToShear

## ◆ pretransform() [1/2]

Vec4<T0> pretransform | ( | const Vec4< T0 > & | v | ) | const
| inline

Transform a Vec4 by pre-multiplication.

## ◆ pretransform() [2/2]

Vec3<T0> pretransform | ( | const Vec3< T0 > & | v | ) | const
| inline

Transform a Vec3 by pre-multiplication, without homogenous division.

## ◆ pretransformH()

Vec3<T0> pretransformH | ( | const Vec3< T0 > & | p | ) | const
| inline

Transform a Vec3 by pre-multiplication, doing homogenous division.

## ◆ preTranslate()

void preTranslate | ( | const Vec3< T0 > & | tr | ) |
| inline

Left multiples by the specified translation, i.e. Trans * (*this)

## ◆ read()

void read | ( | std::istream & | is | ) |
| inline inherited

## ◆ row()

Vec4<T> row | ( | int | i | ) | const
| inline

Get ith row, e.g. Vec4f v = m.row(1);.

## ◆ setBasis()

OPENVDB_DEPRECATED void setBasis | ( | const Vec4< T > & | v1,
|  | const Vec4< T > & | v2,
|  | const Vec4< T > & | v3,
|  | const Vec4< T > & | v4
| ) |  |
| inline

Set the rows of "this" matrix to the vectors v1, v2, v3, v4.

## ◆ setCol()

void setCol | ( | int | j,
|  | const Vec4< T > & | v
| ) |  |
| inline

Set jth column to vector v.

## ◆ setColumns()

void setColumns | ( | const Vec4< T > & | v1,
|  | const Vec4< T > & | v2,
|  | const Vec4< T > & | v3,
|  | const Vec4< T > & | v4
| ) |  |
| inline

Set the columns of "this" matrix to the vectors v1, v2, v3, v4.

## ◆ setIdentity()

void setIdentity | ( |  | ) |
| inline

Set "this" matrix to identity.

## ◆ setMat3()

void setMat3 | ( | const Mat3< T > & | m | ) |
| inline

Set upper left to a Mat3.

## ◆ setRow()

void setRow | ( | int | i,
|  | const Vec4< T > & | v
| ) |  |
| inline

Set ith row to vector v.

## ◆ setRows()

void setRows | ( | const Vec4< T > & | v1,
|  | const Vec4< T > & | v2,
|  | const Vec4< T > & | v3,
|  | const Vec4< T > & | v4
| ) |  |
| inline

Set the rows of "this" matrix to the vectors v1, v2, v3, v4.

## ◆ setToRotation() [1/3]

void setToRotation | ( | Axis | axis,
|  | T | angle
| ) |  |
| inline

Sets the matrix to a rotation about the given axis.

Parameters

  axis | The axis (one of X, Y, Z) to rotate about.
  angle | The rotation angle, in radians.

## ◆ setToRotation() [2/3]

void setToRotation | ( | const Vec3< T > & | axis,
|  | T | angle
| ) |  |
| inline

Sets the matrix to a rotation about an arbitrary axis.

Parameters

  axis | The axis of rotation (cannot be zero-length)
  angle | The rotation angle, in radians.

## ◆ setToRotation() [3/3]

void setToRotation | ( | const Vec3< T > & | v1,
|  | const Vec3< T > & | v2
| ) |  |
| inline

Sets the matrix to a rotation that maps v1 onto v2 about the cross product of v1 and v2.

## ◆ setToScale()

void setToScale | ( | const Vec3< T0 > & | v | ) |
| inline

Sets the matrix to a matrix that scales by v.

## ◆ setToShear()

void setToShear | ( | Axis | axis0,
|  | Axis | axis1,
|  | T | shearby
| ) |  |
| inline

Sets the matrix to a shear along axis0 by a fraction of axis1.

Parameters

  axis0 | The fixed axis of the shear.
  axis1 | The shear axis.
  shearby | The shear factor.

## ◆ setToTranslation()

void setToTranslation | ( | const Vec3< T0 > & | v | ) |
| inline

Sets the matrix to a matrix that translates by v.

## ◆ setTranslation()

void setTranslation | ( | const Vec3< T > & | t | ) |
| inline

## ◆ setZero()

void setZero | ( |  | ) |
| inline

## ◆ str()

std::string str | ( | unsigned | indentation = `0` | ) | const
| inline inherited

Returns
  string representation of matrix Since output is multiline, optional indentation argument prefixes each newline with that much white space. It does not indent the first line, since you might be calling this inline:

cout << "matrix: " << mat.str(7)

matrix: [[1 2] [3 4]]

## ◆ transform() [1/2]

Vec4<T0> transform | ( | const Vec4< T0 > & | v | ) | const
| inline

Transform a Vec4 by post-multiplication.

## ◆ transform() [2/2]

Vec3<T0> transform | ( | const Vec3< T0 > & | v | ) | const
| inline

Transform a Vec3 by post-multiplication, without homogenous division.

## ◆ transform3x3()

Vec3<T0> transform3x3 | ( | const Vec3< T0 > & | v | ) | const
| inline

Transform a Vec3 by post-multiplication, without translation.

## ◆ transformH()

Vec3<T0> transformH | ( | const Vec3< T0 > & | p | ) | const
| inline

Transform a Vec3 by post-multiplication, doing homogenous divison.

## ◆ translation()

static Mat4 translation | ( | const Vec3d & | v | ) |
| inline static

Sets the matrix to a matrix that translates by v.

## ◆ transpose()

Mat4 transpose | ( |  | ) | const
| inline

Returns
  transpose of this

## ◆ write()

void write | ( | std::ostream & | os | ) | const
| inline inherited

## ◆ zero()

static const Mat4<T>& zero | ( |  | ) |
| inline static

Predefined constant for zero matrix.

## Friends And Related Function Documentation

## ◆ operator!=()

bool operator!= | ( | const Mat4< T0 > & | m0,
|  | const Mat4< T1 > & | m1
| ) |  |
| related

Inequality operator, does exact floating point comparisons.

## ◆ operator*() [1/7]

Mat4< typename promote< S, T >::type > operator* | ( | S | scalar,
|  | const Mat4< T > & | m
| ) |  |
| related

Returns M, where for .

## ◆ operator*() [2/7]

Mat4< typename promote< S, T >::type > operator* | ( | const Mat4< T > & | m,
|  | S | scalar
| ) |  |
| related

Returns M, where for .

## ◆ operator*() [3/7]

Vec4< typename promote< T, MT >::type > operator* | ( | const Mat4< MT > & | _m,
|  | const Vec4< T > & | _v
| ) |  |
| related

Returns v, where for .

## ◆ operator*() [4/7]

Vec4< typename promote< T, MT >::type > operator* | ( | const Vec4< T > & | _v,
|  | const Mat4< MT > & | _m
| ) |  |
| related

Returns v, where for .

## ◆ operator*() [5/7]

Vec3< typename promote< T, MT >::type > operator* | ( | const Mat4< MT > & | _m,
|  | const Vec3< T > & | _v
| ) |  |
| related

Returns v, where for .

## ◆ operator*() [6/7]

Vec3< typename promote< T, MT >::type > operator* | ( | const Vec3< T > & | _v,
|  | const Mat4< MT > & | _m
| ) |  |
| related

Returns v, where for .

## ◆ operator*() [7/7]

Mat4< typename promote< T0, T1 >::type > operator* | ( | const Mat4< T0 > & | m0,
|  | const Mat4< T1 > & | m1
| ) |  |
| related

Returns M, where for .

## ◆ operator+()

Mat4< typename promote< T0, T1 >::type > operator+ | ( | const Mat4< T0 > & | m0,
|  | const Mat4< T1 > & | m1
| ) |  |
| related

Returns M, where for .

## ◆ operator-()

Mat4< typename promote< T0, T1 >::type > operator- | ( | const Mat4< T0 > & | m0,
|  | const Mat4< T1 > & | m1
| ) |  |
| related

Returns M, where for .

## ◆ operator==()

bool operator== | ( | const Mat4< T0 > & | m0,
|  | const Mat4< T1 > & | m1
| ) |  |
| related

Equality operator, does exact floating point comparisons.

## Member Data Documentation

## ◆ mm

T mm[SIZE *SIZE]
| protected inherited

The documentation for this class was generated from the following files:

- Mat3.h
- Mat4.h