From 24cf098bf9f3b70a26121096a59d739f4a59ed5e Mon Sep 17 00:00:00 2001 From: Sebastian Gaida <gaida@ca-digit.com> Date: Fri, 28 May 2021 11:12:38 +0200 Subject: [PATCH] [#35] added delta time to update movement --- modules/camera/include/vkcv/camera/Camera.hpp | 9 +++------ .../include/vkcv/camera/TrackballCamera.hpp | 3 +++ modules/camera/src/vkcv/camera/Camera.cpp | 18 ++++++++---------- projects/first_triangle/src/main.cpp | 12 +++++++----- src/vkcv/Core.cpp | 1 - 5 files changed, 21 insertions(+), 22 deletions(-) diff --git a/modules/camera/include/vkcv/camera/Camera.hpp b/modules/camera/include/vkcv/camera/Camera.hpp index b0a9e6b4..86938c4c 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 156ad8e4..c9e269e9 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 38fffa77..2268dded 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 ff126193..275c87cf 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 0d61d2ad..0ee414fb 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(); } -- GitLab