aboutsummaryrefslogtreecommitdiff
path: root/src/core/matrix4x4.rs
diff options
context:
space:
mode:
authorJulian T <julian@jtle.dk>2021-02-03 14:23:14 +0100
committerJulian T <julian@jtle.dk>2021-02-03 14:23:14 +0100
commitf02aabd4db7232f927622b87ea885491e6651b44 (patch)
tree0a219e2f5b65edd7cead6ff751058a2ec7431ab1 /src/core/matrix4x4.rs
parent2b4adacea3c76b8b33dc5f50d296dd4a61107c16 (diff)
Work on camera implementation using Transformationscamera-using-transform
Not sure if this is really neccesary, will take that later, now it is saved on this commit. The reason it ditched it is that it requires the ability to inverse matrixes, which is really complicated
Diffstat (limited to 'src/core/matrix4x4.rs')
-rw-r--r--src/core/matrix4x4.rs31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/core/matrix4x4.rs b/src/core/matrix4x4.rs
index 521d7ab..f8c685d 100644
--- a/src/core/matrix4x4.rs
+++ b/src/core/matrix4x4.rs
@@ -1,4 +1,5 @@
use crate::{Number, Float};
+use std::ops;
pub struct Matrix4x4<T: Number> {
pub m: [[T; 4]; 4],
@@ -20,6 +21,36 @@ impl<T: Number> Matrix4x4<T> {
],
}
}
+
+ pub fn initial(initial: T) -> Self {
+ Self {
+ m : [ [initial; 4]; 4]
+ }
+ }
+
+ pub fn inverse(&self) -> Self {
+
+ }
+}
+
+impl<T: Number> ops::Mul for &Matrix4x4<T> {
+ type Output = Matrix4x4<T>;
+
+ fn mul(self, op: Self) -> Self::Output {
+ let mut res = Self::Output::initial(Default::default());
+
+ // Not very fast
+ for i in 0..4 {
+ for j in 0..4 {
+ res.m[i][j] = self.m[i][0] * op.m[0][j] +
+ self.m[i][1] * op.m[1][j] +
+ self.m[i][2] * op.m[2][j] +
+ self.m[i][3] * op.m[3][j];
+ }
+ }
+
+ res
+ }
}
impl Matrix4x4f {