From 21f03a4fb5d651e5b91d52da76b8f675d16e36f9 Mon Sep 17 00:00:00 2001 From: barnold1953 Date: Wed, 21 May 2014 12:43:44 -0700 Subject: [PATCH] Made oculus camera modes only active when AllowOculusCameraModeChange is checked. --- interface/src/Application.cpp | 22 ++++++++++++++-------- interface/src/Menu.cpp | 1 + interface/src/Menu.h | 1 + 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index ad0d63a8a0..fc0c810108 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -555,14 +555,7 @@ void Application::paintGL() { glEnable(GL_LINE_SMOOTH); float pushback = 0.0f; - float pushbackFocalLength = 0.0f; - if (OculusManager::isConnected()) { - if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { - _myCamera.setDistance(0.0f); - } - _myCamera.setUpShift(0.0f); - _myCamera.setTightness(0.0f); // Camera is directly connected to head without smoothing - } + 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 @@ -590,6 +583,19 @@ void Application::paintGL() { 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 + 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) { diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index bff08d5221..c8bf194b25 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -327,6 +327,7 @@ Menu::Menu() : QMenu* avatarOptionsMenu = developerMenu->addMenu("Avatar Options"); + addCheckableActionToQMenuAndActionHash(avatarOptionsMenu, MenuOption::AllowOculusCameraModeChange, 0, false); addCheckableActionToQMenuAndActionHash(avatarOptionsMenu, MenuOption::Avatars, 0, true); addCheckableActionToQMenuAndActionHash(avatarOptionsMenu, MenuOption::RenderSkeletonCollisionShapes); addCheckableActionToQMenuAndActionHash(avatarOptionsMenu, MenuOption::RenderHeadCollisionShapes); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 0a21a27960..9043825b72 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -267,6 +267,7 @@ private: namespace MenuOption { const QString AboutApp = "About Interface"; const QString AlignForearmsWithWrists = "Align Forearms with Wrists"; + const QString AllowOculusCameraModeChange = "Allow Oculus Camera Mode Change (Nausea)"; const QString AlternateIK = "Alternate IK"; const QString AmbientOcclusion = "Ambient Occlusion"; const QString Atmosphere = "Atmosphere";