diff --git a/include/openspace/navigation/orbitalnavigator.h b/include/openspace/navigation/orbitalnavigator.h index 5093677481..7f53a1f4d7 100644 --- a/include/openspace/navigation/orbitalnavigator.h +++ b/include/openspace/navigation/orbitalnavigator.h @@ -61,6 +61,7 @@ public: void updateStatesFromInput(const InputState& inputState, double deltaTime); void updateCameraStateFromStates(double deltaTime); + void updateCameraScalingFromAnchor(double deltaTime); void resetVelocities(); Camera* camera() const; diff --git a/src/navigation/navigationhandler.cpp b/src/navigation/navigationhandler.cpp index ae582165b9..6dffe23b85 100644 --- a/src/navigation/navigationhandler.cpp +++ b/src/navigation/navigationhandler.cpp @@ -180,6 +180,8 @@ void NavigationHandler::updateCamera(double deltaTime) { _orbitalNavigator.updateStatesFromInput(_inputState, deltaTime); _orbitalNavigator.updateCameraStateFromStates(deltaTime); } + + _orbitalNavigator.updateCameraScalingFromAnchor(deltaTime); } // If session recording (playback mode) was started in the midst of a camera path, diff --git a/src/navigation/orbitalnavigator.cpp b/src/navigation/orbitalnavigator.cpp index 0021966261..57fb5d9cfd 100644 --- a/src/navigation/orbitalnavigator.cpp +++ b/src/navigation/orbitalnavigator.cpp @@ -686,16 +686,24 @@ void OrbitalNavigator::updateCameraStateFromStates(double deltaTime) { // Update the camera state _camera->setPositionVec3(pose.position); _camera->setRotation(composeCameraRotation(camRot)); +} +void OrbitalNavigator::updateCameraScalingFromAnchor(double deltaTime) { if (_useAdaptiveStereoscopicDepth) { + const glm::dvec3 anchorPos = _anchorNode->worldPosition(); + const glm::dvec3 cameraPos = _camera->positionVec3(); + + SurfacePositionHandle posHandle = + calculateSurfacePositionHandle(*_anchorNode, cameraPos); + double targetCameraToSurfaceDistance = glm::length( - cameraToSurfaceVector(pose.position, anchorPos, posHandle) + cameraToSurfaceVector(cameraPos, anchorPos, posHandle) ); if (_aimNode) { targetCameraToSurfaceDistance = std::min( targetCameraToSurfaceDistance, - glm::distance(pose.position, _aimNode->worldPosition()) + glm::distance(cameraPos, _aimNode->worldPosition()) ); }