Irrlicht 3D Engine
irr::core::CMatrix4< T > Class Template Reference

4x4 matrix. Mostly used as transformation matrix for 3d calculations. More...

#include <matrix4.h>

Public Types

enum  eConstructor {
  EM4CONST_NOTHING = 0, EM4CONST_COPY, EM4CONST_IDENTITY, EM4CONST_TRANSPOSED,
  EM4CONST_INVERSE, EM4CONST_INVERSE_TRANSPOSED
}
 Constructor Flags. More...
 

Public Member Functions

 CMatrix4 (eConstructor constructor=EM4CONST_IDENTITY)
 Default constructor. More...
 
 CMatrix4 (const T &r0c0, const T &r0c1, const T &r0c2, const T &r0c3, const T &r1c0, const T &r1c1, const T &r1c2, const T &r1c3, const T &r2c0, const T &r2c1, const T &r2c2, const T &r2c3, const T &r3c0, const T &r3c1, const T &r3c2, const T &r3c3)
 Constructor with value initialization. More...
 
 CMatrix4 (const CMatrix4< T > &other, eConstructor constructor=EM4CONST_COPY)
 Copy constructor. More...
 
void buildAxisAlignedBillboard (const core::vector3df &camPos, const core::vector3df &center, const core::vector3df &translation, const core::vector3df &axis, const core::vector3df &from)
 Builds a matrix which rotates a source vector to a look vector over an arbitrary axis. More...
 
CMatrix4< T > & buildCameraLookAtMatrixLH (const vector3df &position, const vector3df &target, const vector3df &upVector)
 Builds a left-handed look-at matrix. More...
 
CMatrix4< T > & buildCameraLookAtMatrixRH (const vector3df &position, const vector3df &target, const vector3df &upVector)
 Builds a right-handed look-at matrix. More...
 
CMatrix4< T > & buildNDCToDCMatrix (const core::rect< s32 > &area, f32 zScale)
 Builds a matrix which transforms a normalized Device Coordinate to Device Coordinates. More...
 
CMatrix4< T > & buildProjectionMatrixOrthoLH (f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar, bool zClipFromZero=true)
 Builds a left-handed orthogonal projection matrix. More...
 
CMatrix4< T > & buildProjectionMatrixOrthoRH (f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar, bool zClipFromZero=true)
 Builds a right-handed orthogonal projection matrix. More...
 
CMatrix4< T > & buildProjectionMatrixPerspectiveFovInfinityLH (f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 epsilon=0)
 Builds a left-handed perspective projection matrix based on a field of view, with far plane at infinity. More...
 
CMatrix4< T > & buildProjectionMatrixPerspectiveFovLH (f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero=true)
 Builds a left-handed perspective projection matrix based on a field of view. More...
 
CMatrix4< T > & buildProjectionMatrixPerspectiveFovRH (f32 fieldOfViewRadians, f32 aspectRatio, f32 zNear, f32 zFar, bool zClipFromZero=true)
 Builds a right-handed perspective projection matrix based on a field of view. More...
 
CMatrix4< T > & buildProjectionMatrixPerspectiveLH (f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar, bool zClipFromZero=true)
 Builds a left-handed perspective projection matrix. More...
 
CMatrix4< T > & buildProjectionMatrixPerspectiveRH (f32 widthOfViewVolume, f32 heightOfViewVolume, f32 zNear, f32 zFar, bool zClipFromZero=true)
 Builds a right-handed perspective projection matrix. More...
 
CMatrix4< T > & buildRotateFromTo (const core::vector3df &from, const core::vector3df &to)
 Builds a matrix that rotates from one vector to another. More...
 
CMatrix4< T > & buildShadowMatrix (const core::vector3df &light, core::plane3df plane, f32 point=1.0f)
 Builds a matrix that flattens geometry into a plane. More...
 
CMatrix4< T > & buildTextureTransform (f32 rotateRad, const core::vector2df &rotatecenter, const core::vector2df &translate, const core::vector2df &scale)
 Set to a texture transformation matrix with the given parameters. More...
 
bool equals (const core::CMatrix4< T > &other, const T tolerance=(T) ROUNDING_ERROR_f64) const
 Compare two matrices using the equal method. More...
 
bool getDefinitelyIdentityMatrix () const
 Gets if the matrix is definitely identity matrix. More...
 
bool getInverse (CMatrix4< T > &out) const
 Gets the inverse matrix of this one. More...
 
bool getInversePrimitive (CMatrix4< T > &out) const
 Inverts a primitive matrix which only contains a translation and a rotation. More...
 
core::vector3d< T > getRotationDegrees (const vector3d< T > &scale) const
 Get the rotation, as set by setRotation() when you already know the scale. More...
 
core::vector3d< T > getRotationDegrees () const
 Returns the rotation, as set by setRotation(). More...
 
core::vector3d< T > getScale () const
 Get Scale. More...
 
void getTextureScale (f32 &sx, f32 &sy) const
 Get texture transformation scale. More...
 
void getTextureTranslate (f32 &x, f32 &y) const
 Get texture transformation translation. More...
 
vector3d< T > getTranslation () const
 Gets the current translation. More...
 
CMatrix4< T > getTransposed () const
 Gets transposed matrix. More...
 
void getTransposed (CMatrix4< T > &dest) const
 Gets transposed matrix. More...
 
