summaryrefslogtreecommitdiff
path: root/maths.cpp
diff options
context:
space:
mode:
authorquou <quou@disroot.org>2025-01-21 22:18:48 +1100
committerquou <quou@disroot.org>2025-01-21 22:30:05 +1100
commit00c5ea3c0f4ad3b22726d92c23db8a4c37a3b0c9 (patch)
tree5faff5710a93dd5af8c390bd1b18a7985cf9f2c8 /maths.cpp
parent3d6c0450f8a5d46dfced510bad7d0a3792c3359b (diff)
add m3f and more
Diffstat (limited to 'maths.cpp')
-rw-r--r--maths.cpp66
1 files changed, 59 insertions, 7 deletions
diff --git a/maths.cpp b/maths.cpp
index 0c796af..20581ca 100644
--- a/maths.cpp
+++ b/maths.cpp
@@ -89,6 +89,25 @@ m4f::m4f(float d) {
m[3][3] = d;
}
+m4f::m4f(const v4f& r0, const v4f& r1, const v4f& r2, const v4f& r3) {
+ m[0][0] = r0.x;
+ m[0][1] = r0.y;
+ m[0][2] = r0.z;
+ m[0][3] = r0.w;
+ m[1][0] = r1.x;
+ m[1][1] = r1.y;
+ m[1][2] = r1.z;
+ m[1][3] = r1.w;
+ m[2][0] = r2.x;
+ m[2][1] = r2.y;
+ m[2][2] = r2.z;
+ m[2][3] = r2.w;
+ m[3][0] = r3.x;
+ m[3][1] = r3.y;
+ m[3][2] = r3.z;
+ m[3][3] = r3.w;
+}
+
m4f m4f::identity() {
return m4f(1.0f);
}
@@ -323,15 +342,11 @@ m4f m4f::transposed() const {
return r;
}
-v4f m4f::transform(m4f m, v4f v) {
- return v4f(
- m.m[0][0] * v.x + m.m[1][0] * v.y + m.m[2][0] * v.z + m.m[3][0] * v.w,
- m.m[0][1] * v.x + m.m[1][1] * v.y + m.m[2][1] * v.z + m.m[3][1] * v.w,
- m.m[0][2] * v.x + m.m[1][2] * v.y + m.m[2][2] * v.z + m.m[3][2] * v.w,
- m.m[0][3] * v.x + m.m[1][3] * v.y + m.m[2][3] * v.z + m.m[3][3] * v.w);
+v4f m4f::transform(const m4f& m, const v4f& v) {
+ return m * v;
}
-AABB m4f::transform(m4f m, AABB aabb) {
+AABB m4f::transform(const m4f& m, const AABB& aabb) {
v3f corners[] = {
aabb.min,
v3f(aabb.min.x, aabb.max.y, aabb.min.z),
@@ -361,3 +376,40 @@ AABB m4f::transform(m4f m, AABB aabb) {
return result;
}
+
+m3f::m3f() {}
+m3f::m3f(float d) {
+ for (int y = 0; y < 3; y++) {
+ for (int x = 0; x < 3; x++) {
+ m[x][y] = 0.0f;
+ }
+ }
+ m[0][0] = d;
+ m[1][1] = d;
+ m[2][2] = d;
+ m[3][3] = d;
+}
+
+m3f::m3f(const v3f& r0, const v3f& r1, const v3f& r2) {
+ m[0][0] = r0.x;
+ m[0][1] = r0.y;
+ m[0][2] = r0.z;
+ m[1][0] = r1.x;
+ m[1][1] = r1.y;
+ m[1][2] = r1.z;
+ m[2][0] = r2.x;
+ m[2][1] = r2.y;
+ m[2][2] = r2.z;
+}
+
+v3f m3f::transform(const m3f& m, const v3f& v) {
+ return m * v;
+}
+
+v3f m3f::operator*(const v3f& other) const {
+ return v3f(
+ m[0][0] * other.x + m[1][0] * other.y + m[2][0] * other.z,
+ m[0][1] * other.x + m[1][1] * other.y + m[2][1] * other.z,
+ m[0][2] * other.x + m[1][2] * other.y + m[2][2] * other.z
+ );
+}