mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-06 07:38:48 +00:00
Add mat3_mul and generic transpose to math.odin
This commit is contained in:
+16
-4
@@ -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 {
|
transpose :: proc(m: $M/[$N][N]f32) -> M {
|
||||||
for j in 0..4 {
|
for j in 0..N {
|
||||||
for i in 0..4 {
|
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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user