CMatrix4< T > interpolate (const core::CMatrix4< T > &b, f32 time) const
 Creates a new matrix as interpolated matrix from two other ones. More...
 
void inverseRotateVect (vector3df &vect) const
 Rotate a vector by the inverse of the rotation part of this matrix. More...
 
void inverseTranslateVect (vector3df &vect) const
 Translate a vector by the inverse of the translation part of this matrix. More...
 
bool isIdentity () const
 Returns true if the matrix is the identity matrix. More...
 
bool isIdentity_integer_base () const
 Returns true if the matrix is the identity matrix. More...
 
bool isOrthogonal () const
 Returns true if the matrix is orthogonal. More...
 
CMatrix4< T > & makeIdentity ()
 Set matrix to identity. More...
 
bool makeInverse ()
 Calculates inverse of matrix. Slow. More...
 
void multiplyWith1x4Matrix (T *matrix) const
 Multiplies this matrix by a 1x4 matrix. More...
 
CMatrix4< T > operator * (const CMatrix4< T > &other) const
 Multiply by another matrix. More...
 
CMatrix4< T > operator * (const T &scalar) const
 Multiply by scalar. More...
 
CMatrix4< T > & operator *= (const CMatrix4< T > &other)
 Multiply by another matrix. More...
 
CMatrix4< T > & operator *= (const T &scalar)
 Multiply by scalar. More...
 
bool operator!= (const CMatrix4< T > &other) const
 Returns true if other matrix is not equal to this matrix. More...
 
T & operator() (const s32 row, const s32 col)
 Simple operator for directly accessing every element of the matrix. More...
 
const T & operator() (const s32 row, const s32 col) const
 Simple operator for directly accessing every element of the matrix. More...
 
CMatrix4< T > operator+ (const CMatrix4< T > &other) const
 Add another matrix. More...
 
CMatrix4< T > & operator+= (const CMatrix4< T > &other)
 Add another matrix. More...
 
CMatrix4< T > operator- (const CMatrix4< T > &other) const
 Subtract another matrix. More...
 
CMatrix4< T > & operator-= (const CMatrix4< T > &other)
 Subtract another matrix. More...
 
CMatrix4< T > & operator= (const CMatrix4< T > &other)
 Sets this matrix equal to the other matrix. More...
 
CMatrix4< T > & operator= (const T &scalar)
 Sets all elements of this matrix to the value. More...
 
bool operator== (const CMatrix4< T > &other) const
 Returns true if other matrix is equal to this matrix. More...
 
T & operator[] (u32 index)
 Simple operator for linearly accessing every element of the matrix. More...
 
const T & operator[] (u32 index) const
 Simple operator for linearly accessing every element of the matrix. More...
 
const T * pointer () const
 Returns pointer to internal array. More...
 
T * pointer ()
 
void rotateVect (vector3df &vect) const
 Rotate a vector by the rotation part of this matrix. More...
 
void rotateVect (core::vector3df &out, const core::vector3df &in) const
 An alternate transform vector method, writing into a second vector. More...
 
void rotateVect (T *out, const core::vector3df &in) const
 An alternate transform vector method, writing into an array of 3 floats. More...
 
CMatrix4< T > & setbyproduct (const CMatrix4< T > &other_a, const CMatrix4< T > &other_b)
 set this matrix to the product of two matrices More...
 
CMatrix4< T > & setbyproduct_nocheck (const CMatrix4< T > &other_a, const CMatrix4< T > &other_b)
 Set this matrix to the product of two matrices. More...
 
void setDefinitelyIdentityMatrix (bool isDefinitelyIdentityMatrix)
 Sets if the matrix is definitely identity matrix. More...
 
CMatrix4< T > & setInverseRotationDegrees (const vector3d< T > &rotation)
 Make an inverted rotation matrix from Euler angles. More...
 
CMatrix4< T > & setInverseRotationRadians (const vector3d< T > &rotation)
 Make an inverted rotation matrix from Euler angles. More...
 
CMatrix4< T > & setInverseTranslation (const vector3d< T > &translation)
 Set the inverse translation of the current matrix. Will erase any previous values. More...
 
CMatrix4< T > & setM (const T *data)
 Sets all matrix data members at once. More...
 
CMatrix4< T > & setRotationAxisRadians (const T &angle, const vector3d< T > &axis)
 Make a rotation matrix from angle and axis, assuming left handed rotation. More...
 
void setRotationCenter (const core::vector3df &center, const core::vector3df &translate)
 Builds a combined matrix which translates to a center before rotation and translates from origin afterwards. More...
 
CMatrix4< T > & setRotationDegrees (const vector3d< T > &rotation)
 Make a rotation matrix from Euler angles. The 4th row and column are unmodified. More...
 
CMatrix4< T > & setRotationRadians (const vector3d< T > &rotation)
 Make a rotation matrix from Euler angles. The 4th row and column are unmodified. More...
 
CMatrix4< T > & setScale (const vector3d< T > &scale)
 Set Scale. More...
 
CMatrix4< T > & setScale (const T scale)
 Set Scale. More...
 
CMatrix4< T > & setTextureRotationCenter (f32 radAngle)
 Set texture transformation rotation. More...
 
CMatrix4< T > & setTextureScale (f32 sx, f32 sy)
 Set texture transformation scale. More...
 
CMatrix4< T > & setTextureScaleCenter (f32 sx, f32 sy)
 Set texture transformation scale, and recenter at (0.5,0.5) More...
 
CMatrix4< T > & setTextureTranslate (f32 x, f32 y)
 Set texture transformation translation. More...
 
CMatrix4< T > & setTextureTranslateTransposed (f32 x, f32 y)
 Set texture transformation translation, using a transposed representation. More...
 
CMatrix4< T > & setTranslation (const vector3d< T > &translation)
 Set the translation of the current matrix. Will erase any previous values. More...
 
void transformBox (core::aabbox3d< f32 > &box) const
 Transforms a axis aligned bounding box. More...
 
void transformBoxEx (core::aabbox3d< f32 > &box) const
 Transforms a axis aligned bounding box. More...
 
void transformPlane (core::plane3d< f32 > &plane) const
 Transforms a plane by this matrix. More...
 
void transformPlane (const core::plane3d< f32 > &in, core::plane3d< f32 > &out) const
 Transforms a plane by this matrix. More...
 
void transformVec3 (T *out, const T *in) const
 An alternate transform vector method, reading from and writing to an array of 3 floats. More...
 
void transformVec4 (T *out, const T *in) const
 An alternate transform vector method, reading from and writing to an array of 4 floats. More...
 
void transformVect (vector3df &vect) const
 Transforms the vector by this matrix. More...
 
void transformVect (vector3df &out, const vector3df &in) const
 Transforms input vector by this matrix and stores result in output vector. More...
 
void transformVect (T *out, const core::vector3df &in) const
 An alternate transform vector method, writing into an array of 4 floats. More...
 
void translateVect (vector3df &vect) const
 Translate a vector by the translation part of this matrix. More...
 

Detailed Description

template<class T>
class irr::core::CMatrix4< T >

4x4 matrix. Mostly used as transformation matrix for 3d calculations.

The matrix is a D3D style matrix, row major with translations in the 4th row.

Definition at line 45 of file matrix4.h.

Member Enumeration Documentation

◆ eConstructor

template<class T>
enum irr::core::CMatrix4::eConstructor

Constructor Flags.

Enumerator
EM4CONST_NOTHING 
EM4CONST_COPY 
EM4CONST_IDENTITY 
EM4CONST_TRANSPOSED 
EM4CONST_INVERSE 
EM4CONST_INVERSE_TRANSPOSED 

Definition at line 50 of file matrix4.h.

Constructor & Destructor Documentation

◆ CMatrix4() [1/3]

template<class T >
irr::core::CMatrix4< T >::CMatrix4 ( eConstructor  constructor = EM4CONST_IDENTITY)
inline

Default constructor.

Parameters
constructorChoose the initialization style

Definition at line 459 of file matrix4.h.

◆ CMatrix4() [2/3]

template<class T>
irr::core::CMatrix4< T >::CMatrix4 ( const T &  r0c0,
const T &  r0c1,
const T &  r0c2,
const T &  r0c3,
const T &  r1c0,
const T &  r1c1,
const T &  r1c2,
const T &  r1c3,
const T &  r2c0,
const T &  r2c1,
const T &  r2c2,
const T &  r2c3,
const T &  r3c0,
const T &  r3c1,
const T &  r3c2,
const T &  r3c3 
)
inline

Constructor with value initialization.

Definition at line 65 of file matrix4.h.

◆ CMatrix4() [3/3]

template<class T >
irr::core::CMatrix4< T >::CMatrix4 ( const CMatrix4< T > &  other,
eConstructor  constructor = EM4CONST_COPY 
)
inline

Copy constructor.

Parameters
otherOther matrix to copy from
constructorChoose the initialization style

Definition at line 482 of file matrix4.h.

References irr::core::CMatrix4< T >::getInverse(), and irr::core::CMatrix4< T >::getTransposed().

Member Function Documentation

◆ buildAxisAlignedBillboard()

template<class T >
void irr::core::CMatrix4< T >::buildAxisAlignedBillboard ( const core::vector3df camPos,
const core::vector3df center,
const core::vector3df translation,
const core::vector3df axis,
const core::vector3df from 
)
inline

Builds a matrix which rotates a source vector to a look vector over an arbitrary axis.

Parameters
camPosviewer position in world coo
centerobject position in world-coo and rotation pivot
translationobject final translation from center
axisaxis to rotate about
fromsource vector to rotate from
camPosviewer position in world coord
centerobject position in world-coord, rotation pivot
translationobject final translation from center
axisaxis to rotate about
fromsource vector to rotate from

Definition at line 2120 of file matrix4.h.

References irr::core::vector3d< T >::crossProduct(), irr::core::vector3d< T >::dotProduct(), irr::core::vector3d< T >::normalize(), irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ buildCameraLookAtMatrixLH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildCameraLookAtMatrixLH ( const vector3df position,
const vector3df target,
const vector3df upVector 
)
inline

◆ buildCameraLookAtMatrixRH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildCameraLookAtMatrixRH ( const vector3df position,
const vector3df target,
const vector3df upVector 
)
inline

◆ buildNDCToDCMatrix()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildNDCToDCMatrix ( const core::rect< s32 > &  area,
f32  zScale 
)
inline

Builds a matrix which transforms a normalized Device Coordinate to Device Coordinates.

