diff --git a/include/openspace/interaction/interactionhandler.h b/include/openspace/interaction/interactionhandler.h index 8ba106785b..3efacae9fe 100644 --- a/include/openspace/interaction/interactionhandler.h +++ b/include/openspace/interaction/interactionhandler.h @@ -76,7 +76,7 @@ public: void unlockControls(); //void update(double deltaTime); - void updateCamera(); + void updateCamera(double deltaTime); void updateInputStates(double timeSinceLastUpdate); // Accessors diff --git a/include/openspace/interaction/interactionmode.h b/include/openspace/interaction/interactionmode.h index 1d169afc61..2c8f20e61c 100644 --- a/include/openspace/interaction/interactionmode.h +++ b/include/openspace/interaction/interactionmode.h @@ -120,7 +120,7 @@ public: Interpolator& rotateToFocusNodeInterpolator(); virtual void updateMouseStatesFromInput(const InputState& inputState, double deltaTime) = 0; - virtual void updateCameraStateFromMouseStates(Camera& camera) = 0; + virtual void updateCameraStateFromMouseStates(Camera& camera, double deltaTime) = 0; protected: /** @@ -193,7 +193,7 @@ public: ~KeyframeInteractionMode(); virtual void updateMouseStatesFromInput(const InputState& inputState, double deltaTime); - virtual void updateCameraStateFromMouseStates(Camera& camera); + virtual void updateCameraStateFromMouseStates(Camera& camera, double deltaTime); private: std::vector _keyframes; @@ -243,10 +243,10 @@ public: //virtual void update(Camera& camera, const InputState& inputState, double deltaTime); virtual void updateMouseStatesFromInput(const InputState& inputState, double deltaTime); - virtual void updateCameraStateFromMouseStates(Camera& camera); + virtual void updateCameraStateFromMouseStates(Camera& camera, double deltaTime); protected: - //void updateCameraStateFromMouseStates(Camera& camera); + //void updateCameraStateFromMouseStates(Camera& camera, double deltaTime); std::shared_ptr _mouseStates; }; @@ -258,10 +258,10 @@ public: virtual void setFocusNode(SceneGraphNode* focusNode); //virtual void update(Camera& camera, const InputState& inputState, double deltaTime); - virtual void updateCameraStateFromMouseStates(Camera& camera); + virtual void updateCameraStateFromMouseStates(Camera& camera, double deltaTime); private: - //void updateCameraStateFromMouseStates(Camera& camera); + //void updateCameraStateFromMouseStates(Camera& camera, double deltaTime); globebrowsing::RenderableGlobe* _globe; }; diff --git a/src/engine/openspaceengine.cpp b/src/engine/openspaceengine.cpp index 4883b1cd36..cea43cb8bc 100644 --- a/src/engine/openspaceengine.cpp +++ b/src/engine/openspaceengine.cpp @@ -857,7 +857,7 @@ void OpenSpaceEngine::preSynchronization() { _interactionHandler->updateInputStates(dt); _renderEngine->updateSceneGraph(); - _interactionHandler->updateCamera(); + _interactionHandler->updateCamera(dt); _renderEngine->camera()->invalidateCache(); _parallelConnection->preSynchronization(); diff --git a/src/interaction/interactionhandler.cpp b/src/interaction/interactionhandler.cpp index 067c097385..242f6cf4d0 100644 --- a/src/interaction/interactionhandler.cpp +++ b/src/interaction/interactionhandler.cpp @@ -72,7 +72,7 @@ InteractionHandler::InteractionHandler() , _rotationalFriction("rotationalFriction", "Rotational Friction", true) , _horizontalFriction("horizontalFriction", "Horizontal Friction", true) , _verticalFriction("verticalFriction", "Vertical Friction", true) - , _sensitivity("sensitivity", "Sensitivity", 0.002, 0.0001, 0.02) + , _sensitivity("sensitivity", "Sensitivity", 0.5, 0.001, 1) , _rapidness("rapidness", "Rapidness", 1, 0.1, 60) { setName("Interaction"); @@ -94,7 +94,7 @@ InteractionHandler::InteractionHandler() // Create the interactionModes _inputState = std::make_unique(); // Inject the same mouse states to both orbital and global interaction mode - _mouseStates = std::make_unique(0.002, 1); + _mouseStates = std::make_unique(_sensitivity * pow(10.0,-4), 1); _interactionModes.insert( std::pair>( "Orbital", @@ -125,7 +125,7 @@ InteractionHandler::InteractionHandler() _mouseStates->setVerticalFriction(_verticalFriction); }); _sensitivity.onChange([&]() { - _mouseStates->setSensitivity(_sensitivity); + _mouseStates->setSensitivity(_sensitivity * pow(10.0,-4)); }); _rapidness.onChange([&]() { _mouseStates->setVelocityScaleFactor(_rapidness); @@ -218,7 +218,7 @@ void InteractionHandler::updateInputStates(double timeSinceLastUpdate) { _currentInteractionMode->updateMouseStatesFromInput(*_inputState, timeSinceLastUpdate); } -void InteractionHandler::updateCamera() { +void InteractionHandler::updateCamera(double deltaTime) { ghoul_assert(_inputState != nullptr, "InputState cannot be null!"); ghoul_assert(_camera != nullptr, "Camera cannot be null!"); @@ -227,7 +227,7 @@ void InteractionHandler::updateCamera() { } else { if (_camera && focusNode()) { - _currentInteractionMode->updateCameraStateFromMouseStates(*_camera); + _currentInteractionMode->updateCameraStateFromMouseStates(*_camera, deltaTime); _camera->setFocusPositionVec3(focusNode()->worldPosition()); } } diff --git a/src/interaction/interactionmode.cpp b/src/interaction/interactionmode.cpp index 36e11ce0c2..466382579f 100644 --- a/src/interaction/interactionmode.cpp +++ b/src/interaction/interactionmode.cpp @@ -212,7 +212,7 @@ void KeyframeInteractionMode::updateMouseStatesFromInput(const InputState& input _keyframes = inputState.keyframes(); } -void KeyframeInteractionMode::updateCameraStateFromMouseStates(Camera& camera) { +void KeyframeInteractionMode::updateCameraStateFromMouseStates(Camera& camera, double deltaTime) { if (_keyframes.size() == 0) { return; } @@ -268,7 +268,7 @@ void OrbitalInteractionMode::MouseStates::updateMouseStatesFromInput(const Input if (keyCtrlPressed) { glm::dvec2 mousePositionDelta = _localRotationMouseState.previousPosition - mousePosition; - _localRotationMouseState.velocity.set(mousePositionDelta * deltaTime * _sensitivity, deltaTime); + _localRotationMouseState.velocity.set(mousePositionDelta * _sensitivity, deltaTime); _globalRotationMouseState.previousPosition = mousePosition; _globalRotationMouseState.velocity.decelerate(deltaTime); @@ -276,7 +276,7 @@ void OrbitalInteractionMode::MouseStates::updateMouseStatesFromInput(const Input else { glm::dvec2 mousePositionDelta = _globalRotationMouseState.previousPosition - mousePosition; - _globalRotationMouseState.velocity.set(mousePositionDelta * deltaTime * _sensitivity, deltaTime); + _globalRotationMouseState.velocity.set(mousePositionDelta * _sensitivity, deltaTime); _localRotationMouseState.previousPosition = mousePosition; _localRotationMouseState.velocity.decelerate(deltaTime); @@ -292,7 +292,7 @@ void OrbitalInteractionMode::MouseStates::updateMouseStatesFromInput(const Input if (button2Pressed) { glm::dvec2 mousePositionDelta = _truckMovementMouseState.previousPosition - mousePosition; - _truckMovementMouseState.velocity.set(mousePositionDelta * deltaTime * _sensitivity, deltaTime); + _truckMovementMouseState.velocity.set(mousePositionDelta * _sensitivity, deltaTime); } else { // !button2Pressed _truckMovementMouseState.previousPosition = mousePosition; @@ -302,7 +302,7 @@ void OrbitalInteractionMode::MouseStates::updateMouseStatesFromInput(const Input if (keyCtrlPressed) { glm::dvec2 mousePositionDelta = _localRollMouseState.previousPosition - mousePosition; - _localRollMouseState.velocity.set(mousePositionDelta * deltaTime * _sensitivity, deltaTime); + _localRollMouseState.velocity.set(mousePositionDelta * _sensitivity, deltaTime); _globalRollMouseState.previousPosition = mousePosition; _globalRollMouseState.velocity.decelerate(deltaTime); @@ -310,7 +310,7 @@ void OrbitalInteractionMode::MouseStates::updateMouseStatesFromInput(const Input else { glm::dvec2 mousePositionDelta = _globalRollMouseState.previousPosition - mousePosition; - _globalRollMouseState.velocity.set(mousePositionDelta * deltaTime * _sensitivity, deltaTime); + _globalRollMouseState.velocity.set(mousePositionDelta * _sensitivity, deltaTime); _localRollMouseState.previousPosition = mousePosition; _localRollMouseState.velocity.decelerate(deltaTime); @@ -382,7 +382,7 @@ OrbitalInteractionMode::~OrbitalInteractionMode() { } -void OrbitalInteractionMode::updateCameraStateFromMouseStates(Camera& camera) { +void OrbitalInteractionMode::updateCameraStateFromMouseStates(Camera& camera, double deltaTime) { // Update synched data using namespace glm; @@ -431,7 +431,7 @@ void OrbitalInteractionMode::updateCameraStateFromMouseStates(Camera& camera) { { // Interpolate local rotation to focus node double t = _rotateToFocusNodeInterpolator.value(); localCameraRotation = slerp(localCameraRotation, dquat(dvec3(0.0)), t); - _rotateToFocusNodeInterpolator.step(0.002); // Should probably depend on dt + _rotateToFocusNodeInterpolator.step(deltaTime * 0.1); // Should probably depend on dt // This is a fast but ugly solution to slow regaining of control... if (t > 0.18) { _rotateToFocusNodeInterpolator.end(); @@ -513,7 +513,7 @@ void GlobeBrowsingInteractionMode::setFocusNode(SceneGraphNode* focusNode) { #endif // OPENSPACE_MODULE_GLOBEBROWSING_ENABLED } -void GlobeBrowsingInteractionMode::updateCameraStateFromMouseStates(Camera& camera) { +void GlobeBrowsingInteractionMode::updateCameraStateFromMouseStates(Camera& camera, double deltaTime) { #ifdef OPENSPACE_MODULE_GLOBEBROWSING_ENABLED using namespace glm; @@ -555,7 +555,7 @@ void GlobeBrowsingInteractionMode::updateCameraStateFromMouseStates(Camera& came dvec3 ellipsoidSurfaceToCamera = camPos - (centerPos + centerToEllipsoidSurface); double heightToSurface = - _globe->getHeight(cameraPositionModelSpace) + ellipsoidShrinkTerm; + _globe->getHeight(cameraPositionModelSpace) + ellipsoidShrinkTerm; double distFromCenterToSurface = length(centerToEllipsoidSurface);