Matrix with 4x4 elements. More...
#include <kanzi/core/math/matrix4x4.hpp>
Public Types | |
enum | FieldOfViewType { FieldOfViewType::XFov, FieldOfViewType::YFov } |
Field of view type of a camera. More... | |
Public Member Functions | |
optional< Vector3 > | getRotationAngle () const |
Calculates Euler rotation angles of the matrix. More... | |
Vector3 | getScale () const |
Get scale as a vector. More... | |
Vector3 | getTranslation () const |
Get translation. More... | |
float | getTranslationX () const |
Get translation on X axis. More... | |
float | getTranslationY () const |
Get translation on Y axis. More... | |
float | getTranslationZ () const |
Get translation on Z axis. More... | |
Vector3 | getXAxis () const |
Get X axis. More... | |
Vector3 | getYAxis () const |
Get Y axis. More... | |
Vector3 | getZAxis () const |
Get Z axis. More... | |
Matrix4x4 () | |
Default constructor, initializes the matrix to identity matrix. More... | |
Matrix4x4 (float x0, float x1, float x2, float x3, float x4, float x5, float x6, float x7, float x8, float x9, float x10, float x11, float x12, float x13, float x14, float x15) | |
Constructs the matrix from elements in column-major order. More... | |
Matrix4x4 (const Vector3 &x, const Vector3 &y, const Vector3 &z, const Vector3 &translation) | |
Constructs the matrix from four column vectors. More... | |
Matrix4x4 (const Vector4 &x, const Vector4 &y, const Vector4 &z, const Vector4 &translation) | |
Constructs the matrix from four column vectors. More... | |
Vector3 | operator* (const Vector3 &vector) const |
Multiply a 3-component vector with this matrix. More... | |
Vector4 | operator* (const Vector4 &vector) const |
Multiply a 4-component vector with this matrix. More... | |
Matrix4x4 & | operator*= (const Matrix4x4 &m) |
Modifies this matrix by multiplying it with another matrix. More... | |
Matrix4x4 & | operator+= (const Matrix4x4 &v) |
Modifies this matrix by adding another matrix. More... | |
Matrix4x4 & | operator-= (const Matrix4x4 &v) |
Modifies this matrix by subtracting another matrix from this matrix. More... | |
const float & | operator[] (size_t index) const |
Access to individual elements of the matrix. More... | |
float & | operator[] (size_t index) |
Access to individual elements of the matrix. More... | |
void | scale (const Vector3 &scale) |
Scales this matrix. More... | |
void | scaleUniform (float scale) |
Scales this matrix. More... | |
void | setTranslation (Vector3 translation) |
Set translation. More... | |
void | setTranslationX (float translationX) |
Set translation on X axis. More... | |
void | setTranslationY (float translationY) |
Set translation on Y axis. More... | |
void | setTranslationZ (float translationZ) |
Set translation on Z axis. More... | |
void | setXAxis (Vector3 v) |
Set X axis. More... | |
void | setYAxis (Vector3 v) |
Set Y axis. More... | |
void | setZAxis (Vector3 v) |
Set Z axis. More... | |
void | translate (const Vector3 &translate) |
Translates this matrix. More... | |
Matrix4x4 | transposed () const |
Applies a transpose to a matrix. More... | |
Static Public Member Functions | |
static Matrix4x4 | createFromHomogenousMatrix (const Matrix3x3 &matrix, float zTranslation) |
Creates a matrix from an existing homogeneous matrix and Z translation. More... | |
static Matrix4x4 | createFromHomogenousMatrix (const Matrix3x3 &matrix) |
Creates a matrix from an existing homogeneous matrix. More... | |
static Matrix4x4 | createIdentity () |
Creates identity matrix. More... | |
static optional< Matrix4x4 > | createLookAtMatrix (Vector3 position, Vector3 lookAtPoint, Vector3 upVector) |
Creates a lookup transformation matrix, so that it is in a given position looking at the given point. More... | |
static Matrix4x4 | createOrthogonalProjection (float left, float right, float bottom, float top, float near, float far) |
Creates projection matrix for orthogonal projection. More... | |
static Matrix4x4 | createPerspectiveProjection (float near, float far, FieldOfViewType fovType, float fovInDegrees, float aspectRatio) |
Creates a perspective projection matrix for a symmetrical viewing volume. More... | |
static Matrix4x4 | createPerspectiveProjection (float near, float far, Vector4 fovInDegrees) |
Creates a perspective projection matrix for a viewing volume. More... | |
static Matrix4x4 | createRotation (float angleInRadians, Vector3 rotationAxis) |
Creates a rotation matrix over an arbitrary axis. More... | |
static Matrix4x4 | createRotationInDegrees (float angleInDegrees, Vector3 rotationAxis) |
Creates a rotation matrix over an arbitrary axis. More... | |
static Matrix4x4 | createScale (Vector3 scale) |
Creates a scaling matrix. More... | |
static Matrix4x4 | createSRT (Vector3 scale, Vector3 rotationInRadians, Vector3 translation) |
Create an SRT matrix. More... | |
static Matrix4x4 | createSubProjection (const Matrix4x4 &projection, float relativeOffsetX, float relativeOffsetY, float relativeSizeX, float relativeSizeY) |
Calculate sub-quad projection of an existing projection matrix. More... | |
static Matrix4x4 | createTranslation (Vector3 translation) |
Creates translation matrix. More... | |
static Matrix4x4 | createTranslation (float x, float y, float z) |
Creates translation matrix. More... | |
static Matrix4x4 | createXRotationInDegrees (float angleInDegrees) |
Creates a X rotation matrix. More... | |
static Matrix4x4 | createXRotationInRadians (float angleInRadians) |
Creates a X rotation matrix. More... | |
static Matrix4x4 | createYRotationInDegrees (float angleInDegrees) |
Creates a Y rotation matrix. More... | |
static Matrix4x4 | createYRotationInRadians (float angleInRadians) |
Creates a Y rotation matrix. More... | |
static Matrix4x4 | createZRotationInDegrees (float angleInDegrees) |
Creates a Z rotation matrix. More... | |
static Matrix4x4 | createZRotationInRadians (float angleInRadians) |
Creates a Z rotation matrix. More... | |
Friends | |
bool | operator!= (const Matrix4x4 &left, const Matrix4x4 &right) |
Inequality operator. More... | |
Matrix4x4 | operator+ (Matrix4x4 lhs, const Matrix4x4 &rhs) |
Creates a new matrix by adding an existing matrix to another one. More... | |
Matrix4x4 | operator- (Matrix4x4 lhs, const Matrix4x4 &rhs) |
Creates a new matrix by subtracting an existing matrix from another one. More... | |
bool | operator== (const Matrix4x4 &left, const Matrix4x4 &right) |
Equality operator. More... | |
Matrix with 4x4 elements.
|
strong |
|
inlineexplicit |
Default constructor, initializes the matrix to identity matrix.
|
inlineexplicit |
Constructs the matrix from elements in column-major order.
|
inlineexplicit |
Constructs the matrix from four column vectors.
|
inlineexplicit |
Constructs the matrix from four column vectors.
|
inline |
Access to individual elements of the matrix.
Elements are stored in column-major order.
index | Index of the accessed element. Possible values are numbers from 0 to 15. |
|
inline |
Access to individual elements of the matrix.
Elements are stored in column-major order.
index | Index of the accessed element. Possible values are numbers from 0 to 15. |
|
inline |
Get X axis.
|
inline |
Get Y axis.
|
inline |
Get Z axis.
Vector3 kanzi::Matrix4x4::getScale | ( | ) | const |
Get scale as a vector.
optional<Vector3> kanzi::Matrix4x4::getRotationAngle | ( | ) | const |
Calculates Euler rotation angles of the matrix.
Kanzi Engine represents Euler angles as Tait-Bryan angles where the rotations are applied in the order x, y and z.
|
inline |
Scales this matrix.
scale | Scaling vector. |
|
inline |
Scales this matrix.
scale | Uniform scaling value. |
|
inline |
Translates this matrix.
translate | Translation vector. |
|
inline |
Set X axis.
v | X axis vector. |
|
inline |
Set Y axis.
v | Y axis vector. |
|
inline |
Set Z axis.
v | Z axis vector. |
|
inline |
Get translation.
|
inline |
Set translation.
translation | Translation vector. |
|
inline |
Get translation on X axis.
|
inline |
Set translation on X axis.
translationX | Translation X component. |
|
inline |
Get translation on Y axis.
|
inline |
Set translation on Y axis.
translationY | Translation Y component. |
|
inline |
Get translation on Z axis.
|
inline |
Set translation on Z axis.
translationZ | Translation Y component. |
Modifies this matrix by adding another matrix.
v | Another matrix. |
Modifies this matrix by subtracting another matrix from this matrix.
v | Another matrix. |
Multiply a 3-component vector with this matrix.
vector | A Vector3. |
Multiply a 4-component vector with this matrix.
vector | A Vector4. |
Modifies this matrix by multiplying it with another matrix.
m | Another matrix. |
Creates translation matrix.
translation | Translation vector. |
|
inlinestatic |
Creates translation matrix.
x | X component of the Translation vector. |
y | Y component of the Translation vector. |
z | Z component of the Translation vector. |
|
inlinestatic |
Creates identity matrix.
|
inlinestatic |
Creates a matrix from an existing homogeneous matrix and Z translation.
matrix | Homogeneous matrix. |
zTranslation | X translation. |
|
inlinestatic |
Creates a matrix from an existing homogeneous matrix.
0.0f is used for the Z translation.
matrix | Homogeneous matrix. |
|
static |
Creates a rotation matrix over an arbitrary axis.
Similar to the matrix used by glRotatef. The rotation axis needs not be normalized.
angleInRadians | Rotation angle in radians. |
rotationAxis | Arbitrary rotation axis. |
|
inlinestatic |
Creates a rotation matrix over an arbitrary axis.
Similar to the matrix used by glRotatef. The rotation axis needs not be normalized.
angleInDegrees | Rotation angle in degrees. |
rotationAxis | Arbitrary rotation axis. |
|
static |
Creates a X rotation matrix.
angleInRadians | Rotation angle in radians. |
|
inlinestatic |
Creates a X rotation matrix.
angleInDegrees | Rotation angle in degrees. |
|
static |
Creates a Y rotation matrix.
angleInRadians | Rotation angle in radians. |
|
inlinestatic |
Creates a Y rotation matrix.
angleInDegrees | Rotation angle in degrees. |
|
static |
Creates a Z rotation matrix.
angleInRadians | Rotation angle in radians. |
|
inlinestatic |
Creates a Z rotation matrix.
angleInDegrees | Rotation angle in degrees. |
Creates a scaling matrix.
scale | Scaling vector. |
|
static |
|
static |
Creates a perspective projection matrix for a symmetrical viewing volume.
near | Camera near value. |
far | Camera far value. |
fovType | Tells whether the fovInDegrees parameter is xfov or yfov. |
fovInDegrees | Field of view in degrees. |
aspectRatio | The aspect ratio of the viewport. |
|
static |
Creates a perspective projection matrix for a viewing volume.
near | Camera near value. |
far | Camera far value. |
fovInDegrees | Field of view in degrees, specified in order left, right, up, down. Angles to the right of center and upwards of center are positive. |
|
static |
Calculate sub-quad projection of an existing projection matrix.
This is a specific solution for an axis-aligned case.
Old projection matrix = [P00 0 P02 P03] [ 0 P11 P12 P13] [ 0 0 P22 P23] [ 0 0 -1 0]
Traslated and scaled: (x, y) |–> (Ox, Oy) + (Sx * x, Sy * y) [Sx P00, 0, Ox P22 + Sx P02, Ox P23] [ 0, Sy P11, Oy P22 + Sy P12, Oy P23] [ 0, 0, P22, P23] [ 0, 0, -1, 0]
projection | Projection matrix. |
relativeOffsetX | X offset of sub-quad as portion of the size of the projection area. |
relativeOffsetY | Y offset of sub-quad as portion of the size of the projection area. |
relativeSizeX | Projection area X size in regard to sub-quad area size. |
relativeSizeY | Projection area Y size in regard to sub-quad area size. |
|
static |
Creates a lookup transformation matrix, so that it is in a given position looking at the given point.
position | The new translation of the node. |
lookAtPoint | A point where the node is looking at. |
upVector | The new up vector of the node. |
|
static |
Create an SRT matrix.
scale | Scales by axises. |
rotationInRadians | Rotation component in radians. |
translation | Translation component. |
|
inline |
Applies a transpose to a matrix.
Creates a new matrix by adding an existing matrix to another one.
lhs | First matrix, left hand side. |
rhs | Second matrix, right hand side. |
Creates a new matrix by subtracting an existing matrix from another one.
lhs | First matrix, left hand side. |
rhs | Second matrix, right hand side. |
Equality operator.
Compares two matrices for equality. Note that this is a floating point comparison without any tolerance, so you probably don't want to use this.
left | Left hand side matrix. |
right | Right hand side matrix. |
Inequality operator.
Compares two matrices for inequality. Note that this is a floating point comparison without any tolerance, so you probably don't want to use this.
left | Left-hand side matrix. |
right | Right-hand side matrix. |