From 71a919f22683b46288e0599d9e16ce20ea120d77 Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Fri, 2 Aug 2013 18:02:37 -0700 Subject: [PATCH] Switch back to avatar.getEyePosition() rather than avatar.getHead().getEyePosition() because of mysterious lag. --- interface/src/Application.cpp | 4 ++-- interface/src/avatar/Avatar.cpp | 13 +++++++++++++ interface/src/avatar/Avatar.h | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 3cfa46317c..f60fe9a5f8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -394,7 +394,7 @@ void Application::paintGL() { if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { _myCamera.setTightness (100.0f); - _myCamera.setTargetPosition(_myAvatar.getHead().getEyePosition()); + _myCamera.setTargetPosition(_myAvatar.getUprightHeadPosition()); _myCamera.setTargetRotation(_myAvatar.getWorldAlignedOrientation() * glm::quat(glm::vec3(0.0f, PIf, 0.0f))); } else if (OculusManager::isConnected()) { @@ -406,7 +406,7 @@ void Application::paintGL() { } else if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { _myCamera.setTightness(0.0f); // In first person, camera follows head exactly without delay - _myCamera.setTargetPosition(_myAvatar.getHead().getEyePosition()); + _myCamera.setTargetPosition(_myAvatar.getEyePosition()); _myCamera.setTargetRotation(_myAvatar.getHead().getCameraOrientation()); } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 315ad67433..6e245b21a3 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -368,6 +368,19 @@ glm::vec3 Avatar::getUprightHeadPosition() const { return _position + getWorldAlignedOrientation() * glm::vec3(0.0f, _pelvisToHeadLength, 0.0f); } +glm::vec3 Avatar::getEyePosition() { + const float EYE_UP_OFFSET = 0.36f; + const float EYE_FRONT_OFFSET = 0.8f; + + glm::quat orientation = getWorldAlignedOrientation(); + glm::vec3 up = orientation * IDENTITY_UP; + glm::vec3 front = orientation * IDENTITY_FRONT; + + float scale = _scale * BODY_BALL_RADIUS_HEAD_BASE; + + return getHead().getPosition() + up * scale * EYE_UP_OFFSET + front * scale * EYE_FRONT_OFFSET; +} + void Avatar::updateThrust(float deltaTime, Transmitter * transmitter) { // // Gather thrust information from keyboard and sensors to apply to avatar motion diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index c69cbbadbf..f8aa5f3179 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -170,6 +170,7 @@ public: glm::vec3 getGravity () const { return _gravity; } glm::vec3 getUprightHeadPosition() const; + glm::vec3 getEyePosition(); AvatarVoxelSystem* getVoxels() { return &_voxels; }