improved some code

This commit is contained in:
2024-12-08 05:19:49 +03:00
parent eddabf034b
commit fd1bb25ed8
13 changed files with 106 additions and 67 deletions
+15 -24
View File
@@ -10,7 +10,7 @@ namespace omath::source
[[nodiscard]]
inline Vector3 ForwardVector(const ViewAngles& angles)
{
const auto vec = RotationMat(angles) * MatColumnFromVector(kAbsForward);
const auto vec = MatRotation(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) * MatColumnFromVector(kAbsRight);
const auto vec = MatRotation(angles) * MatColumnFromVector(kAbsRight);
return {vec.At(0, 0), vec.At(1, 0), vec.At(2, 0)};
}
@@ -26,42 +26,33 @@ namespace omath::source
[[nodiscard]]
inline Vector3 UpVector(const ViewAngles& angles)
{
const auto vec = RotationMat(angles) * MatColumnFromVector(kAbsUp);
const auto vec = MatRotation(angles) * MatColumnFromVector(kAbsUp);
return {vec.At(0, 0), vec.At(1, 0), vec.At(2, 0)};
}
[[nodiscard]]
constexpr Mat4x4 ViewMatrixFromVecs(const Vector3& forward, const Vector3& right, const Vector3& up,
const Vector3& camera_pos)
[[nodiscard]] inline Mat4x4 CalcViewMatrix(const ViewAngles& angles, const Vector3& cam_origin)
{
return Mat4x4{
{right.x, right.y, right.z, 0},
{-up.x, -up.y, -up.z, 0},
{forward.x, forward.y, forward.z, 0},
{0, 0, 0, 1},
} *
MatTranslation<float, MatStoreType::ROW_MAJOR>(-camera_pos);
}
[[nodiscard]] inline Mat4x4 ViewMatrix(const ViewAngles& angles, const Vector3& cam_origin)
{
return ViewMatrixFromVecs(ForwardVector(angles), RightVector(angles), UpVector(angles), cam_origin);
return MatCameraView(ForwardVector(angles), RightVector(angles), UpVector(angles), cam_origin);
}
[[nodiscard]]
inline Mat4x4 PerspectiveProjectionMatrix(const float fieldOfView, const float aspectRatio, const float near, const float far)
inline Mat4x4 CalcPerspectiveProjectionMatrix(const float fieldOfView, const float aspectRatio, const float near,
const float far)
{
// NOTE: Needed tp make thing draw normal, since source is wierd
// and use tricky projection matrix formula.
constexpr auto kMultiplyFactor = 0.75f;
const float fovHalfTan = std::tan(angles::DegreesToRadians(fieldOfView) / 2.f) * kMultiplyFactor;
return {
{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},
};
{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},
};
}
} // namespace omath::source