diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index a41d37525e0313e35f2e571428b9838eeeb0d055..f84cf2c2a6ad9fe0688e7a157361126029b59bb3 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 1ee3a31c165cec457a7c6379852b01993bc86532..b9ffdb9ed17827532818371d94639124c8baeec1 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 d69596cf7ca1954451676784baa8ea4ba7ecb9a3..908d681a4503d908dd6b08e20dca04b1e2a493c7 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 efbbaa2723548a8abfebb4a841a681b60e8a3d0d..a08684ec260ef098fe122498a51aeaf50cc74b1b 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;