|
@@ -149,6 +149,7 @@ to_degrees :: proc(radians: f32) -> f32 { return radians * 360 / TAU; }
|
|
|
|
|
|
|
|
|
|
mul :: proc[
|
|
mul :: proc[
|
|
|
|
+ mat3_mul,
|
|
mat4_mul, mat4_mul_vec4,
|
|
mat4_mul, mat4_mul_vec4,
|
|
quat_mul, quat_mulf,
|
|
quat_mul, quat_mulf,
|
|
];
|
|
];
|
|
@@ -197,15 +198,27 @@ identity :: proc(T: type/[$N][N]$E) -> T {
|
|
return m;
|
|
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];
|
|
m[i][j], m[j][i] = m[j][i], m[i][j];
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return m;
|
|
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 {
|
|
mat4_mul :: proc(a, b: Mat4) -> Mat4 {
|
|
c: Mat4;
|
|
c: Mat4;
|
|
for j in 0..4 {
|
|
for j in 0..4 {
|
|
@@ -228,7 +241,6 @@ mat4_mul_vec4 :: proc(m: Mat4, v: Vec4) -> Vec4 {
|
|
};
|
|
};
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
mat4_inverse :: proc(m: Mat4) -> Mat4 {
|
|
mat4_inverse :: proc(m: Mat4) -> Mat4 {
|
|
o: Mat4;
|
|
o: Mat4;
|
|
|
|
|