# Unigine::Math::mat4 Struct

This class represents a matrix of sixteen (4x4) float components.

## mat4 ( ) #

Default constructor. Produces an identity matrix.

## mat4 ( float v ) #

Constructor. Initializes the matrix using a given scalar value.
Source code (UnigineScript)
``````mat4(2.0);

/* Creates a matrix
| 2.0 	2.0 	2.0		2.0	|
| 2.0 	2.0 	2.0		2.0	|
| 2.0 	2.0 	2.0		2.0	|
| 2.0 	2.0 	2.0		2.0	|
*/``````

### Arguments

• float v - Scalar value.

## mat4 ( const mat3& m ) #

Constructor. Initializes the matrix using a given mat3 source matrix (3x3). The matrix elements are filled using corresponding elements of the source matrix.
Output
``````Resulting matrix:
| m00  	 m01  	 m02	  0.0f |
M=  | m10    m11  	 m12      0.0f |
| m20    m21     m22      0.0f |
| 0.0f   0.0f    0.0f     1.0f |``````

### Arguments

• const mat3& m - Source matrix (3x3).

## mat4 ( const mat4& m ) #

Constructor. Initializes the matrix by copying a given source matrix.

### Arguments

• const mat4& m - Source matrix.

## explicit mat4 ( const dmat4& m ) #

Constructor. Initializes the matrix using a given dmat4 source matrix (3x4). The matrix elements are filled using corresponding elements of the source matrix.

### Arguments

• const dmat4& m - Source matrix (3x4).

## mat4 ( const vec4& c0, const vec4& c1, const vec4& c2, const vec4& c3 ) #

Constructor. Initializes the matrix using given three vec4 vectors.
Output
``````Resulting matrix:
| col0.x  	 col1.x	  	col2.x	   col3.x |
M=  | col0.y   	 col1.y	  	col2.y     col3.y |
| col0.z   	 col1.z	  	col2.z     col3.z |
| col0.w   	 col1.w	  	col2.w     col3.w |``````

### Arguments

• const vec4& c0 - Source vector for the first column.
• const vec4& c1 - Source vector for the second column.
• const vec4& c2 - Source vector for the third column.
• const vec4& c3 - Source vector for the fourth column.

## explicit mat4 ( const quat& q ) #

Constructor. Initializes the matrix using a given source quaternion.
Output
``````For the quaternion (x, y, z, w) the corresponding rotation matrix M is defined as follows:
| 1 - 2y² - 2z²    2xy + 2wz      	2xz - 2wy     	0.0f |
M=  | 2xy - 2wz        1 - 2x² - 2z²    2yz + 2wx     	0.0f |
| 2xz + 2wy        2yz - 2wx        1 - 2x² - 2y² 	0.0f |
|  0.0f            0.0f        		0.0f 			1.0f |``````

### Arguments

• const quat& q - Source quaternion.

## mat4 ( const mat3& m, const vec3& v ) #

Constructor. Initializes the matrix using a given source mat3 matrix (3x3) and a vec3 vector.

### Arguments

• const mat3& m - Source matrix (3x3).
• const vec3& v - Source vector.

## mat4 ( const quat& q, const vec3& v ) #

Constructor. Initializes the matrix using a given quaternion and a vec3 vector.

### Arguments

• const quat& q - Source quaternion.
• const vec3& v - Source vector.

## voidset ( int row, int column, float v ) #

Sets a new value of the matrix element specified by row and column.

### Arguments

• int row - Row.
• int column - Column.
• float v - The value to be set.

## mat4 ( const mat2& m ) #

Constructor. Initializes the matrix using a given mat2 source matrix (2x2). The matrix elements are filled using corresponding elements of the source matrix.
Output
``````Resulting matrix:
| m00  	 m01  	 0.0f	  0.0f |
M=  | m10    m11  	 0.0f     0.0f |
| 0.0f   0.0f    1.0f     0.0f |
| 0.0f   0.0f    0.0f     1.0f |``````

### Arguments

• const mat2& m - Source matrix (2x2).

## mat4 ( float m00_, float m10_, float m20_, float m30_, float m01_, float m11_, float m21_, float m31_, float m02_, float m12_, float m22_, float m32_, float m03_, float m13_, float m23_, float m33_ ) #

