updated static methods

This commit is contained in:
2024-10-01 05:16:45 -07:00
parent 1dedc7c01b
commit 2652f55b75

View File

@@ -65,7 +65,7 @@ namespace omath
static constexpr size_t ColumnsCount() noexcept { return Columns; } static constexpr size_t ColumnsCount() noexcept { return Columns; }
[[nodiscard]] [[nodiscard]]
constexpr std::pair<size_t, size_t> Size() const noexcept { return { Rows, Columns }; } static constexpr std::pair<size_t, size_t> Size() noexcept { return { Rows, Columns }; }
[[nodiscard]] constexpr const float& At(const size_t rowIndex, const size_t columnIndex) const [[nodiscard]] constexpr const float& At(const size_t rowIndex, const size_t columnIndex) const
@@ -206,7 +206,7 @@ namespace omath
} }
[[nodiscard]] [[nodiscard]]
constexpr Mat<Rows - 1, Columns - 1> Minor(size_t row, size_t column) const constexpr Mat<Rows - 1, Columns - 1> Minor(const size_t row, const size_t column) const
{ {
Mat<Rows - 1, Columns - 1> result; Mat<Rows - 1, Columns - 1> result;
for (size_t i = 0, m = 0; i < Rows; ++i) for (size_t i = 0, m = 0; i < Rows; ++i)
@@ -244,30 +244,27 @@ namespace omath
// Static methods that return fixed-size matrices // Static methods that return fixed-size matrices
[[nodiscard]] [[nodiscard]]
constexpr static Mat<4, 4> ToScreenMat(float screenWidth, float screenHeight) constexpr static Mat<4, 4> ToScreenMat(const float screenWidth, const float screenHeight)
{ {
Mat<4, 4> mat; return
mat.At(0, 0) = screenWidth / 2.f; {
mat.At(1, 1) = -screenHeight / 2.f; {screenWidth / 2.f, 0.f, 0.f, 0.f},
mat.At(2, 2) = 1.f; {0.f, -screenHeight / 2.f, 0.f, 0.f},
mat.At(3, 0) = screenWidth / 2.f; {0.f, 0.f, 1.f, 0.f},
mat.At(3, 1) = screenHeight / 2.f; {screenWidth / 2.f, screenHeight / 2.f, 0.f, 1.f},
mat.At(3, 3) = 1.f; };
return mat;
} }
[[nodiscard]] [[nodiscard]]
constexpr static Mat<4, 4> TranslationMat(const Vector3& diff) constexpr static Mat<4, 4> TranslationMat(const Vector3& diff)
{ {
Mat<4, 4> mat; return
mat.At(0, 0) = 1.f; {
mat.At(1, 1) = 1.f; {1.f, 0.f, 0.f, 0.f},
mat.At(2, 2) = 1.f; {0.f, 1.f, 0.f, 0.f},
mat.At(3, 3) = 1.f; {0.f, 0.f, 1.f, 0.f},
mat.At(3, 0) = diff.x; {diff.x, diff.y, diff.z, 1.f},
mat.At(3, 1) = diff.y; };
mat.At(3, 2) = diff.z;
return mat;
} }
[[nodiscard]] [[nodiscard]]
@@ -275,16 +272,13 @@ namespace omath
{ {
Mat<4, 4> mat; Mat<4, 4> mat;
mat.At(0, 0) = right.x; return
mat.At(0, 1) = up.x; {
mat.At(0, 2) = forward.x; {right.x, up.x, forward.x, 0.f},
mat.At(1, 0) = right.y; {right.y, up.y, forward.y, 0.f},
mat.At(1, 1) = up.y; {right.z, up.z, forward.z, 0.f},
mat.At(1, 2) = forward.y; {0.f, 0.f, 0.f, 1.f},
mat.At(2, 0) = right.z; };
mat.At(2, 1) = up.z;
mat.At(2, 2) = forward.z;
mat.At(3, 3) = 1.f;
return mat; return mat;
} }
@@ -292,16 +286,15 @@ namespace omath
[[nodiscard]] [[nodiscard]]
constexpr static Mat<4, 4> ProjectionMat(const float fieldOfView, const float aspectRatio, const float near, const float far) constexpr static Mat<4, 4> ProjectionMat(const float fieldOfView, const float aspectRatio, const float near, const float far)
{ {
Mat<4, 4> mat;
const float fovHalfTan = std::tan(angles::DegreesToRadians(fieldOfView) / 2.f); const float fovHalfTan = std::tan(angles::DegreesToRadians(fieldOfView) / 2.f);
mat.At(0, 0) = 1.f / (aspectRatio * fovHalfTan); return
mat.At(1, 1) = 1.f / fovHalfTan; {
mat.At(2, 2) = (far + near) / (far - near); {1.f / (aspectRatio * fovHalfTan), 0.f, 0.f, 0.f},
mat.At(2, 3) = (2.f * near * far) / (far - near); {0.f, 1.f / fovHalfTan, 0.f, 0.f},
mat.At(3, 2) = -1.f; {0.f, 0.f, (far + near) / (far - near), 2.f * near * far / (far - near)},
{0.f, 0.f, -1.f, 0.f}
return mat; };
} }
private: private: