From 9a37c8081d0dfe6a9cd9029ce84401f90894e3a1 Mon Sep 17 00:00:00 2001 From: iwubcode Date: Wed, 17 Sep 2025 01:23:23 -0500 Subject: [PATCH] Common: add transpose function to Matrix class --- Source/Core/Common/Matrix.cpp | 49 +++++++++++++++++++++++++++++++---- Source/Core/Common/Matrix.h | 4 ++- 2 files changed, 47 insertions(+), 6 deletions(-) diff --git a/Source/Core/Common/Matrix.cpp b/Source/Core/Common/Matrix.cpp index dd5574b6d4..44463ef1ef 100644 --- a/Source/Core/Common/Matrix.cpp +++ b/Source/Core/Common/Matrix.cpp @@ -246,6 +246,15 @@ void Matrix33::Multiply(const Matrix33& a, const Vec3& vec, Vec3* result) result->data = MatrixMultiply<3, 3, 1>(a.data, vec.data); } +float Matrix33::Determinant() const +{ + const auto m = [this](int x, int y) { return data[y + x * 3]; }; + + return m(0, 0) * (m(1, 1) * m(2, 2) - m(2, 1) * m(1, 2)) - + m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) + + m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0)); +} + Matrix33 Matrix33::Inverted() const { const auto m = [this](int x, int y) { return data[y + x * 3]; }; @@ -269,13 +278,21 @@ Matrix33 Matrix33::Inverted() const return result; } -float Matrix33::Determinant() const +Matrix33 Matrix33::Transposed() const { - const auto m = [this](int x, int y) { return data[y + x * 3]; }; + Matrix33 result; - return m(0, 0) * (m(1, 1) * m(2, 2) - m(2, 1) * m(1, 2)) - - m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) + - m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0)); + result.data[0] = data[0]; + result.data[1] = data[3]; + result.data[2] = data[6]; + result.data[3] = data[1]; + result.data[4] = data[4]; + result.data[5] = data[7]; + result.data[6] = data[2]; + result.data[7] = data[5]; + result.data[8] = data[8]; + + return result; } Matrix44 Matrix44::Identity() @@ -427,4 +444,26 @@ Matrix44 Matrix44::Inverted() const return result; } +Matrix44 Matrix44::Transposed() const +{ + Matrix44 result; + result.data[0] = data[0]; + result.data[1] = data[4]; + result.data[2] = data[8]; + result.data[3] = data[12]; + result.data[4] = data[1]; + result.data[5] = data[5]; + result.data[6] = data[9]; + result.data[7] = data[13]; + result.data[8] = data[2]; + result.data[9] = data[6]; + result.data[10] = data[10]; + result.data[11] = data[14]; + result.data[12] = data[3]; + result.data[13] = data[7]; + result.data[14] = data[11]; + result.data[15] = data[15]; + return result; +} + } // namespace Common diff --git a/Source/Core/Common/Matrix.h b/Source/Core/Common/Matrix.h index 70ccc0afad..9aafd1bf83 100644 --- a/Source/Core/Common/Matrix.h +++ b/Source/Core/Common/Matrix.h @@ -391,8 +391,9 @@ public: static void Multiply(const Matrix33& a, const Matrix33& b, Matrix33* result); static void Multiply(const Matrix33& a, const Vec3& vec, Vec3* result); - Matrix33 Inverted() const; float Determinant() const; + Matrix33 Inverted() const; + Matrix33 Transposed() const; Matrix33& operator*=(const Matrix33& rhs) { @@ -435,6 +436,7 @@ public: float Determinant() const; Matrix44 Inverted() const; + Matrix44 Transposed() const; Matrix44& operator*=(const Matrix44& rhs) {