From 51df6be94ad47b35ff600b3268d771c37cff4770 Mon Sep 17 00:00:00 2001 From: Josh Morgenstern <josh@morgenstern.dev> Date: Wed, 23 Jun 2021 10:40:08 +0200 Subject: [PATCH] [#60] add normalized panView when using controller --- modules/camera/include/vkcv/camera/CameraController.hpp | 2 +- modules/camera/include/vkcv/camera/CameraManager.hpp | 1 + .../camera/include/vkcv/camera/PilotCameraController.hpp | 2 +- .../include/vkcv/camera/TrackballCameraController.hpp | 2 +- modules/camera/src/vkcv/camera/CameraManager.cpp | 3 ++- modules/camera/src/vkcv/camera/PilotCameraController.cpp | 8 ++++---- .../camera/src/vkcv/camera/TrackballCameraController.cpp | 6 +++--- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/modules/camera/include/vkcv/camera/CameraController.hpp b/modules/camera/include/vkcv/camera/CameraController.hpp index 28dd8436..620aae69 100644 --- a/modules/camera/include/vkcv/camera/CameraController.hpp +++ b/modules/camera/include/vkcv/camera/CameraController.hpp @@ -65,7 +65,7 @@ namespace vkcv::camera { * @param gamepadIndex The gamepad index. * @param camera The camera object. */ - virtual void gamepadCallback(int gamepadIndex, Camera &camera) = 0; + virtual void gamepadCallback(int gamepadIndex, Camera &camera, double frametime) = 0; }; } \ No newline at end of file diff --git a/modules/camera/include/vkcv/camera/CameraManager.hpp b/modules/camera/include/vkcv/camera/CameraManager.hpp index b0597da4..409f9196 100644 --- a/modules/camera/include/vkcv/camera/CameraManager.hpp +++ b/modules/camera/include/vkcv/camera/CameraManager.hpp @@ -44,6 +44,7 @@ namespace vkcv::camera { double m_lastY; double m_inputDelayTimer; + double m_frameTime; /** * @brief Binds the camera object to the window event handles. diff --git a/modules/camera/include/vkcv/camera/PilotCameraController.hpp b/modules/camera/include/vkcv/camera/PilotCameraController.hpp index 2ba35854..ab1470c6 100644 --- a/modules/camera/include/vkcv/camera/PilotCameraController.hpp +++ b/modules/camera/include/vkcv/camera/PilotCameraController.hpp @@ -143,7 +143,7 @@ namespace vkcv::camera { * @param gamepadIndex The gamepad index. * @param camera The camera object. */ - void gamepadCallback(int gamepadIndex, Camera &camera); + void gamepadCallback(int gamepadIndex, Camera &camera, double frametime); }; } \ No newline at end of file diff --git a/modules/camera/include/vkcv/camera/TrackballCameraController.hpp b/modules/camera/include/vkcv/camera/TrackballCameraController.hpp index 1fbf59e5..97839bf1 100644 --- a/modules/camera/include/vkcv/camera/TrackballCameraController.hpp +++ b/modules/camera/include/vkcv/camera/TrackballCameraController.hpp @@ -100,7 +100,7 @@ namespace vkcv::camera { * @param gamepadIndex The gamepad index. * @param camera The camera object. */ - void gamepadCallback(int gamepadIndex, Camera &camera); + void gamepadCallback(int gamepadIndex, Camera &camera, double frametime); }; } \ No newline at end of file diff --git a/modules/camera/src/vkcv/camera/CameraManager.cpp b/modules/camera/src/vkcv/camera/CameraManager.cpp index 40b88528..44db9d0e 100644 --- a/modules/camera/src/vkcv/camera/CameraManager.cpp +++ b/modules/camera/src/vkcv/camera/CameraManager.cpp @@ -105,7 +105,7 @@ namespace vkcv::camera { m_inputDelayTimer = (1-triggered)*m_inputDelayTimer + triggered * time; // Only reset timer, if dpad was pressed - is this cheaper than if-clause? } - getActiveController().gamepadCallback(gamepadIndex, getActiveCamera()); // handle camera rotation, translation + getActiveController().gamepadCallback(gamepadIndex, getActiveCamera(), m_frameTime); // handle camera rotation, translation } CameraController& CameraManager::getActiveController() { @@ -184,6 +184,7 @@ namespace vkcv::camera { } void CameraManager::update(double deltaTime) { + m_frameTime = deltaTime; if (glfwGetWindowAttrib(m_window.getWindow(), GLFW_FOCUSED) == GLFW_TRUE) { getActiveController().updateCamera(deltaTime, getActiveCamera()); } diff --git a/modules/camera/src/vkcv/camera/PilotCameraController.cpp b/modules/camera/src/vkcv/camera/PilotCameraController.cpp index 39796f02..c2086cf0 100644 --- a/modules/camera/src/vkcv/camera/PilotCameraController.cpp +++ b/modules/camera/src/vkcv/camera/PilotCameraController.cpp @@ -130,11 +130,11 @@ namespace vkcv::camera { } } - void PilotCameraController::gamepadCallback(int gamepadIndex, Camera &camera) { + void PilotCameraController::gamepadCallback(int gamepadIndex, Camera &camera, double frametime) { GLFWgamepadstate gamepadState; glfwGetGamepadState(gamepadIndex, &gamepadState); - float sensitivity = 0.05f; + float sensitivity = 100.0f; double threshold = 0.1; // todo: needs further investigation! // handle rotations @@ -142,9 +142,9 @@ namespace vkcv::camera { double stickRightY = static_cast<double>(gamepadState.axes[GLFW_GAMEPAD_AXIS_RIGHT_Y]); double rightXVal = glm::clamp(std::abs(stickRightX) - threshold, 0.0, 1.0) - * copysign(1.0, stickRightX) * sensitivity; + * copysign(1.0, stickRightX) * sensitivity * frametime; double rightYVal = glm::clamp(std::abs(stickRightY) - threshold, 0.0, 1.0) - * copysign(1.0, stickRightY) * sensitivity; + * copysign(1.0, stickRightY) * sensitivity * frametime; panView(rightXVal, rightYVal, camera); // handle zooming diff --git a/modules/camera/src/vkcv/camera/TrackballCameraController.cpp b/modules/camera/src/vkcv/camera/TrackballCameraController.cpp index 278feb76..a1500d93 100644 --- a/modules/camera/src/vkcv/camera/TrackballCameraController.cpp +++ b/modules/camera/src/vkcv/camera/TrackballCameraController.cpp @@ -98,11 +98,11 @@ namespace vkcv::camera { } } - void TrackballCameraController::gamepadCallback(int gamepadIndex, Camera &camera) { + void TrackballCameraController::gamepadCallback(int gamepadIndex, Camera &camera, double frametime) { GLFWgamepadstate gamepadState; glfwGetGamepadState(gamepadIndex, &gamepadState); - float sensitivity = 0.025f; + float sensitivity = 100.0f; double threshold = 0.1; // todo: needs further investigation! // handle rotations @@ -111,7 +111,7 @@ namespace vkcv::camera { double rightXVal = glm::clamp((abs(stickRightX)-threshold), 0.0, 1.0) * std::copysign(1.0, stickRightX); double rightYVal = glm::clamp((abs(stickRightY)-threshold), 0.0, 1.0) * std::copysign(1.0, stickRightY); - panView(rightXVal * sensitivity, rightYVal * sensitivity, camera); + panView(rightXVal * sensitivity, rightYVal * sensitivity * frametime, camera); // handle translation double stickLeftY = static_cast<double>(gamepadState.axes[GLFW_GAMEPAD_AXIS_LEFT_Y]); -- GitLab