Constructor. Initializes the matrix using a given float values.
Output
``````Resulting matrix:
| m00_  m01_  	m02_	 m03_ |
M=  | m10_  m11_  	m12_     m13_ |
| m20_  m21_    m22_     m23_ |
| m30_  m31_    m32_     m33_ |``````

### Arguments

• float m00_ - m00_ element.
• float m10_ - m10_ element.
• float m20_ - m20_ element.
• float m30_ - m30_ element.
• float m01_ - m01_ element.
• float m11_ - m11_ element.
• float m21_ - m21_ element.
• float m31_ - m31_ element.
• float m02_ - m02_ element.
• float m12_ - m12_ element.
• float m22_ - m22_ element.
• float m32_ - m32_ element.
• float m03_ - m03_ element.
• float m13_ - m13_ element.
• float m23_ - m23_ element.
• float m33_ - m33_ element.

## mat4 ( float m00_, float m10_, float m20_, float m30_, float m01_, float m11_, float m21_, float m31_, float m02_, float m12_, float m22_, float m32_, float m03_, float m13_, float m23_, float m33_, ConstexprTag ) #

Constructor. Initializes the matrix using a given constant float values.
Output
``````Resulting matrix:
| m00_  m01_  	m02_	 m03_ |
M=  | m10_  m11_  	m12_     m13_ |
| m20_  m21_    m22_     m23_ |
| m30_  m31_    m32_     m33_ |``````

### Arguments

• float m00_ - m00_ element.
• float m10_ - m10_ element.
• float m20_ - m20_ element.
• float m30_ - m30_ element.
• float m01_ - m01_ element.
• float m11_ - m11_ element.
• float m21_ - m21_ element.
• float m31_ - m31_ element.
• float m02_ - m02_ element.
• float m12_ - m12_ element.
• float m22_ - m22_ element.
• float m32_ - m32_ element.
• float m03_ - m03_ element.
• float m13_ - m13_ element.
• float m23_ - m23_ element.
• float m33_ - m33_ element.
• ConstexprTag - Auxiliary tag.

## mat4 ( float v, ConstexprTag ) #

Constructor. Initializes the matrix using a given constant float value.
Output
``````Resulting matrix:
| v   v   v   v|
M=  | v   v   v   v|
| v   v   v   v|
| v   v   v   v|``````

### Arguments

• float v - Value.
• ConstexprTag - Auxiliary tag.

## mat4 ( const mat4x4_values& m ) #

Constructor. Initializes the matrix using the given source matrix values.

## mat4 ( const mat4x4_values& m, int transposed ) #

Constructor. Initializes the matrix using the given source matrix values.

### Arguments

• const mat4x4_values& m - The source value storing matrix float values.
• int transposed - If set to 0 (by default), the matrix is specified in the column-major style; if set to 1, the matrix is transposed.

## mat4 ( const dmat4x4_values& m ) #

Constructor. Initializes the matrix with float values using the given source matrix double values.

## mat4 ( const dmat4x4_values& m, int transpose ) #

Constructor. Initializes the matrix with float values using the given source matrix double values.

### Arguments

• const dmat4x4_values& m - The source value storing matrix double values.
• int transpose - If set to 0 (by default), the matrix is specified in the column-major style; if set to 1, the matrix is transposed.

## voidset ( const mat4x4_values& m, int transposed ) #

Sets the matrix using the argument float values.

### Arguments

• const mat4x4_values& m - The source value storing matrix float values.
• int transposed - If set to 0 (by default), the matrix is specified in the column-major style; if set to 1, the matrix is transposed.

## voidset ( const dmat4x4_values& m, int transpose ) #

Sets the matrix with float values using the argument with double values.

### Arguments

• const dmat4x4_values& m - The source value storing matrix double values.
• int transpose - If set to 0 (by default), the matrix is specified in the column-major style; if set to 1, the matrix is transposed.

## voidset ( const mat2& m ) #

Sets new matrix values using a given mat2 source matrix (2x2). The matrix elements are filled using corresponding elements of the source matrix.
Output
``````Resulting matrix:
| m00  	 m01  	 0.0f	  0.0f |
M=  | m10    m11  	 0.0f     0.0f |
| 0.0f   0.0f    1.0f     0.0f |
| 0.0f   0.0f    0.0f     1.0f |``````

### Arguments

