64 for (
int i = 0; i < 4; i++) {
65 for (
int j = 0; j < 4; j++) {
66 r.
v[i * 4 + j] = m->
v[j * 4 + i];
85 inv[0] = m->
v[5] * m->
v[10] * m->
v[15] - m->
v[5] * m->
v[14] * m->
v[11] - m->
v[9] * m->
v[6] * m->
v[15] + m->
v[9] * m->
v[14] * m->
v[7] + m->
v[13] * m->
v[6] * m->
v[11] - m->
v[13] * m->
v[10] * m->
v[7];
86 inv[4] = -m->
v[4] * m->
v[10] * m->
v[15] + m->
v[4] * m->
v[14] * m->
v[11] + m->
v[8] * m->
v[6] * m->
v[15] - m->
v[8] * m->
v[14] * m->
v[7] - m->
v[12] * m->
v[6] * m->
v[11] + m->
v[12] * m->
v[10] * m->
v[7];
87 inv[8] = m->
v[4] * m->
v[9] * m->
v[15] - m->
v[4] * m->
v[13] * m->
v[11] - m->
v[8] * m->
v[5] * m->
v[15] + m->
v[8] * m->
v[13] * m->
v[7] + m->
v[12] * m->
v[5] * m->
v[11] - m->
v[12] * m->
v[9] * m->
v[7];
88 inv[12] = -m->
v[4] * m->
v[9] * m->
v[14] + m->
v[4] * m->
v[13] * m->
v[10] + m->
v[8] * m->
v[5] * m->
v[14] - m->
v[8] * m->
v[13] * m->
v[6] - m->
v[12] * m->
v[5] * m->
v[10] + m->
v[12] * m->
v[9] * m->
v[6];
89 inv[1] = -m->
v[1] * m->
v[10] * m->
v[15] + m->
v[1] * m->
v[14] * m->
v[11] + m->
v[9] * m->
v[2] * m->
v[15] - m->
v[9] * m->
v[14] * m->
v[3] - m->
v[13] * m->
v[2] * m->
v[11] + m->
v[13] * m->
v[10] * m->
v[3];
90 inv[5] = m->
v[0] * m->
v[10] * m->
v[15] - m->
v[0] * m->
v[14] * m->
v[11] - m->
v[8] * m->
v[2] * m->
v[15] + m->
v[8] * m->
v[14] * m->
v[3] + m->
v[12] * m->
v[2] * m->
v[11] - m->
v[12] * m->
v[10] * m->
v[3];
91 inv[9] = -m->
v[0] * m->
v[9] * m->
v[15] + m->
v[0] * m->
v[13] * m->
v[11] + m->
v[8] * m->
v[1] * m->
v[15] - m->
v[8] * m->
v[13] * m->
v[3] - m->
v[12] * m->
v[1] * m->
v[11] + m->
v[12] * m->
v[9] * m->
v[3];
92 inv[13] = m->
v[0] * m->
v[9] * m->
v[14] - m->
v[0] * m->
v[13] * m->
v[10] - m->
v[8] * m->
v[1] * m->
v[14] + m->
v[8] * m->
v[13] * m->
v[2] + m->
v[12] * m->
v[1] * m->
v[10] - m->
v[12] * m->
v[9] * m->
v[2];
93 inv[2] = m->
v[1] * m->
v[6] * m->
v[15] - m->
v[1] * m->
v[14] * m->
v[7] - m->
v[5] * m->
v[2] * m->
v[15] + m->
v[5] * m->
v[14] * m->
v[3] + m->
v[13] * m->
v[2] * m->
v[7] - m->
v[13] * m->
v[6] * m->
v[3];
94 inv[6] = -m->
v[0] * m->
v[6] * m->
v[15] + m->
v[0] * m->
v[14] * m->
v[7] + m->
v[4] * m->
v[2] * m->
v[15] - m->
v[4] * m->
v[14] * m->
v[3] - m->
v[12] * m->
v[2] * m->
v[7] + m->
v[12] * m->
v[6] * m->
v[3];
95 inv[10] = m->
v[0] * m->
v[5] * m->
v[15] - m->
v[0] * m->
v[13] * m->
v[7] - m->
v[4] * m->
v[1] * m->
v[15] + m->
v[4] * m->
v[13] * m->
v[3] + m->
v[12] * m->
v[1] * m->
v[7] - m->
v[12] * m->
v[5] * m->
v[3];
96 inv[14] = -m->
v[0] * m->
v[5] * m->
v[14] + m->
v[0] * m->
v[13] * m->
v[6] + m->
v[4] * m->
v[1] * m->
v[14] - m->
v[4] * m->
v[13] * m->
v[2] - m->
v[12] * m->
v[1] * m->
v[6] + m->
v[12] * m->
v[5] * m->
v[2];
97 inv[3] = -m->
v[1] * m->
v[6] * m->
v[11] + m->
v[1] * m->
v[10] * m->
v[7] + m->
v[5] * m->
v[2] * m->
v[11] - m->
v[5] * m->
v[10] * m->
v[3] - m->
v[9] * m->
v[2] * m->
v[7] + m->
v[9] * m->
v[6] * m->
v[3];
98 inv[7] = m->
v[0] * m->
v[6] * m->
v[11] - m->
v[0] * m->
v[10] * m->
v[7] - m->
v[4] * m->
v[2] * m->
v[11] + m->
v[4] * m->
v[10] * m->
v[3] + m->
v[8] * m->
v[2] * m->
v[7] - m->
v[8] * m->
v[6] * m->
v[3];
99 inv[11] = -m->
v[0] * m->
v[5] * m->
v[11] + m->
v[0] * m->
v[9] * m->
v[7] + m->
v[4] * m->
v[1] * m->
v[11] - m->
v[4] * m->
v[9] * m->
v[3] - m->
v[8] * m->
v[1] * m->
v[7] + m->
v[8] * m->
v[5] * m->
v[3];
100 inv[15] = m->
v[0] * m->
v[5] * m->
v[10] - m->
v[0] * m->
v[9] * m->
v[6] - m->
v[4] * m->
v[1] * m->
v[10] + m->
v[4] * m->
v[9] * m->
v[2] + m->
v[8] * m->
v[1] * m->
v[6] - m->
v[8] * m->
v[5] * m->
v[2];
102 const vm_int_t det = m->
v[0] * inv[0] + m->
v[1] * inv[4] + m->
v[2] * inv[8] + m->
v[3] * inv[12];
116 for (
int i = 0; i < 16; i++) {
117 result.
v[i] = (int)(inv[i] * fdet);
void mat4i_mul_vec3i_ptr(vector3i *res, const matrix4i *m, const vector3i *v, const vm_int_t w)
Transforms a vector3i by a 4x4 integer matrix using homogeneous w.
void mat4i_mul_ptr(matrix4i *res, const matrix4i *a, const matrix4i *b)
Performs matrix multiplication of two 4x4 matrices and stores the result.
void mat4i_transpose_ptr(matrix4i *res, const matrix4i *m)
Transposes the given 4x4 integer matrix and stores the result in the provided matrix structure.
void mat4i_inverse_ptr(matrix4i *res, const matrix4i *m)
Computes the inverse of the given 4x4 integer matrix and stores the result in the specified matrix.
void mat4i_identity_ptr(matrix4i *res)
Sets the given 4x4 integer matrix to the identity matrix.
void mat4i_mul_vec4i_ptr(vector4i *res, const matrix4i *m, const vector4i *v)
Multiplies a 4x4 integer matrix by a vector4i.
vm_int_t v[VECMAT_MAT4_SIZE]