Fix rendering own look-at vectors in HMD mode

Vectors now originate at user's physical eyeballs rather than at user
avatar's eye separation.
This commit is contained in:
David Rowe 2015-08-07 16:13:25 -07:00
parent b70c1a4960
commit b54c2526c1
3 changed files with 11 additions and 6 deletions

View file

@ -310,9 +310,13 @@ void Head::relaxLean(float deltaTime) {
void Head::render(RenderArgs* renderArgs, float alpha, ViewFrustum* renderFrustum) {
}
void Head::renderLookAts(RenderArgs* renderArgs, glm::vec3 eyeOffset) {
void Head::renderLookAts(RenderArgs* renderArgs) {
renderLookAts(renderArgs, _leftEyePosition, _rightEyePosition);
}
void Head::renderLookAts(RenderArgs* renderArgs, glm::vec3 leftEyePosition, glm::vec3 rightEyePosition) {
if (_renderLookatVectors) {
renderLookatVectors(renderArgs, _leftEyePosition + eyeOffset, _rightEyePosition + eyeOffset, getCorrectedLookAtPosition());
renderLookatVectors(renderArgs, leftEyePosition, rightEyePosition, getCorrectedLookAtPosition());
}
if (_renderLookatTarget) {
renderLookatTarget(renderArgs, getCorrectedLookAtPosition());

View file

@ -40,7 +40,8 @@ public:
void setReturnToCenter (bool returnHeadToCenter) { _returnHeadToCenter = returnHeadToCenter; }
void setRenderLookatVectors(bool onOff) { _renderLookatVectors = onOff; }
void setRenderLookatTarget(bool onOff) { _renderLookatTarget = onOff; }
void renderLookAts(RenderArgs* renderArgs, glm::vec3 eyeOffset = glm::vec3());
void renderLookAts(RenderArgs* renderArgs);
void renderLookAts(RenderArgs* renderArgs, glm::vec3 leftEyePosition, glm::vec3 rightEyePosition);
/// \return orientationBase+Delta
glm::quat getFinalOrientationInLocalFrame() const;

View file

@ -1167,9 +1167,9 @@ void MyAvatar::renderBody(RenderArgs* renderArgs, ViewFrustum* renderFrustum, fl
}
if (qApp->isHMDMode()) {
glm::vec3 eyeOffset =
OculusManager::getMidEyePosition() + Application::getInstance()->getCamera()->getPosition() - getEyePosition();
getHead()->renderLookAts(renderArgs, eyeOffset);
glm::vec3 cameraPosition = Application::getInstance()->getCamera()->getPosition();
getHead()->renderLookAts(renderArgs, cameraPosition + OculusManager::getLeftEyePosition(),
cameraPosition + OculusManager::getRightEyePosition());
} else {
getHead()->renderLookAts(renderArgs);
}