diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 160d6b7c2c..c922120e48 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1799,7 +1799,7 @@ void Application::init() { // TODO: move _myAvatar out of Application. Move relevant code to MyAvataar or AvatarManager _avatarManager.init(); _myCamera.setMode(CAMERA_MODE_FIRST_PERSON); - _myCamera.setModeShiftRate(1.0f); + _myCamera.setModeShiftPeriod(1.0f); _mirrorCamera.setMode(CAMERA_MODE_MIRROR); _mirrorCamera.setAspectRatio((float)MIRROR_VIEW_WIDTH / (float)MIRROR_VIEW_HEIGHT); @@ -2168,17 +2168,17 @@ void Application::cameraMenuChanged() { if (Menu::getInstance()->isOptionChecked(MenuOption::FullscreenMirror)) { if (_myCamera.getMode() != CAMERA_MODE_MIRROR) { _myCamera.setMode(CAMERA_MODE_MIRROR); - _myCamera.setModeShiftRate(100.0f); + _myCamera.setModeShiftPeriod(0.00f); } } else if (Menu::getInstance()->isOptionChecked(MenuOption::FirstPerson)) { if (_myCamera.getMode() != CAMERA_MODE_FIRST_PERSON) { _myCamera.setMode(CAMERA_MODE_FIRST_PERSON); - _myCamera.setModeShiftRate(1.0f); + _myCamera.setModeShiftPeriod(1.0f); } } else { if (_myCamera.getMode() != CAMERA_MODE_THIRD_PERSON) { _myCamera.setMode(CAMERA_MODE_THIRD_PERSON); - _myCamera.setModeShiftRate(1.0f); + _myCamera.setModeShiftPeriod(1.0f); } } } diff --git a/interface/src/Camera.cpp b/interface/src/Camera.cpp index 694fd30f50..8729ef58b6 100644 --- a/interface/src/Camera.cpp +++ b/interface/src/Camera.cpp @@ -15,8 +15,6 @@ #include "Menu.h" #include "Util.h" -const float CAMERA_MINIMUM_MODE_SHIFT_RATE = 0.5f; - const float CAMERA_FIRST_PERSON_MODE_UP_SHIFT = 0.0f; const float CAMERA_FIRST_PERSON_MODE_DISTANCE = 0.0f; const float CAMERA_FIRST_PERSON_MODE_TIGHTNESS = 100.0f; @@ -57,7 +55,7 @@ Camera::Camera() : _newTightness(0.0f), _modeShift(1.0f), _linearModeShift(0.0f), - _modeShiftRate(1.0f), + _modeShiftPeriod(1.0f), _scale(1.0f), _lookingAt(0.0f, 0.0f, 0.0f), _isKeepLookingAt(false) @@ -75,18 +73,18 @@ void Camera::update(float deltaTime) { // use iterative forces to keep the camera at the desired position and angle void Camera::updateFollowMode(float deltaTime) { if (_linearModeShift < 1.0f) { - _linearModeShift += _modeShiftRate * deltaTime; - _modeShift = ONE_HALF - ONE_HALF * cosf(_linearModeShift * PIE ); - _upShift = _previousUpShift * (1.0f - _modeShift) + _newUpShift * _modeShift; - _distance = _previousDistance * (1.0f - _modeShift) + _newDistance * _modeShift; - _tightness = _previousTightness * (1.0f - _modeShift) + _newTightness * _modeShift; - + _linearModeShift += deltaTime / _modeShiftPeriod; if (_needsToInitialize || _linearModeShift > 1.0f) { _linearModeShift = 1.0f; _modeShift = 1.0f; _upShift = _newUpShift; _distance = _newDistance; _tightness = _newTightness; + } else { + _modeShift = ONE_HALF - ONE_HALF * cosf(_linearModeShift * PIE ); + _upShift = _previousUpShift * (1.0f - _modeShift) + _newUpShift * _modeShift; + _distance = _previousDistance * (1.0f - _modeShift) + _newDistance * _modeShift; + _tightness = _previousTightness * (1.0f - _modeShift) + _newTightness * _modeShift; } } @@ -121,13 +119,10 @@ float Camera::getFarClip() const { : std::numeric_limits::max() - 1; } -void Camera::setModeShiftRate ( float rate ) { - - _modeShiftRate = rate; - - if (_modeShiftRate < CAMERA_MINIMUM_MODE_SHIFT_RATE ) { - _modeShiftRate = CAMERA_MINIMUM_MODE_SHIFT_RATE; - } +void Camera::setModeShiftPeriod (float period) { + const float MIN_PERIOD = 0.001f; + const float MAX_PERIOD = 3.0f; + _modeShiftPeriod = glm::clamp(period, MIN_PERIOD, MAX_PERIOD); } void Camera::setMode(CameraMode m) { @@ -307,7 +302,8 @@ void CameraScriptableObject::setMode(const QString& mode) { } if (currentMode != targetMode) { _camera->setMode(targetMode); - _camera->setModeShiftRate(10.0f); + const float DEFAULT_MODE_SHIFT_PERIOD = 0.5f; // half second + _camera->setModeShiftPeriod(DEFAULT_MODE_SHIFT_PERIOD); } } diff --git a/interface/src/Camera.h b/interface/src/Camera.h index b4ba3dbe05..7b95ce97f1 100644 --- a/interface/src/Camera.h +++ b/interface/src/Camera.h @@ -43,7 +43,7 @@ public: void setTargetRotation(const glm::quat& rotation); void setMode(CameraMode m); - void setModeShiftRate(float r); + void setModeShiftPeriod(float r); void setFieldOfView(float f); void setAspectRatio(float a); void setNearClip(float n); @@ -109,7 +109,7 @@ private: float _newTightness; float _modeShift; float _linearModeShift; - float _modeShiftRate; + float _modeShiftPeriod; float _scale; glm::vec3 _lookingAt;