diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c3d810fb0b..992687d114 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2347,10 +2347,15 @@ void Application::updateMyAvatarLookAtPosition() { } else { lookAtSpot = _myCamera.getPosition() + OculusManager::getMidEyePosition(); } - } else if (eyeTracker->isTracking() && (isHMDMode() || eyeTracker->isSimulating())) { + } else if (eyeTracker->isTracking() && (OculusManager::isConnected() || eyeTracker->isSimulating())) { // Look at the point that the user is looking at. - lookAtSpot = _myAvatar->getHead()->getEyePosition() + - (_myAvatar->getHead()->getFinalOrientationInWorldFrame() * eyeTracker->getLookAtPosition()); + if (OculusManager::isConnected()) { + lookAtSpot = _myCamera.getPosition() + OculusManager::getMidEyePosition() + + _myAvatar->getOrientation() * (OculusManager::getOrientation() * eyeTracker->getLookAtPosition()); + } else { + lookAtSpot = _myAvatar->getHead()->getEyePosition() + + (_myAvatar->getHead()->getFinalOrientationInWorldFrame() * eyeTracker->getLookAtPosition()); + } } else { AvatarSharedPointer lookingAt = _myAvatar->getLookAtTargetAvatar().lock(); if (lookingAt && _myAvatar != lookingAt.get()) { @@ -2383,8 +2388,13 @@ void Application::updateMyAvatarLookAtPosition() { } } else { // I am not looking at anyone else, so just look forward - lookAtSpot = _myAvatar->getHead()->getEyePosition() + - (_myAvatar->getHead()->getFinalOrientationInWorldFrame() * glm::vec3(0.0f, 0.0f, -TREE_SCALE)); + if (OculusManager::isConnected()) { + lookAtSpot = _myCamera.getPosition() + OculusManager::getMidEyePosition() + + _myAvatar->getOrientation() * (OculusManager::getOrientation() * glm::vec3(0.0f, 0.0f, -TREE_SCALE)); + } else { + lookAtSpot = _myAvatar->getHead()->getEyePosition() + + (_myAvatar->getHead()->getFinalOrientationInWorldFrame() * glm::vec3(0.0f, 0.0f, -TREE_SCALE)); + } } // Deflect the eyes a bit to match the detected gaze from the face tracker if active. diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index a993fddf1c..b9cdb174d3 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -305,9 +305,9 @@ void Head::relaxLean(float deltaTime) { void Head::render(RenderArgs* renderArgs, float alpha, ViewFrustum* renderFrustum) { } -void Head::renderLookAts(RenderArgs* renderArgs) { +void Head::renderLookAts(RenderArgs* renderArgs, glm::vec3 eyeOffset) { if (_renderLookatVectors) { - renderLookatVectors(renderArgs, _leftEyePosition, _rightEyePosition, getCorrectedLookAtPosition()); + renderLookatVectors(renderArgs, _leftEyePosition + eyeOffset, _rightEyePosition + eyeOffset, getCorrectedLookAtPosition()); } if (_renderLookatTarget) { renderLookatTarget(renderArgs, getCorrectedLookAtPosition()); diff --git a/interface/src/avatar/Head.h b/interface/src/avatar/Head.h index 43042422d5..8beaf26f36 100644 --- a/interface/src/avatar/Head.h +++ b/interface/src/avatar/Head.h @@ -40,7 +40,7 @@ public: void setReturnToCenter (bool returnHeadToCenter) { _returnHeadToCenter = returnHeadToCenter; } void setRenderLookatVectors(bool onOff) { _renderLookatVectors = onOff; } void setRenderLookatTarget(bool onOff) { _renderLookatTarget = onOff; } - void renderLookAts(RenderArgs* renderArgs); + void renderLookAts(RenderArgs* renderArgs, glm::vec3 eyeOffset = glm::vec3()); /// \return orientationBase+Delta glm::quat getFinalOrientationInLocalFrame() const; diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 629c873323..7c8fd0dfce 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -1166,7 +1166,15 @@ void MyAvatar::renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, fl if (shouldRenderHead(renderArgs)) { getHead()->render(renderArgs, 1.0f, renderFrustum); } - getHead()->renderLookAts(renderArgs); + + if (qApp->isHMDMode()) { + glm::vec3 eyeOffset = + OculusManager::getMidEyePosition() + Application::getInstance()->getCamera()->getPosition() - getEyePosition(); + getHead()->renderLookAts(renderArgs, eyeOffset); + } else { + getHead()->renderLookAts(renderArgs); + } + getHand()->render(renderArgs, true); }