From 9300e837896bda841c397b95c588770fce453b6c Mon Sep 17 00:00:00 2001 From: Vanessa Karolek <vaka1997@uni-koblenz.de> Date: Tue, 1 Jun 2021 20:09:52 +0200 Subject: [PATCH] [#42] add vertical movement via E and Q keys to Camera Before, the camera object was just able to move along the xz plane. For vertical movement, you have to pan view and then use forward or backward movement to move up or down. This might be not so handy for the user. Now, you can use E to move up and use Q to move down (both along default world up vector). --- modules/camera/include/vkcv/camera/Camera.hpp | 14 ++++++++++++++ .../camera/include/vkcv/camera/CameraManager.hpp | 2 +- modules/camera/src/vkcv/camera/Camera.cpp | 12 ++++++++++++ modules/camera/src/vkcv/camera/CameraManager.cpp | 6 ++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index a41d3752..f84cf2c2 100644 --- a/modules/camera/include/vkcv/camera/Camera.hpp +++ b/modules/camera/include/vkcv/camera/Camera.hpp @@ -36,6 +36,8 @@ namespace vkcv { bool m_backward; bool m_left; bool m_right; + bool m_top; + bool m_bottom; public: @@ -229,6 +231,18 @@ namespace vkcv { */ void moveRight(int action); + /** + * @brief Indicates top movement of the camera depending on the performed @p action + * @param[in] action The performed action + */ + void moveTop(int action); + + /** + * @brief Indicates bottom movement of the camera depending on the performed @p action + * @param[in] action The performed action + */ + void moveBottom(int action); + }; } diff --git a/modules/camera/include/vkcv/camera/CameraManager.hpp b/modules/camera/include/vkcv/camera/CameraManager.hpp index 1ee3a31c..b9ffdb9e 100644 --- a/modules/camera/include/vkcv/camera/CameraManager.hpp +++ b/modules/camera/include/vkcv/camera/CameraManager.hpp @@ -30,7 +30,7 @@ namespace vkcv{ void bindCamera(); /** - * @brief A callback function for key events. Currently, camera movement via W, A, S, D and window closure via Escape are supported + * @brief A callback function for key events. Currently, 3D camera movement via W, A, S, D, E, Q and window closure via Escape are supported * @param[in] key The keyboard key * @param[in] scancode The platform-specific scancode * @param[in] action The key action diff --git a/modules/camera/src/vkcv/camera/Camera.cpp b/modules/camera/src/vkcv/camera/Camera.cpp index d69596cf..908d681a 100644 --- a/modules/camera/src/vkcv/camera/Camera.cpp +++ b/modules/camera/src/vkcv/camera/Camera.cpp @@ -19,6 +19,8 @@ namespace vkcv { m_backward = false; m_left = false; m_right = false; + m_top = false; + m_bottom = false; } Camera::~Camera() = default; @@ -163,6 +165,8 @@ namespace vkcv { m_position -= (m_cameraSpeed * getFront() * static_cast<float> (m_backward) * static_cast<float>(deltaTime)); m_position -= (glm::normalize(glm::cross(getFront(), m_up)) * m_cameraSpeed * static_cast<float> (m_left) * static_cast<float>(deltaTime)); m_position += (glm::normalize(glm::cross(getFront(), m_up)) * m_cameraSpeed * static_cast<float> (m_right) * static_cast<float>(deltaTime)); + m_position -= m_up * m_cameraSpeed * static_cast<float> (m_top) * static_cast<float>(deltaTime); + m_position += m_up * m_cameraSpeed * static_cast<float> (m_bottom) * static_cast<float>(deltaTime); } void Camera::moveForward(int action){ @@ -180,4 +184,12 @@ namespace vkcv { void Camera::moveRight(int action){ m_right = static_cast<bool>(action); } + + void Camera::moveTop(int action){ + m_top = static_cast<bool>(action); + } + + void Camera::moveBottom(int action){ + m_bottom = static_cast<bool>(action); + } } \ No newline at end of file diff --git a/modules/camera/src/vkcv/camera/CameraManager.cpp b/modules/camera/src/vkcv/camera/CameraManager.cpp index efbbaa27..a08684ec 100644 --- a/modules/camera/src/vkcv/camera/CameraManager.cpp +++ b/modules/camera/src/vkcv/camera/CameraManager.cpp @@ -72,6 +72,12 @@ namespace vkcv{ case GLFW_KEY_D: m_camera.moveRight(action); break; + case GLFW_KEY_E: + m_camera.moveTop(action); + break; + case GLFW_KEY_Q: + m_camera.moveBottom(action); + break; case GLFW_KEY_ESCAPE: glfwSetWindowShouldClose(m_window.getWindow(), 1); break; -- GitLab