OpenVDB  3.1.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)
 Construct matrix given basis vectors (columns) More...
 
 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)
 
operator() (int i, int j) const
 
void setBasis (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...
 
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 Mat4operator= (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 $m_{i,j} *= scalar$ for $i, j \in [0, 3]$. More...
 
template<typename S >
const Mat4< T > & operator+= (const Mat4< S > &m1)
 Returns m0, where $m0_{i,j} += m1_{i,j}$ for $i, j \in [0, 3]$. More...
 
template<typename S >
const Mat4< T > & operator-= (const Mat4< S > &m1)
 Returns m0, where $m0_{i,j} -= m1_{i,j}$ for $i, j \in [0, 3]$. More...
 
template<typename S >
const Mat4< T > & operator*= (const Mat4< S > &m1)
 Return m, where $m_{i,j} = \sum_{k} m0_{i,k}*m1_{k,j}$ for $i, j \in [0, 3]$. More...
 
Mat4 transpose () const
 
Mat4 inverse (T tolerance=0) const
 
det () const
 Determinant of matrix. More...
 
Mat4 snapBasis (Axis axis, const Vec3< T > &direction)
 
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

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 $M_{i,j} = m_{i,j} * scalar$ for $i, j \in [0, 3]$. More...
 
template<typename S , typename T >
Mat4< typename promote< S, T >::type > operator* (const Mat4< T > &m, S scalar)
 Returns M, where $M_{i,j} = m_{i,j} * scalar$ for $i, j \in [0, 3]$. More...
 
template<typename T , typename MT >
Vec4< typename promote< T, MT >::type > operator* (const Mat4< MT > &_m, const Vec4< T > &_v)
 Returns v, where $v_{i} = \sum_{n=0}^3 m_{i,n} * v_n $ for $i \in [0, 3]$. More...
 
template<typename T , typename MT >
Vec4< typename promote< T, MT >::type > operator* (const Vec4< T > &_v, const Mat4< MT > &_m)
 Returns v, where $v_{i} = \sum_{n=0}^3 m_{n,i} * v_n $ for $i \in [0, 3]$. More...
 
template<typename T , typename MT >
Vec3< typename promote< T, MT >::type > operator* (const Mat4< MT > &_m, const Vec3< T > &_v)
 Returns v, where $v_{i} = \sum_{n=0}^3\left(m_{i,n} * v_n + m_{i,3}\right)$ for $i \in [0, 2]$. More...
 
template<typename T , typename MT >
Vec3< typename promote< T, MT >::type > operator* (const Vec3< T > &_v, const Mat4< MT > &_m)
 Returns v, where $v_{i} = \sum_{n=0}^3\left(m_{n,i} * v_n + m_{3,i}\right)$ for $i \in [0, 2]$. More...
 
template<typename T0 , typename T1 >
Mat4< typename promote< T0, T1 >::type > operator+ (const Mat4< T0 > &m0, const Mat4< T1 > &m1)
 Returns M, where $M_{i,j} = m0_{i,j} + m1_{i,j}$ for $i, j \in [0, 3]$. More...
 
template<typename T0 , typename T1 >
Mat4< typename promote< T0, T1 >::type > operator- (const Mat4< T0 > &m0, const Mat4< T1 > &m1)
 Returns M, where $M_{i,j} = m0_{i,j} - m1_{i,j}$ for $i, j \in [0, 3]$. More...
 
template<typename T0 , typename T1 >
Mat4< typename promote< T0, T1 >::type > operator* (const Mat4< T0 > &m0, const Mat4< T1 > &m1)
 Returns M, where $M_{ij} = \sum_{n=0}^3\left(m0_{nj} + m1_{in}\right)$ for $i, j \in [0, 3]$. More...
 

Detailed Description

template<typename T>
class openvdb::v3_1_0::math::Mat4< T >

4x4 -matrix class.

Member Typedef Documentation

typedef Mat<4, T> MyBase
typedef T value_type

Data type held by the matrix.

typedef T ValueType

Member Enumeration Documentation

enum SIZE_
inherited

Constructor & Destructor Documentation

Mat4 ( )
inline

Trivial constructor, the matrix is NOT initialized.

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 ( 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 ( const Vec4< Source > &  v1,
const Vec4< Source > &  v2,
const Vec4< Source > &  v3,
const Vec4< Source > &  v4 
)
inline

Construct matrix given basis vectors (columns)

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

Copy constructor.

Mat4 ( const Mat4< Source > &  m)
inlineexplicit

Conversion constructor.

Member Function Documentation

T* asPointer ( )
inline

Direct access to the internal data.

const T* asPointer ( ) const
inline
Vec4<T> col ( int  j) const
inline

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

T det ( ) const
inline

Determinant of matrix.

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

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

Mat3<T> getMat3 ( ) const
inline
Vec3<T> getTranslation ( ) const
inline

Return the translation component.

static const Mat4<T>& identity ( )
inlinestatic

Predefined constant for identity matrix.

Mat4 inverse ( tolerance = 0) const
inline
Returns
inverse of this
Exceptions
ArithmeticErrorif singular
static unsigned numColumns ( )
inlinestaticinherited
static unsigned numElements ( )
inlinestaticinherited
static unsigned numRows ( )
inlinestaticinherited
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;

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);

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

Return m, where $m_{i,j} *= scalar$ for $i, j \in [0, 3]$.

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

Return m, where $m_{i,j} = \sum_{k} m0_{i,k}*m1_{k,j}$ for $i, j \in [0, 3]$.

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

Returns m0, where $m0_{i,j} += m1_{i,j}$ for $i, j \in [0, 3]$.

Mat4<T> operator- ( ) const
inline

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

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

Returns m0, where $m0_{i,j} -= m1_{i,j}$ for $i, j \in [0, 3]$.

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

Assignment operator.

T* operator[] ( int  i)
inline

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

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

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

void postRotate ( Axis  axis,
angle 
)
inline

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

Parameters
axisThe axis (one of X, Y, Z) of rotation.
angleThe clock-wise rotation angle, in radians.
void postScale ( const Vec3< T0 > &  v)
inline
void postShear ( Axis  axis0,
Axis  axis1,
shear 
)
inline

Right multiplies a shearing transformation into the matrix.

See also
setToShear
void postTranslate ( const Vec3< T0 > &  tr)
inline

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

void preRotate ( Axis  axis,
angle 
)
inline

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

Parameters
axisThe axis (one of X, Y, Z) of rotation.
angleThe clock-wise rotation angle, in radians.
void preScale ( const Vec3< T0 > &  v)
inline
void preShear ( Axis  axis0,
Axis  axis1,
shear 
)
inline

Left multiplies a shearing transformation into the matrix.

See also
setToShear
Vec4<T0> pretransform ( const Vec4< T0 > &  v) const
inline

Transform a Vec4 by pre-multiplication.

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

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

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

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

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

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

void read ( std::istream &  is)
inlineinherited
Vec4<T> row ( int  i) const
inline

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

void setBasis ( 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.

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

Set jth column to vector v.

void setIdentity ( )
inline

Set "this" matrix to identity.

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

Set upper left to a Mat3.

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

Set ith row to vector v.

void setToRotation ( Axis  axis,
angle 
)
inline

Sets the matrix to a rotation about the given axis.

Parameters
axisThe axis (one of X, Y, Z) to rotate about.
angleThe rotation angle, in radians.
void setToRotation ( const Vec3< T > &  axis,
angle 
)
inline

Sets the matrix to a rotation about an arbitrary axis.

Parameters
axisThe axis of rotation (cannot be zero-length)
angleThe rotation angle, in radians.
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.

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

Sets the matrix to a matrix that scales by v.

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

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

Parameters
axis0The fixed axis of the shear.
axis1The shear axis.
shearbyThe shear factor.
void setToTranslation ( const Vec3< T0 > &  v)
inline

Sets the matrix to a matrix that translates by v.

void setTranslation ( const Vec3< T > &  t)
inline
void setZero ( )
inline
Mat4 snapBasis ( Axis  axis,
const Vec3< T > &  direction 
)
inline

This function snaps a specific axis to a specific direction, preserving scaling. It does this using minimum energy, thus posing a unique solution if basis & direction arent parralel. Direction need not be unit.

std::string str ( unsigned  indentation = 0) const
inlineinherited
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]]

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

Transform a Vec4 by post-multiplication.

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

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

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

Transform a Vec3 by post-multiplication, without translation.

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

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

static Mat4 translation ( const Vec3d v)
inlinestatic

Sets the matrix to a matrix that translates by v.

Mat4 transpose ( ) const
inline
Returns
transpose of this
void write ( std::ostream &  os) const
inlineinherited
static const Mat4<T>& zero ( )
inlinestatic

Predefined constant for zero matrix.

Friends And Related Function Documentation

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

Inequality operator, does exact floating point comparisons.

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

Returns M, where $M_{i,j} = m_{i,j} * scalar$ for $i, j \in [0, 3]$.

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

Returns M, where $M_{i,j} = m_{i,j} * scalar$ for $i, j \in [0, 3]$.

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

Returns v, where $v_{i} = \sum_{n=0}^3 m_{i,n} * v_n $ for $i \in [0, 3]$.

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

Returns v, where $v_{i} = \sum_{n=0}^3 m_{n,i} * v_n $ for $i \in [0, 3]$.

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

Returns v, where $v_{i} = \sum_{n=0}^3\left(m_{i,n} * v_n + m_{i,3}\right)$ for $i \in [0, 2]$.

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

Returns v, where $v_{i} = \sum_{n=0}^3\left(m_{n,i} * v_n + m_{3,i}\right)$ for $i \in [0, 2]$.

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

Returns M, where $M_{ij} = \sum_{n=0}^3\left(m0_{nj} + m1_{in}\right)$ for $i, j \in [0, 3]$.

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

Returns M, where $M_{i,j} = m0_{i,j} + m1_{i,j}$ for $i, j \in [0, 3]$.

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

Returns M, where $M_{i,j} = m0_{i,j} - m1_{i,j}$ for $i, j \in [0, 3]$.

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

Equality operator, does exact floating point comparisons.

Member Data Documentation

T mm[SIZE *SIZE]
protectedinherited

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