mirror of
https://github.com/orange-cpp/omath.git
synced 2026-02-14 15:33:26 +00:00
updated static methods
This commit is contained in:
@@ -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:
|
||||||
|
|||||||
Reference in New Issue
Block a user