Used to scale <-1,-1><1,1> to viewport, for example from <-1,-1> <1,1> to the viewport <0,0><0,640>

Definition at line 2043 of file matrix4.h.

References irr::core::rect< T >::getHeight(), irr::core::rect< T >::getWidth(), irr::core::rect< T >::LowerRightCorner, and irr::core::rect< T >::UpperLeftCorner.

◆ buildProjectionMatrixOrthoLH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildProjectionMatrixOrthoLH ( f32  widthOfViewVolume,
f32  heightOfViewVolume,
f32  zNear,
f32  zFar,
bool  zClipFromZero = true 
)
inline

Builds a left-handed orthogonal projection matrix.

Definition at line 1689 of file matrix4.h.

References _IRR_DEBUG_BREAK_IF.

◆ buildProjectionMatrixOrthoRH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildProjectionMatrixOrthoRH ( f32  widthOfViewVolume,
f32  heightOfViewVolume,
f32  zNear,
f32  zFar,
bool  zClipFromZero = true 
)
inline

Builds a right-handed orthogonal projection matrix.

Definition at line 1735 of file matrix4.h.

References _IRR_DEBUG_BREAK_IF.

◆ buildProjectionMatrixPerspectiveFovInfinityLH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildProjectionMatrixPerspectiveFovInfinityLH ( f32  fieldOfViewRadians,
f32  aspectRatio,
f32  zNear,
f32  epsilon = 0 
)
inline

Builds a left-handed perspective projection matrix based on a field of view, with far plane at infinity.

Definition at line 1653 of file matrix4.h.

References _IRR_DEBUG_BREAK_IF, and irr::core::reciprocal().

◆ buildProjectionMatrixPerspectiveFovLH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildProjectionMatrixPerspectiveFovLH ( f32  fieldOfViewRadians,
f32  aspectRatio,
f32  zNear,
f32  zFar,
bool  zClipFromZero = true 
)
inline

Builds a left-handed perspective projection matrix based on a field of view.

Definition at line 1605 of file matrix4.h.

References _IRR_DEBUG_BREAK_IF, and irr::core::reciprocal().

◆ buildProjectionMatrixPerspectiveFovRH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildProjectionMatrixPerspectiveFovRH ( f32  fieldOfViewRadians,
f32  aspectRatio,
f32  zNear,
f32  zFar,
bool  zClipFromZero = true 
)
inline

Builds a right-handed perspective projection matrix based on a field of view.

Definition at line 1557 of file matrix4.h.

References _IRR_DEBUG_BREAK_IF, and irr::core::reciprocal().

◆ buildProjectionMatrixPerspectiveLH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildProjectionMatrixPerspectiveLH ( f32  widthOfViewVolume,
f32  heightOfViewVolume,
f32  zNear,
f32  zFar,
bool  zClipFromZero = true 
)
inline

Builds a left-handed perspective projection matrix.

Definition at line 1827 of file matrix4.h.

References _IRR_DEBUG_BREAK_IF.

◆ buildProjectionMatrixPerspectiveRH()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildProjectionMatrixPerspectiveRH ( f32  widthOfViewVolume,
f32  heightOfViewVolume,
f32  zNear,
f32  zFar,
bool  zClipFromZero = true 
)
inline

Builds a right-handed perspective projection matrix.

Definition at line 1781 of file matrix4.h.

References _IRR_DEBUG_BREAK_IF.

◆ buildRotateFromTo()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildRotateFromTo ( const core::vector3df from,
const core::vector3df to 
)
inline

Builds a matrix that rotates from one vector to another.

Parameters
fromvector to rotate from
tovector to rotate to
fromvector to rotate from
tovector to rotate to
http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToMatrix/index.htm

Definition at line 2064 of file matrix4.h.

References irr::core::vector3d< T >::crossProduct(), irr::core::vector3d< T >::dotProduct(), irr::core::vector3d< T >::normalize(), irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ buildShadowMatrix()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildShadowMatrix ( const core::vector3df light,
core::plane3df  plane,
f32  point = 1.0f 
)
inline

Builds a matrix that flattens geometry into a plane.

Parameters
lightlight source
planeplane into which the geometry if flattened into
pointvalue between 0 and 1, describing the light source. If this is 1, it is a point light, if it is 0, it is a directional light.

Definition at line 1873 of file matrix4.h.

References irr::core::plane3d< T >::D, irr::core::vector3d< T >::dotProduct(), irr::core::plane3d< T >::Normal, irr::core::vector3d< T >::normalize(), irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ buildTextureTransform()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::buildTextureTransform ( f32  rotateRad,
const core::vector2df rotatecenter,
const core::vector2df translate,
const core::vector2df scale 
)
inline

Set to a texture transformation matrix with the given parameters.

Generate texture coordinates as linear functions so that: u = Ux*x + Uy*y + Uz*z + Uw v = Vx*x + Vy*y + Vz*z + Vw The matrix M for this case is: Ux Vx 0 0 Uy Vy 0 0 Uz Vz 0 0 Uw Vw 0 0

Definition at line 2195 of file matrix4.h.

References irr::core::vector2d< T >::X, and irr::core::vector2d< T >::Y.

◆ equals()

template<class T >
bool irr::core::CMatrix4< T >::equals ( const core::CMatrix4< T > &  other,
const T  tolerance = (T)ROUNDING_ERROR_f64 
) const
inline

