From 00342d2c76d7d37723a3a8d4424a8dc3688e7bfc Mon Sep 17 00:00:00 2001 From: Bradley Austin Davis Date: Thu, 23 Jul 2015 17:48:06 -0400 Subject: [PATCH] Fixing the avatar / HMD pose compisition for Oculus --- interface/src/Application.cpp | 8 ++++---- .../display-plugins/oculus/OculusBaseDisplayPlugin.cpp | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b36d5b6cde..b4a285a680 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -942,13 +942,13 @@ void Application::paintGL() { // Using the latter will cause the camera to wobble with idle animations, // or with changes from the face tracker + _myCamera.setPosition(_myAvatar->getDefaultEyePosition()); if (!getActiveDisplayPlugin()->isHmd()) { - _myCamera.setPosition(_myAvatar->getDefaultEyePosition()); _myCamera.setRotation(_myAvatar->getHead()->getCameraOrientation()); } else { - auto camMat = _myAvatar->getSensorToWorldMatrix() * getHMDSensorPose(); - _myCamera.setPosition(extractTranslation(camMat)); - _myCamera.setRotation(glm::quat_cast(camMat)); + // The plugin getModelview() call below will compose the base + // avatar transform with the HMD pose. + _myCamera.setRotation(_myAvatar->getOrientation()); } } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { if (isHMDMode()) { diff --git a/libraries/display-plugins/src/display-plugins/oculus/OculusBaseDisplayPlugin.cpp b/libraries/display-plugins/src/display-plugins/oculus/OculusBaseDisplayPlugin.cpp index 24697de89f..97d2226e2c 100644 --- a/libraries/display-plugins/src/display-plugins/oculus/OculusBaseDisplayPlugin.cpp +++ b/libraries/display-plugins/src/display-plugins/oculus/OculusBaseDisplayPlugin.cpp @@ -65,6 +65,8 @@ glm::mat4 OculusBaseDisplayPlugin::getEyePose(Eye eye) const { return toGlm(_eyePoses[eye]); } +// Should NOT be used for rendering as this will mess up timewarp. Use the getModelview() method above for +// any use of head poses for rendering, ensuring you use the correct eye glm::mat4 OculusBaseDisplayPlugin::getHeadPose() const { ovrTrackingState state = ovrHmd_GetTrackingState(_hmd, 0.0f); return toGlm(state.HeadPose.ThePose);