diff --git a/src/core/maf.h b/src/core/maf.h index f7dd327d..c66445b6 100644 --- a/src/core/maf.h +++ b/src/core/maf.h @@ -455,6 +455,30 @@ MAF mat4 mat4_invert(mat4 m) { return m; } +MAF mat4 mat4_cofactor(mat4 m) { + float m00 = m[0], m04 = m[4], m08 = m[8], m12 = m[12]; + float m01 = m[1], m05 = m[5], m09 = m[9], m13 = m[13]; + float m02 = m[2], m06 = m[6], m10 = m[10], m14 = m[14]; + float m03 = m[3], m07 = m[7], m11 = m[11], m15 = m[15]; + m[0] = (m05 * (m10 * m15 - m11 * m14) - m09 * (m06 * m15 - m07 * m14) + m13 * (m06 * m11 - m07 * m10)); + m[1] = -(m04 * (m10 * m15 - m11 * m14) - m08 * (m06 * m15 - m07 * m14) + m12 * (m06 * m11 - m07 * m10)); + m[2] = (m04 * (m09 * m15 - m11 * m13) - m08 * (m05 * m15 - m07 * m13) + m12 * (m05 * m11 - m07 * m09)); + m[3] = -(m04 * (m09 * m14 - m10 * m13) - m08 * (m05 * m14 - m06 * m13) + m12 * (m05 * m10 - m06 * m09)); + m[4] = -(m01 * (m10 * m15 - m11 * m14) - m09 * (m02 * m15 - m03 * m14) + m13 * (m02 * m11 - m03 * m10)); + m[5] = (m00 * (m10 * m15 - m11 * m14) - m08 * (m02 * m15 - m03 * m14) + m12 * (m02 * m11 - m03 * m10)); + m[6] = -(m00 * (m09 * m15 - m11 * m13) - m08 * (m01 * m15 - m03 * m13) + m12 * (m01 * m11 - m03 * m09)); + m[7] = (m00 * (m09 * m14 - m10 * m13) - m08 * (m01 * m14 - m02 * m13) + m12 * (m01 * m10 - m02 * m09)); + m[8] = (m01 * (m06 * m15 - m07 * m14) - m05 * (m02 * m15 - m03 * m14) + m13 * (m02 * m07 - m03 * m06)); + m[9] = -(m00 * (m10 * m15 - m07 * m14) - m04 * (m02 * m15 - m03 * m14) + m12 * (m02 * m07 - m03 * m10)); + m[10] = (m00 * (m05 * m15 - m07 * m13) - m04 * (m01 * m15 - m03 * m13) + m12 * (m01 * m07 - m03 * m05)); + m[11] = -(m00 * (m05 * m14 - m06 * m13) - m04 * (m01 * m14 - m02 * m13) + m12 * (m01 * m06 - m02 * m05)); + m[12] = -(m01 * (m06 * m11 - m07 * m10) - m05 * (m02 * m11 - m03 * m10) + m09 * (m02 * m07 - m03 * m06)); + m[13] = (m00 * (m06 * m11 - m07 * m10) - m04 * (m02 * m11 - m03 * m10) + m08 * (m02 * m07 - m03 * m06)); + m[14] = -(m00 * (m05 * m11 - m07 * m09) - m04 * (m01 * m11 - m03 * m09) + m08 * (m01 * m07 - m03 * m05)); + m[15] = (m00 * (m05 * m10 - m06 * m09) - m04 * (m01 * m10 - m02 * m09) + m08 * (m01 * m06 - m02 * m05)); + return m; +} + // Calculate matrix equivalent to "apply n, then m" MAF mat4 mat4_mul(mat4 m, mat4 n) { float m00 = m[0], m01 = m[1], m02 = m[2], m03 = m[3],