diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index 7e177b9a2fbde0890e0c8ea6a1d9a19d6e277c7c..ff8fda811eaad7a99dbb940601f9e5904025255e 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 9511b752e972afb1e10f41a118433a4e8933fd65..4e52eccea25e8544a9a5cc89d0dc74ddd0e023c6 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 bc8a8498e67a6bd751f5a6ed1d4c4fba0279a68d..ffe77898540d1f01a01cb50a39ac06b5cdf95d56 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 18f499a2b34b64c1442c5d9e267d6476b8d69199..2631890d646fbf27a4fbb14cfeef706678d8918c 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; }