From 00bb22347f125c99d500b62757f6ad150a26595f Mon Sep 17 00:00:00 2001 From: graapka99558 Date: Mon, 17 Nov 2025 14:12:14 +0100 Subject: [PATCH] Gamematrix erstellt 2 --- src/gamematrix.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/gamematrix.cpp b/src/gamematrix.cpp index ae65a96..5fccbe3 100644 --- a/src/gamematrix.cpp +++ b/src/gamematrix.cpp @@ -34,3 +34,43 @@ namespace Matrix3D { t[2][3] = pos.z; return t; } + + Mat4 rot3D(double angle_deg, char axis) { + Mat4 r = identity(); + + double rad = angle_deg * M_PI / 180.0; + double c = std::cos(rad); + double s = std::sin(rad); + + switch(axis) { + case 'x': case 'X': + r[1][1] = c; r[1][2] = -s; + r[2][1] = s; r[2][2] = c; + break; + + case 'y': case 'Y': + r[0][0] = c; r[0][2] = s; + r[2][0] = -s; r[2][2] = c; + break; + + case 'z': case 'Z': + r[0][0] = c; r[0][1] = -s; + r[1][0] = s; r[1][1] = c; + break; + } + return r; + } + + Vec3 operator*(const Mat4& M, const Vec3& v) { + Vec3 out; + out.x = M[0][0]*v.x + M[0][1]*v.y + M[0][2]*v.z + M[0][3]; + out.y = M[1][0]*v.x + M[1][1]*v.y + M[1][2]*v.z + M[1][3]; + out.z = M[2][0]*v.x + M[2][1]*v.y + M[2][2]*v.z + M[2][3]; + return out; + } + + Mat4 operator*(const Mat4& A, const Mat4& B) { + return matmul(A, B); + } + +} \ No newline at end of file