Compare two matrices using the equal method.

Definition at line 2354 of file matrix4.h.

References irr::core::equals().

◆ getDefinitelyIdentityMatrix()

template<class T >
bool irr::core::CMatrix4< T >::getDefinitelyIdentityMatrix ( ) const
inline

Gets if the matrix is definitely identity matrix.

Definition at line 2342 of file matrix4.h.

◆ getInverse()

template<class T >
bool irr::core::CMatrix4< T >::getInverse ( CMatrix4< T > &  out) const
inline

Gets the inverse matrix of this one.

Parameters
outwhere result matrix is written to.
Returns
Returns false if there is no inverse matrix.

Calculates the inverse of this Matrix The inverse is calculated using Cramers rule. If no inverse exists then 'false' is returned.

Definition at line 1372 of file matrix4.h.

References FLT_MIN, irr::core::iszero(), and irr::core::reciprocal().

Referenced by irr::core::CMatrix4< T >::CMatrix4().

◆ getInversePrimitive()

template<class T >
bool irr::core::CMatrix4< T >::getInversePrimitive ( CMatrix4< T > &  out) const
inline

Inverts a primitive matrix which only contains a translation and a rotation.

Parameters
outwhere result matrix is written to.

Inverts a primitive matrix which only contains a translation and a rotation

Parameters
outwhere result matrix is written to.

Definition at line 1458 of file matrix4.h.

◆ getRotationDegrees() [1/2]

template<class T >
core::vector3d< T > irr::core::CMatrix4< T >::getRotationDegrees ( const vector3d< T > &  scale_) const
inline

Get the rotation, as set by setRotation() when you already know the scale.

Returns a rotation that is equivalent to that set by setRotationDegrees().

If you already know the scale then this function is faster than the other getRotationDegrees overload. NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values.

This code was sent in by Chev. Note that it does not necessarily return the same Euler angles as those set by setRotationDegrees(), but the rotation will be equivalent, i.e. will have the same result when used to rotate a vector or node. This code was originally written by by Chev.

Definition at line 904 of file matrix4.h.

References irr::core::clamp(), irr::core::iszero(), irr::core::RADTODEG64, irr::core::reciprocal(), irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ getRotationDegrees() [2/2]

template<class T >
core::vector3d< T > irr::core::CMatrix4< T >::getRotationDegrees ( ) const
inline

Returns the rotation, as set by setRotation().

Returns a rotation that is equivalent to that set by setRotationDegrees().

NOTE: You will have the same end-rotation as used in setRotation, but it might not use the same axis values.

This code was sent in by Chev. Note that it does not necessarily return the same Euler angles as those set by setRotationDegrees(), but the rotation will be equivalent, i.e. will have the same result when used to rotate a vector or node. This code was originally written by by Chev.

Definition at line 964 of file matrix4.h.

◆ getScale()

template<class T >
vector3d< T > irr::core::CMatrix4< T >::getScale ( ) const
inline

Get Scale.

Returns the absolute values of the scales of the matrix.

Note that this returns the absolute (positive) values unless only scale is set. Unfortunately it does not appear to be possible to extract any original negative values. The best that we could do would be to arbitrarily make one scale negative if one or three of them were negative. FIXME - return the original values.

Definition at line 837 of file matrix4.h.

References irr::core::iszero().

◆ getTextureScale()

template<class T >
void irr::core::CMatrix4< T >::getTextureScale ( f32 sx,
f32 sy 
) const
inline

Get texture transformation scale.

Parameters
sxReturns x axis scale factor
syReturns y axis scale factor

Definition at line 2294 of file matrix4.h.

◆ getTextureTranslate()

template<class T >
void irr::core::CMatrix4< T >::getTextureTranslate ( f32 x,
f32 y 
) const
inline

Get texture transformation translation.

Parameters
xreturns offset on x axis
yreturns offset on y axis

Definition at line 2264 of file matrix4.h.

◆ getTranslation()

template<class T >
vector3d< T > irr::core::CMatrix4< T >::getTranslation ( ) const
inline

Gets the current translation.

Definition at line 786 of file matrix4.h.

Referenced by irr::scene::ISceneNode::getAbsolutePosition().

◆ getTransposed() [1/2]

template<class T >
CMatrix4< T > irr::core::CMatrix4< T >::getTransposed ( ) const
inline

Gets transposed matrix.

Definition at line 2004 of file matrix4.h.

Referenced by irr::core::CMatrix4< T >::CMatrix4().

◆ getTransposed() [2/2]

template<class T >
void irr::core::CMatrix4< T >::getTransposed ( CMatrix4< T > &  dest) const
inline

Gets transposed matrix.

Definition at line 2014 of file matrix4.h.

◆ interpolate()

template<class T >
CMatrix4< T > irr::core::CMatrix4< T >::interpolate ( const core::CMatrix4< T > &  b,
f32  time 
) const
inline

Creates a new matrix as interpolated matrix from two other ones.

Parameters
bother matrix to interpolate with
timeMust be a value between 0 and 1.

Definition at line 1987 of file matrix4.h.

◆ inverseRotateVect()

template<class T >
void irr::core::CMatrix4< T >::inverseRotateVect ( vector3df vect) const
inline

Rotate a vector by the inverse of the rotation part of this matrix.

Definition at line 1183 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ inverseTranslateVect()

