From 00c5ea3c0f4ad3b22726d92c23db8a4c37a3b0c9 Mon Sep 17 00:00:00 2001 From: quou Date: Tue, 21 Jan 2025 22:18:48 +1100 Subject: add m3f and more --- maths.cpp | 66 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 59 insertions(+), 7 deletions(-) (limited to 'maths.cpp') 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 + ); +} -- cgit v1.2.3-54-g00ecf