From 7213b1865f54e6b2d3578c43953b3e7c5d2145da Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Sat, 17 May 2025 11:09:37 -0400 Subject: [PATCH] Make free camera movement in 3D views framerate-independent This makes it way more tolerable to use when your framerate is super low, like in the Map Editor. --- parts/mdl/vulkanwindow.cpp | 7 +++++-- parts/mdl/vulkanwindow.h | 2 ++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/parts/mdl/vulkanwindow.cpp b/parts/mdl/vulkanwindow.cpp index 846f5db..5f406d7 100644 --- a/parts/mdl/vulkanwindow.cpp +++ b/parts/mdl/vulkanwindow.cpp @@ -185,6 +185,9 @@ void VulkanWindow::render() return; } + const float deltaTime = timer.nsecsElapsed() / 1000000000.0f; + timer.restart(); + ImGui::SetCurrentContext(m_renderer->ctx); auto &io = ImGui::GetIO(); @@ -221,8 +224,8 @@ void VulkanWindow::render() forward = normalize(glm::angleAxis(part->yaw, glm::vec3(0, 1, 0)) * glm::angleAxis(part->pitch, glm::vec3(1, 0, 0)) * glm::vec3(0, 0, 1)); right = normalize(glm::angleAxis(part->yaw, glm::vec3(0, 1, 0)) * glm::vec3(1, 0, 0)); - part->position += right * movX * 2.0f; - part->position += forward * movY * 2.0f; + part->position += right * movX * 50.0f * deltaTime; + part->position += forward * movY * 50.0f * deltaTime; m_renderer->camera.view = glm::mat4(1.0f); m_renderer->camera.view = glm::translate(m_renderer->camera.view, part->position); diff --git a/parts/mdl/vulkanwindow.h b/parts/mdl/vulkanwindow.h index 1014cf9..3133cd1 100644 --- a/parts/mdl/vulkanwindow.h +++ b/parts/mdl/vulkanwindow.h @@ -3,6 +3,7 @@ #pragma once +#include #include #include "imgui.h" @@ -30,4 +31,5 @@ private: QVulkanInstance *m_instance; MDLPart *part; bool pressed_keys[4] = {}; + QElapsedTimer timer; };