• const mat2& m - Source matrix (2x2).

## voidset ( const mat3& m, const vec3& v ) #

Sets new matrix values using a given source mat3 matrix (3x3) and a vec3 vector.

### Arguments

• const mat3& m - Source matrix (3x3).
• const vec3& v - Source vector.

## voidset ( const quat& q, const vec3& v ) #

Sets new matrix values using a given quaternion and a vec3 vector.

### Arguments

• const quat& q - Source quaternion.
• const vec3& v - Source vector.

## voidset ( const mat3& m ) #

Sets new matrix values using a given mat3 source matrix (3x3). The matrix elements are filled using corresponding elements of the source matrix.
Output
``````Resulting matrix:
| m00  	 m01  	 m02	  0.0f |
M=  | m10    m11  	 m12      0.0f |
| m20    m21     m22      0.0f |
| 0.0f   0.0f    0.0f     1.0f |``````

### Arguments

• const mat3& m - Source matrix (3x3).

## voidset ( const quat& q ) #

Sets new matrix values using a given source quaternion.

### Arguments

• const quat& q - Source quaternion.

## voidset ( const mat4& m ) #

Sets the matrix equal to the specified source matrix.

### Arguments

• const mat4& m - Source matrix.

## voidset ( const dmat4& m ) #

Sets new matrix values using a given dmat4 source matrix (3x4). The matrix elements are filled using corresponding elements of the source matrix.

### Arguments

• const dmat4& m - Source matrix (3x4).

## float &get ( int row, int column ) #

Returns the reference to the matrix element specified by given row and column.

### Arguments

• int row - Row.
• int column - Column.

### Return value

Matrix element reference.

## floatget ( int row, int column ) const#

Returns the value of the matrix element specified by given row and column.

### Arguments

• int row - Row.
• int column - Column.

### Return value

Matrix element value.

## voidget ( mat4x4_values& m, int transpose ) const#

Returns the matrix values by filling the specified argument.

### Arguments

• mat4x4_values& m - The destination value to store matrix float values.
• int transpose - If set to 0 (by default), the matrix is specified in the column-major style; if set to 1, the matrix is transposed.

## mat4x4_values &get ( ) #

Returns the value storing matrix float values.

### Return value

The value storing matrix float values.

## const mat4x4_values &get ( ) const#

Returns the constant value storing matrix float values.

### Return value

The constant value storing matrix float values.

## voidsetColumn ( int column, const vec4& v ) #

Sets the specified column of the matrix using a given vec4 vector as a source.

### Arguments

• int column - Column.
• const vec4& v - Source vector.

## vec4getColumn ( int column ) const#

Returns the specified matrix column.

### Arguments

• int column - Column.

### Return value

The vec4 vector with column values.

## voidsetColumn3 ( int column, const vec3& v ) #

Sets the specified column of the matrix using a given three-component vec3 vector as a source, the last element of the column remains as is.

### Arguments

• int column - Column.
• const vec3& v - Three-component source vector.

## vec3getColumn3 ( int column ) const#

Returns the XYZ components of the specified matrix column.

### Arguments

• int column - Column.

### Return value

The vec3 vector with the first three elements of the specified matrix column.

## voidsetDiagonal ( const vec4& v ) #

Sets the main diagonal of the matrix using a given vec4 vector as a source.

### Arguments

• const vec4& v - Source vector.

## vec4getDiagonal ( ) const#

Returns the main diagonal of the matrix.

### Return value

The vec4 vector with the element of the main diagonal.

## voidsetIdentity ( ) #

Sets the matrix equal to the identity matrix.

## voidsetRotate ( const vec3& axis, float angle ) #

Sets the rotation matrix for a given axis.

### Arguments

• const vec3& axis - Rotation axis.
• float angle - Rotation angle, in degrees.

## quatgetRotate ( ) const#

Returns the quaternion, representing the rotation part of the matrix.

### Return value

Matrix rotation part.

## voidsetRotateX ( float angle ) #

Sets X rotation matrix.

### Arguments

• float angle - Rotation angle, in degrees.

## voidsetRotateY ( float angle ) #

Sets Y rotation matrix.

### Arguments

• float angle - Rotation angle, in degrees.

## voidsetRotateZ ( float angle ) #

Set Z rotation matrix.

### Arguments

• float angle - Rotation angle, in degrees.