template<class T >
void irr::core::CMatrix4< T >::inverseTranslateVect ( vector3df vect) const
inline

Translate a vector by the inverse of the translation part of this matrix.

Definition at line 1355 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ isIdentity()

template<class T >
bool irr::core::CMatrix4< T >::isIdentity ( ) const
inline

Returns true if the matrix is the identity matrix.

Definition at line 1055 of file matrix4.h.

References irr::core::equals().

Referenced by irr::core::CMatrix4< T >::operator *(), irr::core::CMatrix4< T >::operator *=(), and irr::core::CMatrix4< T >::setbyproduct().

◆ isIdentity_integer_base()

template<class T >
bool irr::core::CMatrix4< T >::isIdentity_integer_base ( ) const
inline

Returns true if the matrix is the identity matrix.

Definition at line 1122 of file matrix4.h.

References F32_VALUE_1, and irr::core::IR().

◆ isOrthogonal()

template<class T >
bool irr::core::CMatrix4< T >::isOrthogonal ( ) const
inline

Returns true if the matrix is orthogonal.

Definition at line 1093 of file matrix4.h.

References irr::core::iszero().

◆ makeIdentity()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::makeIdentity ( )
inline

Set matrix to identity.

Definition at line 1039 of file matrix4.h.

◆ makeInverse()

template<class T >
bool irr::core::CMatrix4< T >::makeInverse ( )
inline

Calculates inverse of matrix. Slow.

Returns
Returns false if there is no inverse matrix.

Definition at line 1489 of file matrix4.h.

◆ multiplyWith1x4Matrix()

template<class T >
void irr::core::CMatrix4< T >::multiplyWith1x4Matrix ( T *  matrix) const
inline

Multiplies this matrix by a 1x4 matrix.

Definition at line 1333 of file matrix4.h.

◆ operator *() [1/2]

template<class T >
CMatrix4< T > irr::core::CMatrix4< T >::operator * ( const CMatrix4< T > &  other) const
inline

Multiply by another matrix.

multiply by another matrix

Calculate other*this

Definition at line 747 of file matrix4.h.

References irr::core::CMatrix4< T >::isIdentity().

◆ operator *() [2/2]

template<class T >
CMatrix4< T > irr::core::CMatrix4< T >::operator * ( const T &  scalar) const
inline

Multiply by scalar.

Definition at line 618 of file matrix4.h.

◆ operator *=() [1/2]

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::operator *= ( const CMatrix4< T > &  other)
inline

Multiply by another matrix.

Calculate and return other*this

Definition at line 668 of file matrix4.h.

References irr::core::CMatrix4< T >::isIdentity().

◆ operator *=() [2/2]

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::operator *= ( const T &  scalar)
inline

Multiply by scalar.

Definition at line 644 of file matrix4.h.

◆ operator!=()

template<class T >
bool irr::core::CMatrix4< T >::operator!= ( const CMatrix4< T > &  other) const
inline

Returns true if other matrix is not equal to this matrix.

Definition at line 1549 of file matrix4.h.

◆ operator()() [1/2]

template<class T>
T& irr::core::CMatrix4< T >::operator() ( const s32  row,
const s32  col 
)
inline

Simple operator for directly accessing every element of the matrix.

Definition at line 82 of file matrix4.h.

◆ operator()() [2/2]

template<class T>
const T& irr::core::CMatrix4< T >::operator() ( const s32  row,
const s32  col 
) const
inline

Simple operator for directly accessing every element of the matrix.

Definition at line 91 of file matrix4.h.

◆ operator+()

template<class T >
CMatrix4< T > irr::core::CMatrix4< T >::operator+ ( const CMatrix4< T > &  other) const
inline

Add another matrix.

Definition at line 518 of file matrix4.h.

◆ operator+=()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::operator+= ( const CMatrix4< T > &  other)
inline

Add another matrix.

Definition at line 544 of file matrix4.h.

◆ operator-()

template<class T >
CMatrix4< T > irr::core::CMatrix4< T >::operator- ( const CMatrix4< T > &  other) const
inline

Subtract another matrix.

Definition at line 568 of file matrix4.h.

◆ operator-=()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::operator-= ( const CMatrix4< T > &  other)
inline

Subtract another matrix.

Definition at line 594 of file matrix4.h.

◆ operator=() [1/2]

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::operator= ( const CMatrix4< T > &  other)
inline

Sets this matrix equal to the other matrix.

Definition at line 1508 of file matrix4.h.

◆ operator=() [2/2]

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::operator= ( const T &  scalar)
inline

Sets all elements of this matrix to the value.

Definition at line 1521 of file matrix4.h.

◆ operator==()

template<class T >
bool irr::core::CMatrix4< T >::operator== ( const CMatrix4< T > &  other) const
inline

Returns true if other matrix is equal to this matrix.

Definition at line 1534 of file matrix4.h.

◆ operator[]() [1/2]

template<class T>
T& irr::core::CMatrix4< T >::operator[] ( u32  index)
inline

Simple operator for linearly accessing every element of the matrix.

Definition at line 94 of file matrix4.h.

◆ operator[]() [2/2]

template<class T>
const T& irr::core::CMatrix4< T >::operator[] ( u32  index) const
inline

Simple operator for linearly accessing every element of the matrix.

Definition at line 103 of file matrix4.h.

