From e0dd432e69c73d8b62e2221095086f5610368410 Mon Sep 17 00:00:00 2001 From: Orange Date: Wed, 4 Dec 2024 12:09:23 +0300 Subject: [PATCH] switched to 4x4 --- include/omath/Mat.hpp | 31 +++++++++++++---------- include/omath/engines/Source/Formulas.hpp | 8 +++--- 2 files changed, 21 insertions(+), 18 deletions(-) diff --git a/include/omath/Mat.hpp b/include/omath/Mat.hpp index 7f6aae5..84628da 100644 --- a/include/omath/Mat.hpp +++ b/include/omath/Mat.hpp @@ -349,44 +349,47 @@ namespace omath template [[nodiscard]] - Mat<3, 3, Type, St> RotationMatAxisX(const Angle& roll) noexcept + Mat<4, 4, Type, St> RotationMatAxisX(const Angle& angle) noexcept { return { - {1, 0, 0}, - {0, roll.Cos(), -roll.Sin()}, - {0, roll.Sin(), roll.Cos()}, + {1, 0, 0, 0}, + {0, angle.Cos(), -angle.Sin(), 0}, + {0, angle.Sin(), angle.Cos(), 0}, + {0, 0, 0, 1} }; } template [[nodiscard]] - Mat<3, 3, Type, St> RotationMatAxisY(const Angle& pitch) noexcept + Mat<4, 4, Type, St> RotationMatAxisY(const Angle& angle) noexcept { return { - {pitch.Cos(), 0, pitch.Sin()}, - {0 , 1, 0}, - {-pitch.Sin(), 0, pitch.Cos()}, + {angle.Cos(), 0, angle.Sin(), 0}, + {0 , 1, 0, 0}, + {-angle.Sin(), 0, angle.Cos(), 0}, + {0 , 0, 0, 1} }; } template [[nodiscard]] - Mat<3, 3, Type, St> RotationMatAxisZ(const Angle& Yaw) noexcept + Mat<4, 4, Type, St> RotationMatAxisZ(const Angle& angle) noexcept { return { - {Yaw.Cos(), -Yaw.Sin(), 0}, - {Yaw.Sin(), Yaw.Cos(), 0}, - {0, 0, 1}, + {angle.Cos(), -angle.Sin(), 0, 0}, + {angle.Sin(), angle.Cos(), 0, 0}, + {0, 0, 1, 0}, + {0, 0, 0, 1}, }; } template [[nodiscard]] - Mat<3, 3, Type, St> RotationMat(const ViewAngles& angles) noexcept + Mat<4, 4, Type, St> RotationMat(const ViewAngles& angles) noexcept { - return RotationMatAxisY(angles.pitch) * RotationMatAxisZ(angles.yaw) * RotationMatAxisX(angles.roll); + return RotationMatAxisZ(angles.yaw) * RotationMatAxisY(angles.pitch) * RotationMatAxisX(angles.roll); } } // namespace omath diff --git a/include/omath/engines/Source/Formulas.hpp b/include/omath/engines/Source/Formulas.hpp index 0721d96..28a37c6 100644 --- a/include/omath/engines/Source/Formulas.hpp +++ b/include/omath/engines/Source/Formulas.hpp @@ -10,7 +10,7 @@ namespace omath::source [[nodiscard]] inline Vector3 ForwardVector(const ViewAngles& angles) { - const auto vec = RotationMat(angles) * Mat<3, 1>({{kAbsForward.x}, {kAbsForward.y}, {kAbsForward.z}}); + const auto vec = RotationMat(angles) * MatColumnFromVector(kAbsForward); return {vec.At(0, 0), vec.At(1, 0), vec.At(2, 0)}; } @@ -18,7 +18,7 @@ namespace omath::source [[nodiscard]] inline Vector3 RightVector(const ViewAngles& angles) { - const auto vec = RotationMat(angles) * Mat<3, 1>({{kAbsRight.x}, {kAbsRight.y}, {kAbsRight.z}}); + const auto vec = RotationMat(angles) * MatColumnFromVector(kAbsRight); return {vec.At(0, 0), vec.At(1, 0), vec.At(2, 0)}; } @@ -26,7 +26,7 @@ namespace omath::source [[nodiscard]] inline Vector3 UpVector(const ViewAngles& angles) { - const auto vec = RotationMat(angles) * Mat<3, 1>({{kAbsUp.x}, {kAbsUp.y}, {kAbsUp.z}}); + const auto vec = RotationMat(angles) * MatColumnFromVector(kAbsUp); return {vec.At(0, 0), vec.At(1, 0), vec.At(2, 0)}; } @@ -58,7 +58,7 @@ namespace omath::source const float fovHalfTan = std::tan(angles::DegreesToRadians(fieldOfView) / 2.f) * kMultiplyFactor; return { - {-1.f / (aspectRatio * fovHalfTan), 0, 0, 0}, + {1.f / (aspectRatio * fovHalfTan), 0, 0, 0}, {0, -1.f / (fovHalfTan), 0, 0}, {0, 0, (far + near) / (far - near), -(2.f * far * near) / (far - near)}, {0, 0, 1, 0},