From dd2655825a88aaa122c75ff696c1ffdca83aefc6 Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Fri, 26 Jul 2013 16:08:17 -0700 Subject: [PATCH] Fix first person camera positioning to correspond to eyelevel. This makes sure the lookatVectors don't seem to point upwards when looking at you. --- interface/src/Application.cpp | 2 +- interface/src/avatar/Avatar.cpp | 6 +++++- interface/src/avatar/Avatar.h | 1 + 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c56a58ce90..8135e656ed 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -407,7 +407,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.getUprightHeadPosition()); + _myCamera.setTargetPosition(_myAvatar.getUprightEyeLevelPosition()); _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 c2a2d5aadd..1d6d0ff57c 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -370,7 +370,11 @@ glm::vec3 Avatar::getUprightHeadPosition() const { return _position + getWorldAlignedOrientation() * glm::vec3(0.0f, _pelvisToHeadLength, 0.0f); } - +glm::vec3 Avatar::getUprightEyeLevelPosition() const { + const float EYE_UP_OFFSET = 0.36f; + glm::vec3 up = getWorldAlignedOrientation() * IDENTITY_UP; + return _position + up * _scale * BODY_BALL_RADIUS_HEAD_BASE * EYE_UP_OFFSET + glm::vec3(0.0f, _pelvisToHeadLength, 0.0f);; +} void Avatar::updateThrust(float deltaTime, Transmitter * transmitter) { // diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index ec0d5a2ce5..fc1d7e204d 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -171,6 +171,7 @@ public: glm::vec3 getGravity () const { return _gravity; } glm::vec3 getUprightHeadPosition() const; + glm::vec3 getUprightEyeLevelPosition() const; AvatarVoxelSystem* getVoxels() { return &_voxels; }