From 97c0a2fc98912c8fd99b080f605d853ea8fd9f9c Mon Sep 17 00:00:00 2001 From: barnold1953 Date: Wed, 21 May 2014 15:32:23 -0700 Subject: [PATCH] Made mirror view remain constant no matter what the avatar scale is set to. --- interface/src/Application.cpp | 34 ++-------------------------------- 1 file changed, 2 insertions(+), 32 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index fc0c810108..53be1c0faf 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -553,9 +553,6 @@ void Application::paintGL() { PerformanceWarning warn(showWarnings, "Application::paintGL()"); glEnable(GL_LINE_SMOOTH); - - float pushback = 0.0f; - float pushbackFocalLength = 0.0f; if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { _myCamera.setTightness(0.0f); // In first person, camera follows (untweaked) head exactly without delay @@ -571,52 +568,25 @@ void Application::paintGL() { _myCamera.setTightness(0.0f); glm::vec3 eyePosition = _myAvatar->getHead()->calculateAverageEyePosition(); float headHeight = eyePosition.y - _myAvatar->getPosition().y; - _myCamera.setDistance(MIRROR_FULLSCREEN_DISTANCE * _myAvatar->getScale() * _scaleMirror); + _myCamera.setDistance(MIRROR_FULLSCREEN_DISTANCE * _scaleMirror); _myCamera.setTargetPosition(_myAvatar->getPosition() + glm::vec3(0, headHeight + (_raiseMirror * _myAvatar->getScale()), 0)); _myCamera.setTargetRotation(_myAvatar->getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PI + _rotateMirror, 0.0f))); - - // if the head would intersect the near clip plane, we must push the camera out - glm::vec3 relativePosition = glm::inverse(_myCamera.getTargetRotation()) * - (eyePosition - _myCamera.getTargetPosition()); - const float BASE_PUSHBACK_RADIUS = 0.2f; - float pushbackRadius = _myCamera.getNearClip() + _myAvatar->getScale() * BASE_PUSHBACK_RADIUS; - pushback = relativePosition.z + pushbackRadius - _myCamera.getDistance(); - pushbackFocalLength = _myCamera.getDistance(); } if (OculusManager::isConnected()) { - // OR in third person causes nausea, so only allow it if option is checked in dev menu + // Oculus in third person causes nausea, so only allow it if option is checked in dev menu if (!Menu::getInstance()->isOptionChecked(MenuOption::AllowOculusCameraModeChange) || _myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { _myCamera.setDistance(0.0f); _myCamera.setTargetPosition(_myAvatar->getHead()->calculateAverageEyePosition()); _myCamera.setTargetRotation(_myAvatar->getHead()->getCameraOrientation()); - pushback = 0.0f; - pushbackFocalLength = 0.0f; } _myCamera.setUpShift(0.0f); _myCamera.setTightness(0.0f); // Camera is directly connected to head without smoothing } - - // handle pushback, if any - if (pushbackFocalLength > 0.0f) { - const float PUSHBACK_DECAY = 0.5f; - _cameraPushback = qMax(pushback, _cameraPushback * PUSHBACK_DECAY); - if (_cameraPushback > EPSILON) { - _myCamera.setTargetPosition(_myCamera.getTargetPosition() + - _myCamera.getTargetRotation() * glm::vec3(0.0f, 0.0f, _cameraPushback)); - float enlargement = pushbackFocalLength / (pushbackFocalLength + _cameraPushback); - _myCamera.setFieldOfView(glm::degrees(2.0f * atanf(enlargement * tanf( - glm::radians(Menu::getInstance()->getFieldOfView() * 0.5f))))); - } else { - _myCamera.setFieldOfView(Menu::getInstance()->getFieldOfView()); - } - updateProjectionMatrix(_myCamera, true); - } // Update camera position _myCamera.update( 1.f/_fps ); - // Note: whichCamera is used to pick between the normal camera myCamera for our // main camera, vs, an alternate camera. The alternate camera we support right now // is the viewFrustumOffsetCamera. But theoretically, we could use this same mechanism