33#include "../System/cl_platform.h"
56 template<
typename Type>
59 template<
typename Type>
62 template<
typename Type>
65 template<
typename Type>
68 template<
typename Type>
76 template<
typename Type>
83 for (
int i = 0;
i < 16;
i++)
97 explicit Mat4(
const float *init_matrix)
99 for (
int i = 0;
i < 16;
i++)
104 explicit Mat4(
const double *init_matrix)
106 for (
int i = 0;
i < 16;
i++)
111 explicit Mat4(
const int64_t *init_matrix)
113 for (
int i = 0;
i < 16;
i++)
118 explicit Mat4(
const int32_t *init_matrix)
120 for (
int i = 0;
i < 16;
i++)
125 explicit Mat4(
const int16_t *init_matrix)
127 for (
int i = 0;
i < 16;
i++)
132 explicit Mat4(
const int8_t *init_matrix)
134 for (
int i = 0;
i < 16;
i++)
158 Type field_of_view_y_degrees,
197 return rotate(
angle, rotation.
x, rotation.
y, rotation.
z, normalize);
257 Type eye_x, Type eye_y, Type eye_z,
258 Type center_x, Type center_y, Type center_z,
259 Type up_x, Type up_y, Type up_z);
330 for (
int i = 0;
i < 16;
i++)
332 Type diff = second.matrix[
i] - first.matrix[
i];
333 if (diff < -epsilon || diff > epsilon)
return false;
449 operator Type
const*()
const {
return matrix; }
487 for (
int i = 0;
i < 16;
i++)
488 if (
matrix[
i] != other.matrix[
i])
return false;
496 template<
typename Type>
499 template<
typename Type>
502 template<
typename Type>
505 template<
typename Type>
508 template<
typename Type>
511 template<
typename Type>
514 template<
typename Type>
517 template<
typename Type>
Angle class.
Definition angle.h:60
2D matrix
Definition vec4.h:52
3D matrix
Definition vec4.h:55
4D matrix
Definition vec4.h:58
Vec3< Type > get_euler(EulerOrder order) const
Extract the euler angles (in radians) from a matrix (in column-major format)
Mat4< Type > & scale_self(Type x, Type y, Type z)
Scale this matrix.
static Mat4< Type > rotate(const Angle &angle, Type x, Type y, Type z, bool normalize=true)
Create a rotation matrix.
Mat4< Type > & inverse()
Calculate the matrix inverse of this matrix.
static Mat4< Type > ortho_2d(Type left, Type right, Type bottom, Type top, Handedness handedness, ClipZRange clip_z)
Create a ortho_2d matrix.
Mat4(const float *init_matrix)
Constructs a 4x4 matrix (copied from a array of floats)
Definition mat4.h:97
Mat4(const int32_t *init_matrix)
Constructs a 4x4 matrix (copied from a array of 32 bit integers)
Definition mat4.h:118
Mat4< Type > & adjoint()
Calculate the adjoint (or known as adjugate) of this matrix.
Mat4< Type > & translate_self(Type x, Type y, Type z)
Translate this matrix.
bool operator!=(const Mat4< Type > &other)
Not-equal operator.
Definition mat4.h:493
Mat4(const double *init_matrix)
Constructs a 4x4 matrix (copied from a array of doubles)
Definition mat4.h:104
static Mat4< Type > frustum(Type left, Type right, Type bottom, Type top, Type z_near, Type z_far, Handedness handedness, ClipZRange clip_z)
Create a frustum matrix.
static bool is_equal(const Mat4< Type > &first, const Mat4< Type > &second, Type epsilon)
Returns true if equal within the bounds of an epsilon.
Definition mat4.h:328
const Type & operator[](unsigned int i) const
Operator that returns the matrix cell at the given index.
Definition mat4.h:464
Mat4(const Mat3< Type > ©)
Constructs a 4x4 matrix (copied from a 3d matrix)
void decompose(Vec3< Type > &out_position, Quaternionx< Type > &out_orientation, Vec3< Type > &out_scale) const
Decompose matrix into position, orientation/rotation and scale.
Type & operator[](int i)
Operator that returns the matrix cell at the given index.
Definition mat4.h:455
Vec3< Type > get_transformed_point(const Vec3< Type > &vector) const
Get a transformed point from the matrix (in column-major format)
static Mat4< Type > perspective(Type field_of_view_y_degrees, Type aspect, Type z_near, Type z_far, Handedness handedness, ClipZRange clip_z)
Create a perspective matrix.
Type & operator[](unsigned int i)
Operator that returns the matrix cell at the given index.
Definition mat4.h:461
Mat4(const Mat2< Type > ©)
Constructs a 4x4 matrix (copied from a 2d matrix)
Mat4< Type > operator+(const Mat4< Type > &add_matrix) const
Addition operator.
static Mat4< Type > scale(const Vec3< Type > &xyz)
Create a scale matrix.
Definition mat4.h:219
Mat4< Type > & set_translate(const Vec3< Type > &translation)
Set this matrix translation values.
Definition mat4.h:416
Mat4< Type > operator*(const Mat4< Type > &mult) const
Multiplication operator.
Mat4< Type > & operator=(const Mat4< Type > ©)=default
Copy assignment operator.
static Mat4< Type > rotate(const Angle &angle, Vec3< Type > rotation, bool normalize=true)
Create a rotation matrix.
Definition mat4.h:195
Mat4< Type > & translate_self(const Vec3< Type > &translation)
Translate this matrix.
Definition mat4.h:394
double det() const
Calculate the matrix determinant of this matrix.
bool operator==(const Mat4< Type > &other) const
Equality operator.
Definition mat4.h:485
Mat4< Type > & transpose()
Calculate the transpose of this matrix.
static Mat4< Type > look_at(Type eye_x, Type eye_y, Type eye_z, Type center_x, Type center_y, Type center_z, Type up_x, Type up_y, Type up_z)
Create the "look at" matrix.
Mat4()
Constructs a 4x4 matrix (zero'ed)
Definition mat4.h:81
Mat4(const int16_t *init_matrix)
Constructs a 4x4 matrix (copied from a array of 16 bit integers)
Definition mat4.h:125
bool is_equal(const Mat4< Type > &other, Type epsilon) const
Returns true if equal within the bounds of an epsilon.
Definition mat4.h:446
static Mat4< Type > look_at(Vec3< Type > eye, Vec3< Type > center, Vec3< Type > up)
Create the "look at" matrix.
Definition mat4.h:268
Vec3< Type > get_translate() const
Returns the translation coordinates for this matrix (in column-major format)
Definition mat4.h:342
Mat4(const Mat4< Type > ©)=default
Constructs a 4x4 matrix (copied)
static Mat4< Type > rotate(const Angle &angle_x, const Angle &angle_y, const Angle &angle_z, EulerOrder order)
Create a rotation matrix using euler angles.
static Mat4< Type > ortho(Type left, Type right, Type bottom, Type top, Type z_near, Type z_far, Handedness handedness, ClipZRange clip_z)
Create a ortho matrix.
Type matrix[16]
The matrix (in column-major format)
Definition mat4.h:339
Mat4< Type > operator-(const Mat4< Type > &sub_matrix) const
Subtraction operator.
static Mat4< Type > translate(Type x, Type y, Type z)
Create a translation matrix.
Mat4(const int64_t *init_matrix)
Constructs a 4x4 matrix (copied from a array of 64 bit integers)
Definition mat4.h:111
static Mat4< Type > translate(const Vec3< Type > &xyz)
Create a translation matrix.
Definition mat4.h:238
Mat4< Type > & set_translate(Type x, Type y, Type z)
Set this matrix translation values.
Definition mat4.h:406
static Mat4< Type > scale(Type x, Type y, Type z)
Create a scale matrix.
Mat4< Type > & scale_self(const Vec3< Type > &scale)
Scale this matrix.
Definition mat4.h:372
Mat4(const int8_t *init_matrix)
Constructs a 4x4 matrix (copied from a array of 8 bit integers)
Definition mat4.h:132
const Type & operator[](int i) const
Operator that returns the matrix cell at the given index.
Definition mat4.h:458
Quaternion.
Definition quaternion.h:44
3D vector
Definition vec4.h:46
Type z
Definition vec3.h:81
Type y
Definition vec3.h:80
Type x
Definition vec3.h:79
static Mat4< Type > add(const Mat4< Type > &matrix_1, const Mat4< Type > &matrix_2)
Add 2 matrices.
Definition mat4.h:506
static Mat4< Type > null()
Create a zero matrix.
Definition mat4.h:497
Mat4< double > Mat4d
Definition mat4.h:522
Mat4< int > Mat4i
Definition mat4.h:520
static Mat4< Type > multiply(const Mat4< Type > &matrix_1, const Mat4< Type > &matrix_2)
Multiply 2 matrices.
Definition mat4.h:503
ClipZRange
Definition mat4.h:51
EulerOrder
Euler angle rotation order.
Definition angle.h:49
static Mat4< Type > identity()
Create the identity matrix.
Definition mat4.h:500
static Mat4< Type > subtract(const Mat4< Type > &matrix_1, const Mat4< Type > &matrix_2)
Subtract 2 matrices.
Definition mat4.h:509
Mat4< float > Mat4f
Definition mat4.h:521
Handedness
Definition mat4.h:45