Browse Source

Add mat3_mul and generic transpose to math.odin

Lipid 7 years ago
parent
commit
8abe9ef507
1 changed files with 16 additions and 4 deletions
  1. 16 4
      core/math/math.odin

+ 16 - 4
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;