From f5eb0e0dfae681eeb58b8ed66ed3a000d846f306 Mon Sep 17 00:00:00 2001 From: Green Sky Date: Tue, 15 Feb 2022 17:21:45 +0100 Subject: [PATCH] add camera view dir helper --- .../src/mm/opengl/camera_3d.cpp | 36 +++++++++++-------- .../src/mm/opengl/camera_3d.hpp | 2 ++ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/framework/opengl_renderer/src/mm/opengl/camera_3d.cpp b/framework/opengl_renderer/src/mm/opengl/camera_3d.cpp index 95707ec..082025d 100644 --- a/framework/opengl_renderer/src/mm/opengl/camera_3d.cpp +++ b/framework/opengl_renderer/src/mm/opengl/camera_3d.cpp @@ -51,20 +51,7 @@ void Camera3D::updateView(void) { pitch = glm::clamp(pitch, -(glm::pi()/2 - 0.00001f), glm::pi()/2 - 0.00001f); yaw = glm::mod(yaw, 2*glm::pi()); - glm::vec3 front {0,0,0}; - { // TODO: optimize - // if y up/down - front.x += up.y * glm::cos(pitch) * glm::cos(-yaw); // TODO: y is yaw inverted?? - front.y += up.y * glm::sin(pitch); - front.z += up.y * glm::cos(pitch) * glm::sin(-yaw); - - // if z up/down - front.x += up.z * glm::cos(pitch) * glm::cos(yaw); - front.y += up.z * glm::cos(pitch) * glm::sin(yaw); - front.z += up.z * glm::sin(pitch); - } - - front = glm::normalize(front); + glm::vec3 front = getViewDir(); _view = glm::lookAt(translation, translation + front, up); } @@ -82,6 +69,27 @@ glm::mat4 Camera3D::getProjection() const { return _projection; } +glm::vec3 Camera3D::getViewDir(void) const { + glm::vec3 front {0,0,0}; + { // TODO: optimize +#if 0 + // if y up/down + front.x += up.y * glm::cos(pitch) * glm::cos(-yaw); // TODO: y is yaw inverted?? + front.y += up.y * glm::sin(pitch); + front.z += up.y * glm::cos(pitch) * glm::sin(-yaw); +#else + // if z up/down + front.x += up.z * glm::cos(pitch) * glm::cos(yaw); + front.y += up.z * glm::cos(pitch) * glm::sin(yaw); + front.z += up.z * glm::sin(pitch); +#endif + } + + front = glm::normalize(front); + + return front; +} + std::array Camera3D::getFrustumPlanes(void) const { ZoneScopedN("Camera3D::getFrustumPlanes") diff --git a/framework/opengl_renderer/src/mm/opengl/camera_3d.hpp b/framework/opengl_renderer/src/mm/opengl/camera_3d.hpp index 02decf7..e39f356 100644 --- a/framework/opengl_renderer/src/mm/opengl/camera_3d.hpp +++ b/framework/opengl_renderer/src/mm/opengl/camera_3d.hpp @@ -47,6 +47,8 @@ namespace MM::OpenGL { glm::mat4 getView(void) const; glm::mat4 getProjection(void) const; + glm::vec3 getViewDir(void) const; + // call updateView beforehand, does not cache std::array getFrustumPlanes(void) const;