Public Member Functions | Static Public Member Functions | Public Attributes | Friends

Matrix4< T > Class Template Reference

Class for matrix 4x4. More...

#include <vmath.h>

Collaboration diagram for Matrix4< T >:

List of all members.

Public Member Functions

 Matrix4 ()
 Creates identity matrix.
 Matrix4 (const T *dt)
 Copy matrix values from array (these data must be in column major order!).
 Matrix4 (const Matrix4< T > &src)
 Copy constructor.
template<class FromT >
 Matrix4 (const Matrix4< FromT > &src)
 Copy casting constructor.
void identity ()
 Resets matrix to be identity matrix.
bool operator== (const Matrix4< T > &rhs) const
 Equality test operator.
bool operator!= (const Matrix4< T > &rhs) const
 Inequality test operator.
T & at (int x, int y)
 Get reference to element at postion (x,y).
const T & at (int x, int y) const
 Get constant reference to element at position (x,y).
T & operator() (int i, int j)
 Get reference to element at position (i,j), with math matrix notation.
const T & operator() (int i, int j) const
 Get constant reference to element at position (i,j), with math matrix notation.
void setTranslation (const Vector3< T > &v)
 Sets translation part of matrix.
Vector3< T > getTranslation ()
void setRotation (const Matrix3< T > &m)
 Sets rotation part (matrix 3x3) of matrix.
Matrix4< T > & operator= (const Matrix4< T > &rhs)
 Copy operator.
template<class FromT >
Matrix4< T > & operator= (const Matrix4< FromT > &rhs)
 Copy casting operator.
Matrix4< T > & operator= (const T *rhs)
 Copy operator.
Matrix4< T > operator+ (const Matrix4< T > &rhs) const
 Addition operator.
Matrix4< T > operator- (const Matrix4< T > &rhs) const
 Subtraction operator.
Matrix4< T > operator+ (T rhs) const
 Addition operator.
Matrix4< T > operator- (T rhs) const
 Subtraction operator.
Matrix4< T > operator* (T rhs) const
 Multiplication operator.
Matrix4< T > operator/ (T rhs) const
 Division operator.
Vector4< T > operator* (const Vector4< T > &rhs) const
 Multiplication operator.
Vector3< T > operator* (const Vector3< T > &rhs) const
 Multiplication operator.
Matrix4< T > operator* (Matrix4< T > rhs) const
 Multiplication operator.
det ()
 Computes determinant of matrix.
Matrix4< T > inverse ()
 Computes inverse matrix.
Matrix4< T > transpose ()
 Transpose matrix.
Matrix4< T > lerp (T fact, const Matrix4< T > &rhs) const
 Linear interpolation of two matrices.
 operator T * ()
 Conversion to pointer operator.
 operator const T * () const
 Conversion to pointer operator.
std::string toString () const
 Gets string representation.

Static Public Member Functions

static Matrix4< T > createRotationAroundAxis (T xDeg, T yDeg, T zDeg)
 Creates rotation matrix by rotation around axis.
static Matrix4< T > createTranslation (T x, T y, T z, T w=1)
 Creates translation matrix.
