1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-05-19 06:47:44 +00:00

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.
This commit is contained in:
Joshua Goins 2025-05-17 11:09:37 -04:00
parent 80f1e2c1dd
commit 7213b1865f
2 changed files with 7 additions and 2 deletions

View file

@ -185,6 +185,9 @@ void VulkanWindow::render()
return; return;
} }
const float deltaTime = timer.nsecsElapsed() / 1000000000.0f;
timer.restart();
ImGui::SetCurrentContext(m_renderer->ctx); ImGui::SetCurrentContext(m_renderer->ctx);
auto &io = ImGui::GetIO(); 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)); 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)); right = normalize(glm::angleAxis(part->yaw, glm::vec3(0, 1, 0)) * glm::vec3(1, 0, 0));
part->position += right * movX * 2.0f; part->position += right * movX * 50.0f * deltaTime;
part->position += forward * movY * 2.0f; part->position += forward * movY * 50.0f * deltaTime;
m_renderer->camera.view = glm::mat4(1.0f); m_renderer->camera.view = glm::mat4(1.0f);
m_renderer->camera.view = glm::translate(m_renderer->camera.view, part->position); m_renderer->camera.view = glm::translate(m_renderer->camera.view, part->position);

View file

@ -3,6 +3,7 @@
#pragma once #pragma once
#include <QElapsedTimer>
#include <QWindow> #include <QWindow>
#include "imgui.h" #include "imgui.h"
@ -30,4 +31,5 @@ private:
QVulkanInstance *m_instance; QVulkanInstance *m_instance;
MDLPart *part; MDLPart *part;
bool pressed_keys[4] = {}; bool pressed_keys[4] = {};
QElapsedTimer timer;
}; };