From 4738fc888b338b6f4cb8efc32077be0492f3da2a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 May 2013 16:43:41 -0700 Subject: [PATCH 1/3] return Avatar Head by reference so setters actually do something --- interface/src/Application.cpp | 63 ++++++++++++++---------------- interface/src/Avatar.cpp | 2 +- interface/src/Avatar.h | 2 +- interface/src/Head.h | 5 ++- libraries/avatars/src/AvatarData.h | 8 ++-- libraries/avatars/src/HeadData.h | 4 ++ 6 files changed, 43 insertions(+), 41 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 577edc229d..74d95d4eb6 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -289,42 +289,38 @@ void Application::paintGL() { glPushMatrix(); { glLoadIdentity(); - // camera settings - if (OculusManager::isConnected()) { - _myAvatar.setDisplayingHead(false); - _myCamera.setUpShift (0.0f); - _myCamera.setDistance (0.0f); - _myCamera.setTightness (100.0f); - _myCamera.setTargetPosition(_myAvatar.getHeadPosition()); - _myCamera.setTargetRotation(_myAvatar.getBodyYaw() + _myAvatar.getHead().getYaw(), - -_myAvatar.getHead().getPitch(), - _myAvatar.getHead().getRoll()); - - } else if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { + if (_myCamera.getMode() == CAMERA_MODE_MIRROR) { _myCamera.setTightness (100.0f); _myCamera.setTargetPosition(_myAvatar.getSpringyHeadPosition()); _myCamera.setTargetRotation(_myAvatar.getBodyYaw() - 180.0f, 0.0f, 0.0f); - } else { - if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { - _myCamera.setTargetPosition(_myAvatar.getSpringyHeadPosition()); - _myCamera.setTargetRotation(_myAvatar.getAbsoluteHeadYaw(), - 0.0f, - //-_myAvatar.getAbsoluteHeadPitch(), - 0.0f); - // Take a look at whether we are inside head, don't render it if so. - const float HEAD_RENDER_DISTANCE = 0.5; - glm::vec3 distanceToHead(_myCamera.getPosition() - _myAvatar.getSpringyHeadPosition()); - if (glm::length(distanceToHead) < HEAD_RENDER_DISTANCE) { _myAvatar.setDisplayingHead(false); } - - } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { - _myCamera.setTargetPosition(_myAvatar.getHeadPosition()); - _myCamera.setTargetRotation(_myAvatar.getBodyYaw(), - 0.0f, - //-_myAvatar.getAbsoluteHeadPitch(), - 0.0f); - } + } else if (OculusManager::isConnected()) { + _myAvatar.setDisplayingHead(false); + _myCamera.setUpShift (0.0f); + _myCamera.setDistance (0.0f); + _myCamera.setTightness (100.0f); + _myCamera.setTargetPosition(_myAvatar.getHeadPosition()); + _myCamera.setTargetRotation(_myAvatar.getAbsoluteHeadYaw(), + -_myAvatar.getHead().getPitch(), + _myAvatar.getHead().getRoll()); + } else if (_myCamera.getMode() == CAMERA_MODE_FIRST_PERSON) { + _myCamera.setTargetPosition(_myAvatar.getSpringyHeadPosition()); + _myCamera.setTargetRotation(_myAvatar.getAbsoluteHeadYaw(), + 0.0f, + //-_myAvatar.getAbsoluteHeadPitch(), + 0.0f); + // Take a look at whether we are inside head, don't render it if so. + const float HEAD_RENDER_DISTANCE = 0.5; + glm::vec3 distanceToHead(_myCamera.getPosition() - _myAvatar.getSpringyHeadPosition()); + if (glm::length(distanceToHead) < HEAD_RENDER_DISTANCE) { _myAvatar.setDisplayingHead(false); } + + } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { + _myCamera.setTargetPosition(_myAvatar.getHeadPosition()); + _myCamera.setTargetRotation(_myAvatar.getBodyYaw(), + 0.0f, + //-_myAvatar.getAbsoluteHeadPitch(), + 0.0f); } // important... @@ -1345,8 +1341,7 @@ void Application::updateAvatar(float deltaTime) { const float HORIZONTAL_PIXELS_PER_DEGREE = 2880.f / 45.f; const float VERTICAL_PIXELS_PER_DEGREE = 1800.f / 30.f; if (powf(measuredYawRate * measuredYawRate + - measuredPitchRate * measuredPitchRate, 0.5) > MIN_MOUSE_RATE) - { + measuredPitchRate * measuredPitchRate, 0.5) > MIN_MOUSE_RATE) { _headMouseX += measuredYawRate * HORIZONTAL_PIXELS_PER_DEGREE * deltaTime; _headMouseY -= measuredPitchRate * VERTICAL_PIXELS_PER_DEGREE * deltaTime; } @@ -1358,7 +1353,7 @@ void Application::updateAvatar(float deltaTime) { if (OculusManager::isConnected()) { float yaw, pitch, roll; OculusManager::getEulerAngles(yaw, pitch, roll); - + _myAvatar.getHead().setYaw(-yaw); _myAvatar.getHead().setPitch(pitch); _myAvatar.getHead().setRoll(roll); diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index 50cff6049d..b8ec64ca80 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -99,7 +99,6 @@ Avatar::Avatar(bool isMine) : // give the pointer to our head to inherited _headData variable from AvatarData _headData = &_head; - for (int i = 0; i < MAX_DRIVE_KEYS; i++) { _driveKeys[i] = false; } @@ -1202,6 +1201,7 @@ void Avatar::setHeadFromGyros(glm::vec3* eulerAngles, glm::vec3* angularVelocity angles += (*angularVelocity) * deltaTime; // Smooth to slowly follow absolute values angles = ((1.f - deltaTime / smoothingTime) * angles) + (deltaTime / smoothingTime) * (*eulerAngles); + printf("Setting head from gyros!\n"); _head.setYaw (angles.x); _head.setPitch(angles.y); _head.setRoll (angles.z); diff --git a/interface/src/Avatar.h b/interface/src/Avatar.h index eb7198173a..446d6cfe2e 100644 --- a/interface/src/Avatar.h +++ b/interface/src/Avatar.h @@ -105,7 +105,7 @@ public: float getHeight() const { return _height; } AvatarMode getMode() const { return _mode; } - Head getHead() const { return _head; } + Head& getHead() { return _head; } void setMousePressed(bool pressed); void render(bool lookingInMirror, glm::vec3 cameraPosition); diff --git a/interface/src/Head.h b/interface/src/Head.h index 5b45c6421c..6ea9218bbf 100644 --- a/interface/src/Head.h +++ b/interface/src/Head.h @@ -51,7 +51,10 @@ public: float yawRate; float noise; -private: +private: + // disallow copies of the Head, copy of owning Avatar is disallowed too + Head(const Head&); + Head& operator= (const Head&); bool _returnHeadToCenter; float _audioLoudness; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 8924b5f937..3e3536c3a9 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -95,10 +95,6 @@ public: void setHeadData(HeadData* headData) { _headData = headData; } protected: - // privatize the copy constructor and assignment operator so they cannot be called - AvatarData(const AvatarData&); - AvatarData& operator= (const AvatarData&); - glm::vec3 _position; glm::vec3 _handPosition; @@ -137,6 +133,10 @@ protected: bool _wantDelta; HeadData* _headData; +private: + // privatize the copy constructor and assignment operator so they cannot be called + AvatarData(const AvatarData&); + AvatarData& operator= (const AvatarData&); }; #endif /* defined(__hifi__AvatarData__) */ diff --git a/libraries/avatars/src/HeadData.h b/libraries/avatars/src/HeadData.h index 8c9e99e6d9..fb16fea00e 100644 --- a/libraries/avatars/src/HeadData.h +++ b/libraries/avatars/src/HeadData.h @@ -55,6 +55,10 @@ protected: glm::vec3 _lookAtPosition; float _leanSideways; float _leanForward; +private: + // privatize copy ctor and assignment operator so copies of this object cannot be made + HeadData(const HeadData&); + HeadData& operator= (const HeadData&); }; #endif /* defined(__hifi__HeadData__) */ From a1b556d6a24573c8ccd2493d94dd70a398bca43a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 May 2013 16:49:26 -0700 Subject: [PATCH 2/3] space out if --- interface/src/Application.cpp | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 74d95d4eb6..c28ccfcd51 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -313,8 +313,10 @@ void Application::paintGL() { // Take a look at whether we are inside head, don't render it if so. const float HEAD_RENDER_DISTANCE = 0.5; glm::vec3 distanceToHead(_myCamera.getPosition() - _myAvatar.getSpringyHeadPosition()); - if (glm::length(distanceToHead) < HEAD_RENDER_DISTANCE) { _myAvatar.setDisplayingHead(false); } - + + if (glm::length(distanceToHead) < HEAD_RENDER_DISTANCE) { + _myAvatar.setDisplayingHead(false); + } } else if (_myCamera.getMode() == CAMERA_MODE_THIRD_PERSON) { _myCamera.setTargetPosition(_myAvatar.getHeadPosition()); _myCamera.setTargetRotation(_myAvatar.getBodyYaw(), From 9657265c2443b00691b4f02328243f77db950c88 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 22 May 2013 16:50:17 -0700 Subject: [PATCH 3/3] remove a debug line from setHeadFromGyros --- interface/src/Avatar.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index b8ec64ca80..5ae7a51714 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -1201,7 +1201,6 @@ void Avatar::setHeadFromGyros(glm::vec3* eulerAngles, glm::vec3* angularVelocity angles += (*angularVelocity) * deltaTime; // Smooth to slowly follow absolute values angles = ((1.f - deltaTime / smoothingTime) * angles) + (deltaTime / smoothingTime) * (*eulerAngles); - printf("Setting head from gyros!\n"); _head.setYaw (angles.x); _head.setPitch(angles.y); _head.setRoll (angles.z);