diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index b0a9e6b4f09258d00aea60c2417e51c56fd8bf4f..86938c4c8f3a65ca2dbdf3845789aa651fb4b5b7 100644 --- a/modules/camera/include/vkcv/camera/Camera.hpp +++ b/modules/camera/include/vkcv/camera/Camera.hpp @@ -14,8 +14,6 @@ namespace vkcv { int m_width; int m_height; - float m_oldX; - float m_oldY; float m_near; float m_far; float m_fov; @@ -24,7 +22,6 @@ namespace vkcv { glm::vec3 m_up; glm::vec3 m_position; float m_cameraSpeed; - float m_roll; float m_pitch; float m_yaw; @@ -36,7 +33,7 @@ namespace vkcv { public: Camera(); - ~Camera(); + virtual ~Camera(); void setPerspective(float fov, float ratio, float near, float far); @@ -44,7 +41,7 @@ namespace vkcv { void getView(glm::vec3 &x, glm::vec3 &y, glm::vec3 &z, glm::vec3 &pos); - glm::mat4 updateView(); + glm::mat4 updateView(double deltatime); void lookAt(glm::vec3 position, glm::vec3 center, glm::vec3 up); @@ -82,7 +79,7 @@ namespace vkcv { void panView( double xOffset, double yOffset ); - void updatePosition(); + void updatePosition(double deltatime); void moveForward(int action); diff --git a/modules/camera/include/vkcv/camera/TrackballCamera.hpp b/modules/camera/include/vkcv/camera/TrackballCamera.hpp index 156ad8e4302210bc9c874dadefb31a9aa99730bc..c9e269e9f7ad708c68158d5b358efbf37c5bb7a9 100644 --- a/modules/camera/include/vkcv/camera/TrackballCamera.hpp +++ b/modules/camera/include/vkcv/camera/TrackballCamera.hpp @@ -41,6 +41,9 @@ namespace vkcv { float m_sensitivity; float m_stepSize, m_theta, m_phi, m_radius; glm::vec3 m_center; + + float m_oldX; + float m_oldY; }; } \ No newline at end of file diff --git a/modules/camera/src/vkcv/camera/Camera.cpp b/modules/camera/src/vkcv/camera/Camera.cpp index 38fffa771875db44be166573b8a3c618a161e78c..2268dded819d2c4d5219a7cc7dd2e95ae82878e7 100644 --- a/modules/camera/src/vkcv/camera/Camera.cpp +++ b/modules/camera/src/vkcv/camera/Camera.cpp @@ -6,9 +6,8 @@ namespace vkcv { Camera::Camera(){ m_up = glm::vec3(0.0f, -1.0f, 0.0f); m_position = glm::vec3(0.0f, 0.0f, 0.0f); - m_cameraSpeed = 0.01f; + m_cameraSpeed = 2.f; // front - m_roll = 0.0; m_pitch = 0.0; m_yaw = 180.0; @@ -24,8 +23,8 @@ namespace vkcv { m_view = glm::lookAt(position, center, up); } - glm::mat4 Camera::updateView(){ - updatePosition(); + glm::mat4 Camera::updateView(double deltatime){ + updatePosition(deltatime); return m_view = glm::lookAt(m_position, m_position + getFront() , m_up); } @@ -45,7 +44,6 @@ namespace vkcv { const glm::mat4 Camera::getView() { - updateView(); return m_view; } @@ -136,11 +134,11 @@ namespace vkcv { m_pitch += yOffset; } - void Camera::updatePosition(){ - m_position += (m_cameraSpeed * getFront() * static_cast<float> (m_forward)); - m_position -= (m_cameraSpeed * getFront() * static_cast<float> (m_backward)); - m_position -= (glm::normalize(glm::cross(getFront(), m_up)) * m_cameraSpeed * static_cast<float> (m_left) ); - m_position += (glm::normalize(glm::cross(getFront(), m_up)) * m_cameraSpeed * static_cast<float> (m_right)); + void Camera::updatePosition(double deltatime ){ + m_position += (m_cameraSpeed * getFront() * static_cast<float> (m_forward) * static_cast<float>(deltatime)); + 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)); } void Camera::moveForward(int action){ diff --git a/projects/first_triangle/src/main.cpp b/projects/first_triangle/src/main.cpp index ff126193d94676ab966dfd3e4410c2913b54988a..275c87cf67f059c5896272639363733634e26ca2 100644 --- a/projects/first_triangle/src/main.cpp +++ b/projects/first_triangle/src/main.cpp @@ -1,10 +1,8 @@ #include <iostream> #include <vkcv/Core.hpp> -#include <vkcv/Window.hpp> -#include <vkcv/ShaderProgram.hpp> #include <GLFW/glfw3.h> #include <vkcv/camera/CameraManager.hpp> -#include <vkcv/DescriptorConfig.hpp> +#include <chrono> int main(int argc, const char** argv) { const char* applicationName = "First Triangle"; @@ -131,11 +129,15 @@ int main(int argc, const char** argv) { * * PipelineHandle trianglePipeline = core.CreatePipeline(trianglePipeline); */ - + auto start = std::chrono::system_clock::now(); while (window.isWindowOpen()) { core.beginFrame(); - + window.pollEvents(); + auto end = std::chrono::system_clock::now(); + auto deltatime = end - start; + start = end; + cameraManager.getCamera().updateView(std::chrono::duration<double>(deltatime).count()); const glm::mat4 mvp = cameraManager.getCamera().getProjection() * cameraManager.getCamera().getView(); core.renderTriangle(trianglePass, trianglePipeline, windowWidth, windowHeight, sizeof(mvp), &mvp); diff --git a/src/vkcv/Core.cpp b/src/vkcv/Core.cpp index 0d61d2adf04b23b45fc4e1d7637a22c0ec3d9ccc..0ee414fb974676b1d2df820e69218f5bb247341b 100644 --- a/src/vkcv/Core.cpp +++ b/src/vkcv/Core.cpp @@ -158,7 +158,6 @@ namespace vkcv if (acquireSwapchainImage() != Result::SUCCESS) { return; } - m_window.pollEvents(); m_Context.getDevice().waitIdle(); // FIMXE: this is a sin against graphics programming, but its getting late - Alex destroyTemporaryFramebuffers(); }