◆ pointer() [1/2]

template<class T>
const T* irr::core::CMatrix4< T >::pointer ( ) const
inline

Returns pointer to internal array.

Definition at line 112 of file matrix4.h.

◆ pointer() [2/2]

template<class T>
T* irr::core::CMatrix4< T >::pointer ( )
inline

Definition at line 113 of file matrix4.h.

◆ rotateVect() [1/3]

template<class T >
void irr::core::CMatrix4< T >::rotateVect ( vector3df vect) const
inline

Rotate a vector by the rotation part of this matrix.

Definition at line 1156 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ rotateVect() [2/3]

template<class T >
void irr::core::CMatrix4< T >::rotateVect ( core::vector3df out,
const core::vector3df in 
) const
inline

An alternate transform vector method, writing into a second vector.

Definition at line 1166 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ rotateVect() [3/3]

template<class T >
void irr::core::CMatrix4< T >::rotateVect ( T *  out,
const core::vector3df in 
) const
inline

An alternate transform vector method, writing into an array of 3 floats.

Definition at line 1175 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ setbyproduct()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setbyproduct ( const CMatrix4< T > &  other_a,
const CMatrix4< T > &  other_b 
)
inline

set this matrix to the product of two matrices

multiply by another matrix

Calculate b*a

Definition at line 730 of file matrix4.h.

References irr::core::CMatrix4< T >::isIdentity().

◆ setbyproduct_nocheck()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setbyproduct_nocheck ( const CMatrix4< T > &  other_a,
const CMatrix4< T > &  other_b 
)
inline

Set this matrix to the product of two matrices.

multiply by another matrix

Calculate b*a, no optimization used, use it if you know you never have a identity matrix

Definition at line 695 of file matrix4.h.

◆ setDefinitelyIdentityMatrix()

template<class T >
void irr::core::CMatrix4< T >::setDefinitelyIdentityMatrix ( bool  isDefinitelyIdentityMatrix)
inline

Sets if the matrix is definitely identity matrix.

Definition at line 2330 of file matrix4.h.

Referenced by irr::core::quaternion::getMatrix(), irr::core::quaternion::getMatrix_transposed(), and irr::core::quaternion::getMatrixFast().

◆ setInverseRotationDegrees()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setInverseRotationDegrees ( const vector3d< T > &  rotation)
inline

Make an inverted rotation matrix from Euler angles.

The 4th row and column are unmodified.

Definition at line 861 of file matrix4.h.

References irr::core::DEGTORAD.

◆ setInverseRotationRadians()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setInverseRotationRadians ( const vector3d< T > &  rotation)
inline

Make an inverted rotation matrix from Euler angles.

Sets matrix to rotation matrix of inverse angles given as parameters.

The 4th row and column are unmodified.

Definition at line 972 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ setInverseTranslation()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setInverseTranslation ( const vector3d< T > &  translation)
inline

Set the inverse translation of the current matrix. Will erase any previous values.

Definition at line 805 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ setM()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setM ( const T *  data)
inline

Sets all matrix data members at once.

Definition at line 2317 of file matrix4.h.

◆ setRotationAxisRadians()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setRotationAxisRadians ( const T &  angle,
const vector3d< T > &  axis 
)
inline

Make a rotation matrix from angle and axis, assuming left handed rotation.

Sets matrix to rotation matrix defined by axis and angle, assuming LH rotation.

The 4th row and column are unmodified.

Definition at line 1003 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ setRotationCenter()

template<class T >
void irr::core::CMatrix4< T >::setRotationCenter ( const core::vector3df center,
const core::vector3df translate 
)
inline

Builds a combined matrix which translates to a center before rotation and translates from origin afterwards.

Builds a combined matrix which translate to a center before rotation and translate afterward.

Parameters
centerPosition to rotate around
translateTranslation applied after the rotation

Definition at line 2171 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

Referenced by irr::core::quaternion::getMatrixCenter().

◆ setRotationDegrees()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setRotationDegrees ( const vector3d< T > &  rotation)
inline

Make a rotation matrix from Euler angles. The 4th row and column are unmodified.

Definition at line 855 of file matrix4.h.

References irr::core::DEGTORAD.

Referenced by irr::scene::ISceneNode::getRelativeTransformation().

◆ setRotationRadians()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setRotationRadians ( const vector3d< T > &  rotation)
inline

Make a rotation matrix from Euler angles. The 4th row and column are unmodified.

Definition at line 867 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ setScale() [1/2]

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setScale ( const vector3d< T > &  scale)
inline

◆ setScale() [2/2]

template<class T>
CMatrix4<T>& irr::core::CMatrix4< T >::setScale ( const T  scale)
inline

Set Scale.

Definition at line 216 of file matrix4.h.

References irr::core::CMatrix4< T >::setScale().

Referenced by irr::core::CMatrix4< T >::setScale().

◆ setTextureRotationCenter()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setTextureRotationCenter ( f32  radAngle)
inline

Set texture transformation rotation.

Rotate about z axis, recenter at (0.5,0.5). Doesn't clear other elements than those affected

Parameters
radAngleAngle in radians
Returns
Altered matrix

Definition at line 2231 of file matrix4.h.

◆ setTextureScale()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setTextureScale ( f32  sx,
f32  sy 
)
inline

Set texture transformation scale.

Doesn't clear other elements than those affected.

