From 2406d39c7059db6d1bc0fafef3cf3122ba37968d Mon Sep 17 00:00:00 2001 From: Sebastian Gaida <gaida@ca-digit.com> Date: Fri, 4 Jun 2021 14:39:16 +0200 Subject: [PATCH] [#34] added resizing event to camera --- modules/camera/include/vkcv/camera/Camera.hpp | 2 +- .../camera/include/vkcv/camera/CameraManager.hpp | 10 ++++++---- modules/camera/src/vkcv/camera/Camera.cpp | 6 ++++-- modules/camera/src/vkcv/camera/CameraManager.cpp | 14 ++++++++++---- projects/first_mesh/src/main.cpp | 8 -------- 5 files changed, 21 insertions(+), 19 deletions(-) diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index 7e177b9a..ff8fda81 100644 --- a/modules/camera/include/vkcv/camera/Camera.hpp +++ b/modules/camera/include/vkcv/camera/Camera.hpp @@ -63,7 +63,7 @@ namespace vkcv { void changeFov(double fov); - void updateRatio(float ratio); + void updateRatio(int width, int height); float getRatio() const; diff --git a/modules/camera/include/vkcv/camera/CameraManager.hpp b/modules/camera/include/vkcv/camera/CameraManager.hpp index 9511b752..4e52ecce 100644 --- a/modules/camera/include/vkcv/camera/CameraManager.hpp +++ b/modules/camera/include/vkcv/camera/CameraManager.hpp @@ -9,10 +9,11 @@ namespace vkcv{ class CameraManager{ private: - std::function<void(int, int, int, int)> m_keyHandle; - std::function<void(double, double)> m_mouseMoveHandle; - std::function<void(double, double)> m_mouseScrollHandle; - std::function<void(int, int, int)> m_mouseButtonHandle; + std::function<void(int, int, int, int)> e_keyHandle; + std::function<void(double, double)> e_mouseMoveHandle; + std::function<void(double, double)> e_mouseScrollHandle; + std::function<void(int, int, int)> e_mouseButtonHandle; + std::function<void(int, int)> e_resizeHandle; Window &m_window; Camera m_camera; @@ -29,6 +30,7 @@ namespace vkcv{ void scrollCallback( double offsetX, double offsetY); void mouseMoveCallback( double offsetX, double offsetY); void mouseButtonCallback(int button, int action, int mods); + void resizeCallback(int width, int height); public: CameraManager(Window &window, float width, float height, glm::vec3 up = glm::vec3(0.0f,-1.0f,0.0f), glm::vec3 position = glm::vec3(0.0f,0.0f,0.0f)); diff --git a/modules/camera/src/vkcv/camera/Camera.cpp b/modules/camera/src/vkcv/camera/Camera.cpp index bc8a8498..ffe77898 100644 --- a/modules/camera/src/vkcv/camera/Camera.cpp +++ b/modules/camera/src/vkcv/camera/Camera.cpp @@ -82,8 +82,10 @@ namespace vkcv { setFov(fov); } - void Camera::updateRatio( float ratio){ - m_ratio = ratio; + void Camera::updateRatio( int width, int height){ + m_width = width; + m_height = height; + m_ratio = static_cast<float>(width)/height; setPerspective( m_fov, m_ratio, m_near, m_far); } diff --git a/modules/camera/src/vkcv/camera/CameraManager.cpp b/modules/camera/src/vkcv/camera/CameraManager.cpp index 18f499a2..2631890d 100644 --- a/modules/camera/src/vkcv/camera/CameraManager.cpp +++ b/modules/camera/src/vkcv/camera/CameraManager.cpp @@ -15,10 +15,11 @@ namespace vkcv{ } void CameraManager::bindCamera(){ - m_keyHandle = m_window.e_key.add( [&](int key, int scancode, int action, int mods) { this->keyCallback(key, scancode, action, mods); }); - m_mouseMoveHandle = m_window.e_mouseMove.add( [&]( double offsetX, double offsetY) {this->mouseMoveCallback( offsetX, offsetY);} ); - m_mouseScrollHandle = m_window.e_mouseScroll.add([&](double offsetX, double offsetY) {this->scrollCallback( offsetX, offsetY);} ); - m_mouseButtonHandle = m_window.e_mouseButton.add([&] (int button, int action, int mods) {this->mouseButtonCallback( button, action, mods);}); + e_keyHandle = m_window.e_key.add( [&](int key, int scancode, int action, int mods) { this->keyCallback(key, scancode, action, mods); }); + e_mouseMoveHandle = m_window.e_mouseMove.add( [&]( double offsetX, double offsetY) {this->mouseMoveCallback( offsetX, offsetY);} ); + e_mouseScrollHandle = m_window.e_mouseScroll.add([&](double offsetX, double offsetY) {this->scrollCallback( offsetX, offsetY);} ); + e_mouseButtonHandle = m_window.e_mouseButton.add([&] (int button, int action, int mods) {this->mouseButtonCallback( button, action, mods);}); + e_resizeHandle = m_window.e_resize.add([&] (int width, int height) {this->resizeCallback( width, height);}); } void CameraManager::mouseButtonCallback(int button, int action, int mods){ @@ -75,6 +76,11 @@ namespace vkcv{ break; } } + + void CameraManager::resizeCallback(int width, int height){ + m_camera.updateRatio(width, height); + } + Camera &CameraManager::getCamera(){ return m_camera; } diff --git a/projects/first_mesh/src/main.cpp b/projects/first_mesh/src/main.cpp index 1a332c50..0fc580dc 100644 --- a/projects/first_mesh/src/main.cpp +++ b/projects/first_mesh/src/main.cpp @@ -18,14 +18,6 @@ int main(int argc, const char** argv) { vkcv::CameraManager cameraManager(window, static_cast<float>(window.getWidth()), static_cast<float>(window.getHeight())); window.initEvents(); - window.e_resize.add([&cameraManager](int width, int height) { - auto& camera = cameraManager.getCamera(); - float near; - float far; - camera.getNearFar(near, far); - const float aspectRatio = static_cast<float>(width) / height; - camera.setPerspective(camera.getFov(), aspectRatio, near, far); - }); vkcv::Core core = vkcv::Core::create( window, -- GitLab