diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c098492e1f..6b7f42fe0b 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -929,13 +929,18 @@ void Application::paintGL() { } } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { - _myCamera.setPosition(_myAvatar->getDefaultEyePosition() + - _myAvatar->getOrientation() * glm::vec3(0.0f, 0.0f, 1.0f) * _myAvatar->getBoomLength() * _myAvatar->getScale()); if (OculusManager::isConnected()) { _myCamera.setRotation(_myAvatar->getWorldAlignedOrientation()); } else { _myCamera.setRotation(_myAvatar->getHead()->getOrientation()); } + if (Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) { + _myCamera.setPosition(_myAvatar->getDefaultEyePosition() + + _myCamera.getRotation() * glm::vec3(0.0f, 0.0f, 1.0f) * _myAvatar->getBoomLength() * _myAvatar->getScale()); + } else { + _myCamera.setPosition(_myAvatar->getDefaultEyePosition() + + _myAvatar->getOrientation() * glm::vec3(0.0f, 0.0f, 1.0f) * _myAvatar->getBoomLength() * _myAvatar->getScale()); + } } else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { // TODO put the mirror modifiers somewhere both the app and the overlay can access it @@ -2425,6 +2430,12 @@ void Application::cameraMenuChanged() { } } +void Application::rotationModeChanged() { + if (!Menu::getInstance()->isOptionChecked(MenuOption::CenterPlayerInView)) { + _myAvatar->setHeadPitch(0); + } +} + void Application::updateCamera(float deltaTime) { PerformanceTimer perfTimer("updateCamera"); bool showWarnings = Menu::getInstance()->isOptionChecked(MenuOption::PipelineWarnings); diff --git a/interface/src/Application.h b/interface/src/Application.h index 1873ee4b80..605c85f7f7 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -453,6 +453,7 @@ private slots: void setEnable3DTVMode(bool enable3DTVMode); void setEnableVRMode(bool enableVRMode); void cameraMenuChanged(); + void rotationModeChanged(); glm::vec2 getScaledScreenPoint(glm::vec2 projectedPoint); diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 216f733709..6671320f0c 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -277,6 +277,9 @@ Menu::Menu() { addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::FullscreenMirror, 0, // QML Qt::Key_H, false, qApp, SLOT(cameraMenuChanged())); + + addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::CenterPlayerInView, + 0, false, qApp, SLOT(rotationModeChanged())); addCheckableActionToQMenuAndActionHash(viewMenu, MenuOption::HMDTools, #ifdef Q_OS_MAC diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 6b892ebc3c..be0ac12d0d 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -199,6 +199,7 @@ namespace MenuOption { const QString FrameTimer = "Show Timer"; const QString Fullscreen = "Fullscreen"; const QString FullscreenMirror = "Fullscreen Mirror"; + const QString CenterPlayerInView = "Center Player In View"; const QString GlowWhenSpeaking = "Glow When Speaking"; const QString NamesAboveHeads = "Names Above Heads"; const QString HMDTools = "HMD Tools";