static Matrix4< T > createFrustum (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates OpenGL compatible perspective projection according specified frustum parameters.
static Matrix4< T > createOrtho (T left, T right, T bottom, T top, T zNear, T zFar)
 Creates OpenGL compatible orthographic projection matrix.
template<class FromT >
static Matrix4< T > fromRowMajorArray (const FromT *arr)
 Creates new matrix 4x4 from array that represents such matrix 4x4 as array of tightly packed elements in row major order.
template<class FromT >
static Matrix4< T > fromColumnMajorArray (const FromT *arr)
 Creates new matrix 4x4 from array that represents such matrix 4x4 as array of tightly packed elements in column major order.

Public Attributes

data [16]
 Data stored in column major order.

Friends

std::ostream & operator<< (std::ostream &lhs, const Matrix4< T > &rhs)
 Output to stream operator.

Detailed Description

template<class T>
class Matrix4< T >

Class for matrix 4x4.

Note:
Data stored in this matrix are in column major order. This arrangement suits OpenGL. If you're using row major matrix, consider using fromRowMajorArray as way for construction Matrix4<T> instance.

Constructor & Destructor Documentation

template<class T>
Matrix4< T >::Matrix4 (  )  [inline]

Creates identity matrix.

template<class T>
Matrix4< T >::Matrix4 ( const T *  dt  )  [inline]

Copy matrix values from array (these data must be in column major order!).

template<class T>
Matrix4< T >::Matrix4 ( const Matrix4< T > &  src  )  [inline]

Copy constructor.

Parameters:
src Data source for new created instance of Matrix4.
template<class T>
template<class FromT >
Matrix4< T >::Matrix4 ( const Matrix4< FromT > &  src  )  [inline]

Copy casting constructor.

Parameters:
src Data source for new created instance of Matrix4.

Member Function Documentation

template<class T>
T& Matrix4< T >::at ( int  x,
int  y 
) [inline]

Get reference to element at postion (x,y).

Parameters:
x Number of column (0..3)
y Number of row (0..3)
template<class T>
const T& Matrix4< T >::at ( int  x,
int  y 
) const [inline]

Get constant reference to element at position (x,y).

Parameters:
x Number of column (0..3)
y Number of row (0..3)
template<class T>
static Matrix4<T> Matrix4< T >::createFrustum ( left,
right,
bottom,
top,
zNear,
zFar 
) [inline, static]

Creates OpenGL compatible perspective projection according specified frustum parameters.

Parameters:
left Specify the coordinate for the left vertical clipping plane,
right Specify the coordinate for the right vertical clipping plane.
bottom Specify the coordinate for the bottom horizontal clipping plane,
top Specify the coordinate for the top horizontal clipping plane.
zNear Specify the distance to the near clipping plane. Distance must be positive.
zFar Specify the distance to the far depth clipping plane. Distance must be positive.
Returns:
Projection matrix for specified frustum.
template<class T>
static Matrix4<T> Matrix4< T >::createOrtho ( left,
right,
bottom,
top,
zNear,
zFar 
) [inline, static]

Creates OpenGL compatible orthographic projection matrix.

Parameters:
left Specify the coordinate for the left vertical clipping plane,
right Specify the coordinate for the right vertical clipping plane.
bottom Specify the coordinate for the bottom horizontal clipping plane,
top Specify the coordinate for the top horizontal clipping plane.
zNear Specify the distance to the nearer depth clipping plane. This value is negative if the plane is to be behind the viewer,
zFar Specify the distance to the farther depth clipping plane. This value is negative if the plane is to be behind the viewer.
Returns:
Othrographic projection matrix.
template<class T>
static Matrix4<T> Matrix4< T >::createRotationAroundAxis ( xDeg,
yDeg,
zDeg 
) [inline, static]

Creates rotation matrix by rotation around axis.

Parameters:
xDeg Angle (in degrees) of rotation around axis X.
yDeg Angle (in degrees) of rotation around axis Y.
zDeg Angle (in degrees) of rotation around axis Z.
template<class T>
static Matrix4<T> Matrix4< T >::createTranslation ( x,
y,
z,
w = 1 
) [inline, static]

Creates translation matrix.

Creates translation matrix.

Parameters:
x X-direction translation
y Y-direction translation
z Z-direction translation
w for W-coordinate translation (implicitly set to 1)
template<class T>
T Matrix4< T >::det (  )  [inline]

Computes determinant of matrix.

Returns:
Determinant of matrix
Note:
This function does 3 * 4 * 6 mul, 3 * 6 add.
template<class T>
template<class FromT >
static Matrix4<T> Matrix4< T >::fromColumnMajorArray ( const FromT *  arr  )  [inline, static]

Creates new matrix 4x4 from array that represents such matrix 4x4 as array of tightly packed elements in column major order.

Parameters:
arr An array of elements for 4x4 matrix in column major order.
Returns:
An instance of Matrix4<T> representing arr
template<class T>
template<class FromT >
static Matrix4<T> Matrix4< T >::fromRowMajorArray ( const FromT *  arr  )  [inline, static]

Creates new matrix 4x4 from array that represents such matrix 4x4 as array of tightly packed elements in row major order.

Parameters:
arr An array of elements for 4x4 matrix in row major order.
Returns:
An instance of Matrix4<T> representing arr
template<class T>
Vector3<T> Matrix4< T >::getTranslation (  )  [inline]
template<class T>
void Matrix4< T >::identity (  )  [inline]

Resets matrix to be identity matrix.

template<class T>
Matrix4<T> Matrix4< T >::inverse (  )  [inline]

Computes inverse matrix.

Returns:
Inverse matrix of this matrix.
Note:
This is a little bit time consuming operation (16 * 6 * 3 mul, 16 * 5 add + det() + mul() functions)
template<class T>
Matrix4<T> Matrix4< T >::lerp ( fact,
const Matrix4< T > &  rhs 
) const [inline]

Linear interpolation of two matrices.

Parameters:
fact Factor of interpolation. For translation from positon of this matrix (lhs) to matrix rhs, values of factor goes from 0.0 to 1.0.
rhs Second Matrix for interpolation
Note:
However values of fact parameter are reasonable only in interval [0.0 , 1.0], you can pass also values outside of this interval and you can get result (extrapolation?)
template<class T>
Matrix4< T >::operator const T * (  )  const [inline]

Conversion to pointer operator.

Returns:
Constant Pointer to internally stored (in management of class Matrix4<T>) used for passing Matrix4<T> values to gl*[fd]v functions.
template<class T>
Matrix4< T >::operator T * (  )  [inline]

Conversion to pointer operator.

Returns:
Pointer to internally stored (in management of class Matrix4<T>) used for passing Matrix4<T> values to gl*[fd]v functions.
template<class T>
bool Matrix4< T >::operator!= ( const Matrix4< T > &  rhs  )  const [inline]

Inequality test operator.

Parameters:
rhs Right hand side argument of binary operator.
Returns:
not (lhs == rhs) :-P
template<class T>
T& Matrix4< T >::operator() ( int  i,
int  j 
) [inline]

Get reference to element at position (i,j), with math matrix notation.

Parameters:
i Number of row (1..4)
j Number of column (1..4)
template<class T>
const T& Matrix4< T >::operator() ( int  i,
int  j 
) const [inline]

Get constant reference to element at position (i,j), with math matrix notation.

Parameters:
i Number of row (1..4)
j Number of column (1..4)
template<class T>
Vector4<T> Matrix4< T >::operator* ( const Vector4< T > &  rhs  )  const [inline]

Multiplication operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T> Matrix4< T >::operator* ( rhs  )  const [inline]

Multiplication operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Vector3<T> Matrix4< T >::operator* ( const Vector3< T > &  rhs  )  const [inline]

Multiplication operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T> Matrix4< T >::operator* ( Matrix4< T >  rhs  )  const [inline]

Multiplication operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T> Matrix4< T >::operator+ ( const Matrix4< T > &  rhs  )  const [inline]

Addition operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T> Matrix4< T >::operator+ ( rhs  )  const [inline]

Addition operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T> Matrix4< T >::operator- ( rhs  )  const [inline]

Subtraction operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T> Matrix4< T >::operator- ( const Matrix4< T > &  rhs  )  const [inline]

Subtraction operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T> Matrix4< T >::operator/ ( rhs  )  const [inline]

Division operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T>& Matrix4< T >::operator= ( const Matrix4< T > &  rhs  )  [inline]

Copy operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
template<class FromT >
Matrix4<T>& Matrix4< T >::operator= ( const Matrix4< FromT > &  rhs  )  [inline]

Copy casting operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
Matrix4<T>& Matrix4< T >::operator= ( const T *  rhs  )  [inline]

Copy operator.

Parameters:
rhs Right hand side argument of binary operator.
template<class T>
bool Matrix4< T >::operator== ( const Matrix4< T > &  rhs  )  const [inline]

Equality test operator.

Parameters:
rhs Right hand side argument of binary operator.
Note:
Test of equality is based of threshold EPSILON value. To be two values equal, must satisfy this condition all elements of matrix | lhs[i] - rhs[i] | < EPSILON, same for y-coordinate, z-coordinate, and w-coordinate.
template<class T>
void Matrix4< T >::setRotation ( const Matrix3< T > &  m  )  [inline]

Sets rotation part (matrix 3x3) of matrix.

Parameters:
m Rotation part of matrix
template<class T>
void Matrix4< T >::setTranslation ( const Vector3< T > &  v  )  [inline]

Sets translation part of matrix.

Parameters:
v Vector of translation to be set.
template<class T>
std::string Matrix4< T >::toString (  )  const [inline]

Gets string representation.

template<class T>
Matrix4<T> Matrix4< T >::transpose (  )  [inline]

Transpose matrix.


Friends And Related Function Documentation

template<class T>
std::ostream& operator<< ( std::ostream &  lhs,
const Matrix4< T > &  rhs 
) [friend]

Output to stream operator.

Parameters:
lhs Left hand side argument of operator (commonly ostream instance).
rhs Right hand side argument of operator.
Returns:
Left hand side argument - the ostream object passed to operator.

Member Data Documentation

template<class T>
T Matrix4< T >::data[16]

Data stored in column major order.


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