Parameters
sxScale factor on x axis
syScale factor on y axis
Returns
Altered matrix.

Definition at line 2283 of file matrix4.h.

◆ setTextureScaleCenter()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setTextureScaleCenter ( f32  sx,
f32  sy 
)
inline

Set texture transformation scale, and recenter at (0.5,0.5)

Doesn't clear other elements than those affected.

Parameters
sxScale factor on x axis
syScale factor on y axis
Returns
Altered matrix.

Definition at line 2301 of file matrix4.h.

◆ setTextureTranslate()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setTextureTranslate ( f32  x,
f32  y 
)
inline

Set texture transformation translation.

Doesn't clear other elements than those affected.

Parameters
xOffset on x axis
yOffset on y axis
Returns
Altered matrix

Definition at line 2252 of file matrix4.h.

◆ setTextureTranslateTransposed()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setTextureTranslateTransposed ( f32  x,
f32  y 
)
inline

Set texture transformation translation, using a transposed representation.

Doesn't clear other elements than those affected.

Parameters
xOffset on x axis
yOffset on y axis
Returns
Altered matrix

Definition at line 2271 of file matrix4.h.

◆ setTranslation()

template<class T >
CMatrix4< T > & irr::core::CMatrix4< T >::setTranslation ( const vector3d< T > &  translation)
inline

Set the translation of the current matrix. Will erase any previous values.

Definition at line 793 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

Referenced by irr::scene::ISceneNode::getRelativeTransformation().

◆ transformBox()

template<class T >
_IRR_DEPRECATED_ void irr::core::CMatrix4< T >::transformBox ( core::aabbox3d< f32 > &  box) const
inline

Transforms a axis aligned bounding box.

The result box of this operation may not be accurate at all. For correct results, use transformBoxEx()

Transforms the edge-points of a bounding box Deprecated as it's usually not what people need (regards only 2 corners, but other corners might be outside the box after transformation) Use transformBoxEx instead.

Definition at line 1268 of file matrix4.h.

References irr::core::aabbox3d< T >::MaxEdge, irr::core::aabbox3d< T >::MinEdge, and irr::core::aabbox3d< T >::repair().

◆ transformBoxEx()

template<class T >
void irr::core::CMatrix4< T >::transformBoxEx ( core::aabbox3d< f32 > &  box) const
inline

Transforms a axis aligned bounding box.

Transforms a axis aligned bounding box more accurately than transformBox()

The result box of this operation should be accurate, but this operation is slower than transformBox().

Definition at line 1282 of file matrix4.h.

References irr::core::aabbox3d< T >::MaxEdge, irr::core::aabbox3d< T >::MinEdge, irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

Referenced by irr::scene::ISceneNode::getTransformedBoundingBox().

◆ transformPlane() [1/2]

template<class T >
void irr::core::CMatrix4< T >::transformPlane ( core::plane3d< f32 > &  plane) const
inline

◆ transformPlane() [2/2]

template<class T >
void irr::core::CMatrix4< T >::transformPlane ( const core::plane3d< f32 > &  in,
core::plane3d< f32 > &  out 
) const
inline

Transforms a plane by this matrix.

Definition at line 1258 of file matrix4.h.

◆ transformVec3()

template<class T >
void irr::core::CMatrix4< T >::transformVec3 ( T *  out,
const T *  in 
) const
inline

An alternate transform vector method, reading from and writing to an array of 3 floats.

This operation is performed as if the vector was 4d with the 4th component =1 NOTE: out[3] will be written to (4th vector component)

Definition at line 1224 of file matrix4.h.

◆ transformVec4()

template<class T >
void irr::core::CMatrix4< T >::transformVec4 ( T *  out,
const T *  in 
) const
inline

An alternate transform vector method, reading from and writing to an array of 4 floats.

Definition at line 1232 of file matrix4.h.

◆ transformVect() [1/3]

template<class T >
void irr::core::CMatrix4< T >::transformVect ( vector3df vect) const
inline

Transforms the vector by this matrix.

This operation is performed as if the vector was 4d with the 4th component =1

Definition at line 1192 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

Referenced by irr::scene::ISceneNode::getTransformedBoundingBoxEdges(), irr::scene::SVertexPositionTransformManipulator::operator()(), and irr::scene::SViewFrustum::transform().

◆ transformVect() [2/3]

template<class T >
void irr::core::CMatrix4< T >::transformVect ( vector3df out,
const vector3df in 
) const
inline

Transforms input vector by this matrix and stores result in output vector.

This operation is performed as if the vector was 4d with the 4th component =1

Definition at line 1206 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ transformVect() [3/3]

template<class T >
void irr::core::CMatrix4< T >::transformVect ( T *  out,
const core::vector3df in 
) const
inline

An alternate transform vector method, writing into an array of 4 floats.

This operation is performed as if the vector was 4d with the 4th component =1. NOTE: out[3] will be written to (4th vector component)

Definition at line 1215 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.

◆ translateVect()

template<class T >
void irr::core::CMatrix4< T >::translateVect ( vector3df vect) const
inline

Translate a vector by the translation part of this matrix.

This operation is performed as if the vector was 4d with the 4th component =1

Definition at line 1363 of file matrix4.h.

References irr::core::vector3d< T >::X, irr::core::vector3d< T >::Y, and irr::core::vector3d< T >::Z.


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