From f8d6e4b544e8e0a37944c37c79823dab7d9dfe16 Mon Sep 17 00:00:00 2001 From: Orange Date: Sat, 20 Sep 2025 17:09:13 +0300 Subject: [PATCH] unified look at for source iw_engine --- source/engines/iw_engine/traits/camera_trait.cpp | 7 +++---- source/engines/source_engine/traits/camera_trait.cpp | 8 ++++---- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/source/engines/iw_engine/traits/camera_trait.cpp b/source/engines/iw_engine/traits/camera_trait.cpp index a791751..427a3c5 100644 --- a/source/engines/iw_engine/traits/camera_trait.cpp +++ b/source/engines/iw_engine/traits/camera_trait.cpp @@ -8,11 +8,10 @@ namespace omath::iw_engine ViewAngles CameraTrait::calc_look_at_angle(const Vector3& cam_origin, const Vector3& look_at) noexcept { - const auto distance = cam_origin.distance_to(look_at); - const auto delta = look_at - cam_origin; + const auto direction = (look_at - cam_origin).normalized(); - return {PitchAngle::from_radians(-std::asin(delta.z / distance)), - YawAngle::from_radians(std::atan2(delta.y, delta.x)), RollAngle::from_radians(0.f)}; + return {PitchAngle::from_radians(-std::asin(direction.z)), + YawAngle::from_radians(std::atan2(direction.y, direction.x)), RollAngle::from_radians(0.f)}; } Mat4X4 CameraTrait::calc_view_matrix(const ViewAngles& angles, const Vector3& cam_origin) noexcept { diff --git a/source/engines/source_engine/traits/camera_trait.cpp b/source/engines/source_engine/traits/camera_trait.cpp index 4f49a3e..071326e 100644 --- a/source/engines/source_engine/traits/camera_trait.cpp +++ b/source/engines/source_engine/traits/camera_trait.cpp @@ -8,11 +8,11 @@ namespace omath::source_engine ViewAngles CameraTrait::calc_look_at_angle(const Vector3& cam_origin, const Vector3& look_at) noexcept { - const auto distance = cam_origin.distance_to(look_at); - const auto delta = look_at - cam_origin; + const auto direction = (look_at - cam_origin).normalized(); - return {PitchAngle::from_radians(-std::asin(delta.z / distance)), - YawAngle::from_radians(std::atan2(delta.y, delta.x)), RollAngle::from_radians(0.f)}; + + return {PitchAngle::from_radians(-std::asin(direction.z)), + YawAngle::from_radians(std::atan2(direction.y, direction.x)), RollAngle::from_radians(0.f)}; } Mat4X4 CameraTrait::calc_view_matrix(const ViewAngles& angles, const Vector3& cam_origin) noexcept {