diff --git a/core/math/math.odin b/core/math/math.odin index 9a6799a7e..d85a1f300 100644 --- a/core/math/math.odin +++ b/core/math/math.odin @@ -149,6 +149,7 @@ to_degrees :: proc(radians: f32) -> f32 { return radians * 360 / TAU; } mul :: proc[ + mat3_mul, mat4_mul, mat4_mul_vec4, quat_mul, quat_mulf, ]; @@ -197,15 +198,27 @@ identity :: proc(T: type/[$N][N]$E) -> T { return m; } -transpose :: proc(m: Mat4) -> Mat4 { - for j in 0..4 { - for i in 0..4 { +transpose :: proc(m: $M/[$N][N]f32) -> M { + for j in 0..N { + for i in 0..N { m[i][j], m[j][i] = m[j][i], m[i][j]; } } return m; } +mat3_mul :: proc(a, b: Mat3) -> Mat3 { + c: Mat3; + for j in 0..3 { + for i in 0..3 { + c[j][i] = a[0][i]*b[j][0] + + a[1][i]*b[j][1] + + a[2][i]*b[j][2]; + } + } + return c; +} + mat4_mul :: proc(a, b: Mat4) -> Mat4 { c: Mat4; for j in 0..4 { @@ -228,7 +241,6 @@ mat4_mul_vec4 :: proc(m: Mat4, v: Vec4) -> Vec4 { }; } - mat4_inverse :: proc(m: Mat4) -> Mat4 { o: Mat4;