diff --git a/modules/camera/include/vkcv/camera/CameraController.hpp b/modules/camera/include/vkcv/camera/CameraController.hpp index 28dd8436bab07da759cd1a6bf4dba5d7cbd2b46f..620aae69cc70fa969c2325878165245ff4596aab 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 b0597da4cab1f553a7bd22da388a66e7fc19de19..409f9196599be02e4215f3924c1102f0b8c72899 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 2ba358546e9c0ef7927dd9445901d4eaab1b2f36..ab1470c6f816fec97acf54de05224201d4d4c64b 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 1fbf59e56b3edbc4b7719402fd55a9eaebdf7c94..97839bf1809197588523534fcdc84cac0b56d442 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 40b88528554d52363cf2c6a3d0ebdabb19365b4b..44db9d0ebbfbc8c8c620ba830288276eaad1a878 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 39796f028e7bafb8e0ed0908226c0ed824f237a4..c2086cf02f979c76c6993baefc11fc3fd10f705a 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 278feb761fbd674571dcf7dc438f11c1a6958257..a1500d93ccb992e78c9e2dbca583c92b0e9c75be 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]);