## voidsetRow ( int row, const vec4& v ) #

Sets the specified row of the matrix using a given vec4 vector as a source.

### Arguments

• int row - Row.
• const vec4& v - Source vector.

## vec4getRow ( int row ) const#

Returns the specified matrix row.

### Arguments

• int row - Row.

### Return value

The vec4 vector with row values.

## voidsetRow3 ( int row, const vec3& v ) #

Sets the specified row of the matrix using a given three-component vec3 vector as a source, the last element of the row remains as is.

### Arguments

• int row - Row.
• const vec3& v - Three-component source vector.

## vec3getRow3 ( int row ) const#

Returns the first three elements of the specified matrix row.

### Arguments

• int row - Row.

### Return value

The vec3 vector with the first three elements of the specified matrix row.

## voidsetScale ( const vec3& v ) #

Fills the scaling matrix using a given vec3 source vector.
Output
``````Scaling matrix:
| v.x   	0.0f  	  0.0f	    0.0f |
S=  | 0.0f      v.y  	  0.0f      0.0f |
| 0.0f      0.0f      v.z  		0.0f |
| 0.0f      0.0f      0.0f  	1.0f |``````

### Arguments

• const vec3& v - Source vector.

## vec3getScale ( ) const#

Returns the three-component vec3 vector, representing the scaling part of the matrix.

### Return value

Three-component vector with the scaling part of the matrix.

## voidsetTranslate ( const vec3& v ) #

Fills the translation matrix using a given vec3 source vector.
Output
``````Translation matrix:
| 1.0f   	0.0f  	  0.0f	    v.x |
T=  | 0.0f      1.0f  	  0.0f      v.y |
| 0.0f      0.0f      1.0f  	v.z |
| 0.0f      0.0f      0.0f     1.0f |``````

### Arguments

• const vec3& v - Source vector.

## vec3getTranslate ( ) const#

Returns the three-component vec3 vector, representing the translation part of the matrix.

### Return value

Three-component vector with the translation part of the matrix.

## voidsetZero ( ) #

Sets all matrix elements equal to 0.

## const float *operator const float * ( ) const#

Performs type conversion to const float *.

## const void *operator const void * ( ) const#

Performs type conversion to const void *.

## float *operator float * ( ) #

Performs type conversion to float *.

## void *operator void * ( ) #

Performs type conversion to void *.

## mat4 &operator*= ( const mat4& m ) #

Performs matrix multiplication.

### Arguments

• const mat4& m - Matrix.

### Return value

Resulting matrix.

## mat4 &operator*= ( float v ) #

Performs scalar multiplication.

### Arguments

• float v - Scalar value.

### Return value

Resulting matrix.

## mat4 &operator+= ( const mat4& m ) #

### Arguments

• const mat4& m - Matrix.

### Return value

Resulting matrix.

## mat4operator- ( ) const#

Performs matrix negation.

## mat4 &operator-= ( const mat4& m ) #

Performs matrix subtraction.

### Arguments

• const mat4& m - Matrix.

### Return value

Resulting matrix.

## mat4 &operator= ( const mat4& m ) #

Performs matrix assignment. Destination matrix = Source matrix.

### Arguments

• const mat4& m - Source matrix.

Result.

## float &operator[] ( int i ) #

Performs array access to the matrix item reference using given item index.

### Arguments

• int i - Matrix item index.

### Return value

Matrix item reference.

## floatoperator[] ( int i ) const#

### Arguments

• int i - Matrix item index.

Matrix item.

## vec3getAxisX ( ) const#

Returns the normalized vector representing the X axis.

### Return value

Vector representing the X axis.

## vec3getAxisY ( ) const#

Returns the normalized vector representing the Y axis.

### Return value

Vector representing the Y axis.

## vec3getAxisZ ( ) const#

Returns the normalized vector representing the Z axis.

### Return value

Vector representing the Z axis.

## floattrace ( ) const#

Returns the trace of the matrix.

### Return value

Trace of the matrix.

## floatdeterminant ( ) const#

Returns the determinant of the matrix.

### Return value

Determinant of the matrix.

## floatdeterminant3 ( ) const#

Returns the determinant of the smaller 3x3 matrix of the original matrix.

### Return value

Determinant of the smaller 3x3 matrix.
Last update: 2024-04-19