mirror of
https://github.com/orange-cpp/omath.git
synced 2026-06-15 03:34:35 +00:00
fix
This commit is contained in:
@@ -70,17 +70,17 @@ namespace omath::cry_engine
|
|||||||
}
|
}
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
||||||
const float field_of_view, const float aspect_ratio, const float near, const float far,
|
const float field_of_view, const float aspect_ratio, const float near_plane, const float far_plane,
|
||||||
const NDCDepthRange ndc_depth_range = NDCDepthRange::ZERO_TO_ONE) noexcept
|
const NDCDepthRange ndc_depth_range = NDCDepthRange::ZERO_TO_ONE) noexcept
|
||||||
{
|
{
|
||||||
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
|
|
||||||
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
||||||
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
std::unreachable();
|
std::unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -29,9 +29,10 @@ namespace omath::cry_engine
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
OMATH_CONSTEXPR static Mat4X4
|
OMATH_CONSTEXPR static Mat4X4
|
||||||
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
||||||
const float near, const float far, const NDCDepthRange ndc_depth_range) noexcept
|
const float near_plane, const float far_plane,
|
||||||
|
const NDCDepthRange ndc_depth_range) noexcept
|
||||||
{
|
{
|
||||||
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near, far,
|
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near_plane, far_plane,
|
||||||
ndc_depth_range);
|
ndc_depth_range);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -75,17 +75,17 @@ namespace omath::frostbite_engine
|
|||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
||||||
const float field_of_view, const float aspect_ratio, const float near, const float far,
|
const float field_of_view, const float aspect_ratio, const float near_plane, const float far_plane,
|
||||||
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
||||||
{
|
{
|
||||||
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
|
|
||||||
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
||||||
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
|
|
||||||
std::unreachable();
|
std::unreachable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,9 +31,10 @@ namespace omath::frostbite_engine
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
OMATH_CONSTEXPR static Mat4X4
|
OMATH_CONSTEXPR static Mat4X4
|
||||||
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
||||||
const float near, const float far, const NDCDepthRange ndc_depth_range) noexcept
|
const float near_plane, const float far_plane,
|
||||||
|
const NDCDepthRange ndc_depth_range) noexcept
|
||||||
{
|
{
|
||||||
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near, far,
|
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near_plane, far_plane,
|
||||||
ndc_depth_range);
|
ndc_depth_range);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ namespace omath::iw_engine
|
|||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
||||||
const float field_of_view, const float aspect_ratio, const float near, const float far,
|
const float field_of_view, const float aspect_ratio, const float near_plane, const float far_plane,
|
||||||
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
||||||
{
|
{
|
||||||
constexpr float k_source_reference_aspect = 4.f / 3.f;
|
constexpr float k_source_reference_aspect = 4.f / 3.f;
|
||||||
@@ -80,11 +80,11 @@ namespace omath::iw_engine
|
|||||||
|
|
||||||
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
||||||
vertical_fov, aspect_ratio, near, far);
|
vertical_fov, aspect_ratio, near_plane, far_plane);
|
||||||
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
||||||
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
||||||
vertical_fov, aspect_ratio, near, far);
|
vertical_fov, aspect_ratio, near_plane, far_plane);
|
||||||
std::unreachable();
|
std::unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,10 @@ namespace omath::iw_engine
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
OMATH_CONSTEXPR static Mat4X4
|
OMATH_CONSTEXPR static Mat4X4
|
||||||
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
||||||
const float near, const float far, const NDCDepthRange ndc_depth_range) noexcept
|
const float near_plane, const float far_plane,
|
||||||
|
const NDCDepthRange ndc_depth_range) noexcept
|
||||||
{
|
{
|
||||||
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near, far,
|
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near_plane, far_plane,
|
||||||
ndc_depth_range);
|
ndc_depth_range);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -75,18 +75,18 @@ namespace omath::opengl_engine
|
|||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
||||||
const float field_of_view, const float aspect_ratio, const float near, const float far,
|
const float field_of_view, const float aspect_ratio, const float near_plane, const float far_plane,
|
||||||
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
||||||
{
|
{
|
||||||
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
||||||
return mat_perspective_right_handed_vertical_fov<
|
return mat_perspective_right_handed_vertical_fov<
|
||||||
float, MatStoreType::COLUMN_MAJOR, NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
float, MatStoreType::COLUMN_MAJOR, NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
|
|
||||||
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
||||||
return mat_perspective_right_handed_vertical_fov<
|
return mat_perspective_right_handed_vertical_fov<
|
||||||
float, MatStoreType::COLUMN_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
float, MatStoreType::COLUMN_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
|
|
||||||
std::unreachable();
|
std::unreachable();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -32,9 +32,10 @@ namespace omath::opengl_engine
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
OMATH_CONSTEXPR static Mat4X4
|
OMATH_CONSTEXPR static Mat4X4
|
||||||
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
||||||
const float near, const float far, const NDCDepthRange ndc_depth_range) noexcept
|
const float near_plane, const float far_plane,
|
||||||
|
const NDCDepthRange ndc_depth_range) noexcept
|
||||||
{
|
{
|
||||||
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near, far,
|
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near_plane, far_plane,
|
||||||
ndc_depth_range);
|
ndc_depth_range);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -76,17 +76,17 @@ namespace omath::rage_engine
|
|||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
||||||
const float field_of_view, const float aspect_ratio, const float near, const float far,
|
const float field_of_view, const float aspect_ratio, const float near_plane, const float far_plane,
|
||||||
const NDCDepthRange ndc_depth_range = NDCDepthRange::ZERO_TO_ONE) noexcept
|
const NDCDepthRange ndc_depth_range = NDCDepthRange::ZERO_TO_ONE) noexcept
|
||||||
{
|
{
|
||||||
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
|
|
||||||
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
||||||
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
std::unreachable();
|
std::unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,10 @@ namespace omath::rage_engine
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
OMATH_CONSTEXPR static Mat4X4
|
OMATH_CONSTEXPR static Mat4X4
|
||||||
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
||||||
const float near, const float far, const NDCDepthRange ndc_depth_range) noexcept
|
const float near_plane, const float far_plane,
|
||||||
|
const NDCDepthRange ndc_depth_range) noexcept
|
||||||
{
|
{
|
||||||
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near, far,
|
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near_plane, far_plane,
|
||||||
ndc_depth_range);
|
ndc_depth_range);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -71,7 +71,7 @@ namespace omath::source_engine
|
|||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
||||||
const float field_of_view, const float aspect_ratio, const float near, const float far,
|
const float field_of_view, const float aspect_ratio, const float near_plane, const float far_plane,
|
||||||
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
||||||
{
|
{
|
||||||
constexpr float k_source_reference_aspect = 4.f / 3.f;
|
constexpr float k_source_reference_aspect = 4.f / 3.f;
|
||||||
@@ -79,11 +79,11 @@ namespace omath::source_engine
|
|||||||
|
|
||||||
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
||||||
vertical_fov, aspect_ratio, near, far);
|
vertical_fov, aspect_ratio, near_plane, far_plane);
|
||||||
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
||||||
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
return mat_perspective_left_handed_vertical_fov<float, MatStoreType::ROW_MAJOR,
|
||||||
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
||||||
vertical_fov, aspect_ratio, near, far);
|
vertical_fov, aspect_ratio, near_plane, far_plane);
|
||||||
std::unreachable();
|
std::unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,10 @@ namespace omath::source_engine
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
OMATH_CONSTEXPR static Mat4X4
|
OMATH_CONSTEXPR static Mat4X4
|
||||||
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
||||||
const float near, const float far, const NDCDepthRange ndc_depth_range) noexcept
|
const float near_plane, const float far_plane,
|
||||||
|
const NDCDepthRange ndc_depth_range) noexcept
|
||||||
{
|
{
|
||||||
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near, far,
|
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near_plane, far_plane,
|
||||||
ndc_depth_range);
|
ndc_depth_range);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -75,17 +75,17 @@ namespace omath::unity_engine
|
|||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
||||||
const float field_of_view, const float aspect_ratio, const float near, const float far,
|
const float field_of_view, const float aspect_ratio, const float near_plane, const float far_plane,
|
||||||
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
||||||
{
|
{
|
||||||
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
||||||
return omath::mat_perspective_right_handed_vertical_fov<
|
return omath::mat_perspective_right_handed_vertical_fov<
|
||||||
float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
float, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
||||||
return omath::mat_perspective_right_handed_vertical_fov<
|
return omath::mat_perspective_right_handed_vertical_fov<
|
||||||
float, MatStoreType::ROW_MAJOR, NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
float, MatStoreType::ROW_MAJOR, NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
std::unreachable();
|
std::unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,10 @@ namespace omath::unity_engine
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
OMATH_CONSTEXPR static Mat4X4
|
OMATH_CONSTEXPR static Mat4X4
|
||||||
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
||||||
const float near, const float far, const NDCDepthRange ndc_depth_range) noexcept
|
const float near_plane, const float far_plane,
|
||||||
|
const NDCDepthRange ndc_depth_range) noexcept
|
||||||
{
|
{
|
||||||
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near, far,
|
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near_plane, far_plane,
|
||||||
ndc_depth_range);
|
ndc_depth_range);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -75,17 +75,17 @@ namespace omath::unreal_engine
|
|||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
inline OMATH_CONSTEXPR Mat4X4 calc_perspective_projection_matrix(
|
||||||
const double field_of_view, const double aspect_ratio, const double near, const double far,
|
const double field_of_view, const double aspect_ratio, const double near_plane, const double far_plane,
|
||||||
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
const NDCDepthRange ndc_depth_range = NDCDepthRange::NEGATIVE_ONE_TO_ONE) noexcept
|
||||||
{
|
{
|
||||||
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::ZERO_TO_ONE)
|
||||||
return mat_perspective_left_handed_horizontal_fov<
|
return mat_perspective_left_handed_horizontal_fov<
|
||||||
double, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
double, MatStoreType::ROW_MAJOR, NDCDepthRange::ZERO_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
if (ndc_depth_range == NDCDepthRange::NEGATIVE_ONE_TO_ONE)
|
||||||
return mat_perspective_left_handed_horizontal_fov<
|
return mat_perspective_left_handed_horizontal_fov<
|
||||||
double, MatStoreType::ROW_MAJOR, NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
double, MatStoreType::ROW_MAJOR, NDCDepthRange::NEGATIVE_ONE_TO_ONE>(
|
||||||
field_of_view, aspect_ratio, near, far);
|
field_of_view, aspect_ratio, near_plane, far_plane);
|
||||||
std::unreachable();
|
std::unreachable();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -31,9 +31,10 @@ namespace omath::unreal_engine
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
OMATH_CONSTEXPR static Mat4X4
|
OMATH_CONSTEXPR static Mat4X4
|
||||||
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
calc_projection_matrix(const projection::FieldOfView& fov, const projection::ViewPort& view_port,
|
||||||
const double near, const double far, const NDCDepthRange ndc_depth_range) noexcept
|
const double near_plane, const double far_plane,
|
||||||
|
const NDCDepthRange ndc_depth_range) noexcept
|
||||||
{
|
{
|
||||||
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near, far,
|
return calc_perspective_projection_matrix(fov.as_degrees(), view_port.aspect_ratio(), near_plane, far_plane,
|
||||||
ndc_depth_range);
|
ndc_depth_range);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -84,13 +84,13 @@ static_assert(source_camera_constexpr_projection_round_trip());
|
|||||||
|
|
||||||
TEST(UnitTestProjection, Projection)
|
TEST(UnitTestProjection, Projection)
|
||||||
{
|
{
|
||||||
constexpr auto fov = omath::Angle<float, 0.f, 180.f, omath::AngleFlags::Clamped>::from_degrees(90.f);
|
OMATH_CONSTEXPR auto fov = omath::Angle<float, 0.f, 180.f, omath::AngleFlags::Clamped>::from_degrees(90.f);
|
||||||
constexpr auto cam = omath::source_engine::Camera({0, 0, 0}, omath::source_engine::ViewAngles{}, {1920.f, 1080.f}, fov,
|
OMATH_CONSTEXPR auto cam = omath::source_engine::Camera(
|
||||||
0.01f, 1000.f);
|
{0, 0, 0}, omath::source_engine::ViewAngles{}, {1920.f, 1080.f}, fov, 0.01f, 1000.f);
|
||||||
|
|
||||||
constexpr auto projected = cam.world_to_screen({1000.f, 0, 50.f});
|
OMATH_CONSTEXPR auto projected = cam.world_to_screen({1000.f, 0, 50.f});
|
||||||
constexpr auto result = cam.screen_to_world(projected.value());
|
OMATH_CONSTEXPR auto result = cam.screen_to_world(projected.value());
|
||||||
constexpr auto result2 = cam.world_to_screen(result.value());
|
OMATH_CONSTEXPR auto result2 = cam.world_to_screen(result.value());
|
||||||
|
|
||||||
EXPECT_EQ(static_cast<omath::Vector2<float>>(projected.value()),
|
EXPECT_EQ(static_cast<omath::Vector2<float>>(projected.value()),
|
||||||
static_cast<omath::Vector2<float>>(result2.value()));
|
static_cast<omath::Vector2<float>>(result2.value()));
|
||||||
|
|||||||
Reference in New Issue
Block a user