From 2a25c97446033d54ca91e05f0360b5bcba96de9c Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Tue, 9 Jul 2013 16:22:41 -0700 Subject: [PATCH 1/9] Change LookAtPosition of Head to the eye level of another avatar, if looking at another avatar in Application.cpp. Add eyePosition to Head class and bool isLookingAtOther.. in Application.cpp. --- interface/src/Application.cpp | 28 ++++++++++++++++++++++++++-- interface/src/Application.h | 1 + interface/src/Head.cpp | 3 +++ interface/src/Head.h | 4 +++- 4 files changed, 33 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index d9973bee02..edcbaa3b7b 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -54,6 +54,7 @@ #include #include #include +#include #include "Application.h" #include "InterfaceConfig.h" @@ -1689,6 +1690,22 @@ void Application::init() { const float MAX_AVATAR_EDIT_VELOCITY = 1.0f; const float MAX_VOXEL_EDIT_DISTANCE = 20.0f; +bool Application::isLookingAtOtherAvatar(glm::vec3 mouseRayOrigin, glm::vec3 mouseRayDirection, glm::vec3 &eyePosition) { + NodeList* nodeList = NodeList::getInstance(); + for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { + if (node->getLinkedData() != NULL && node->getType() == NODE_TYPE_AGENT) { + Avatar *avatar = (Avatar *)node->getLinkedData(); + glm::vec3 headPosition = avatar->getHead().getPosition(); + glm::vec3 intersectionPosition, intersectionNormal; + if (glm::intersectRaySphere(mouseRayOrigin, mouseRayDirection, headPosition, 1, intersectionPosition, intersectionNormal)) { + eyePosition = avatar->getHead().getEyeLevelPosition(); + return true; + } + } + } + return false; +} + void Application::update(float deltaTime) { // Use Transmitter Hand to move hand if connected, else use mouse if (_myTransmitter.isConnected()) { @@ -1715,8 +1732,15 @@ void Application::update(float deltaTime) { _myAvatar.setMouseRay(mouseRayOrigin, mouseRayDirection); // Set where I am looking based on my mouse ray (so that other people can see) - glm::vec3 myLookAtFromMouse(mouseRayOrigin + mouseRayDirection); - _myAvatar.getHead().setLookAtPosition(myLookAtFromMouse); + glm::vec3 eyePosition; + if (isLookingAtOtherAvatar(mouseRayOrigin, mouseRayDirection, eyePosition)) { + // If the mouse is over another avatar's head... + glm::vec3 myLookAtFromMouse(eyePosition); + _myAvatar.getHead().setLookAtPosition(myLookAtFromMouse); + } else { + glm::vec3 myLookAtFromMouse(mouseRayOrigin + mouseRayDirection); + _myAvatar.getHead().setLookAtPosition(myLookAtFromMouse); + } // If we are dragging on a voxel, add thrust according to the amount the mouse is dragging const float VOXEL_GRAB_THRUST = 0.0f; diff --git a/interface/src/Application.h b/interface/src/Application.h index 2b4bd27a3d..7649cfab6a 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -168,6 +168,7 @@ private: void init(); void update(float deltaTime); + bool isLookingAtOtherAvatar(glm::vec3 mouseRayOrigin, glm::vec3 mouseRayDirection, glm::vec3 &eyePosition); void updateAvatar(float deltaTime); void loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum); diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index 6ad44e1078..35b9dabba5 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -54,6 +54,7 @@ Head::Head(Avatar* owningAvatar) : _rotation(0.0f, 0.0f, 0.0f), _leftEyePosition(0.0f, 0.0f, 0.0f), _rightEyePosition(0.0f, 0.0f, 0.0f), + _eyeLevelPosition(0.0f, 0.0f, 0.0f), _leftEyeBrowPosition(0.0f, 0.0f, 0.0f), _rightEyeBrowPosition(0.0f, 0.0f, 0.0f), _leftEarPosition(0.0f, 0.0f, 0.0f), @@ -269,6 +270,8 @@ void Head::calculateGeometry() { + up * _scale * EYE_UP_OFFSET + front * _scale * EYE_FRONT_OFFSET; + _eyeLevelPosition = _position + up * _scale * EYE_UP_OFFSET; + //calculate the eyebrow positions _leftEyeBrowPosition = _leftEyePosition; _rightEyeBrowPosition = _rightEyePosition; diff --git a/interface/src/Head.h b/interface/src/Head.h index e8bcfb5277..f6c872cb99 100644 --- a/interface/src/Head.h +++ b/interface/src/Head.h @@ -54,6 +54,7 @@ public: glm::quat getCameraOrientation () const; glm::vec3 getPosition() const { return _position; } + glm::vec3 getEyeLevelPosition() const { return _eyeLevelPosition; } glm::vec3 getRightDirection() const { return getOrientation() * IDENTITY_RIGHT; } glm::vec3 getUpDirection () const { return getOrientation() * IDENTITY_UP; } glm::vec3 getFrontDirection() const { return getOrientation() * IDENTITY_FRONT; } @@ -88,7 +89,8 @@ private: glm::vec3 _position; glm::vec3 _rotation; glm::vec3 _leftEyePosition; - glm::vec3 _rightEyePosition; + glm::vec3 _rightEyePosition; + glm::vec3 _eyeLevelPosition; glm::vec3 _leftEyeBrowPosition; glm::vec3 _rightEyeBrowPosition; glm::vec3 _leftEarPosition; From e4e7966075c55ad88aa268bb2b85b6e8444af31a Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Wed, 10 Jul 2013 11:56:16 -0700 Subject: [PATCH 2/9] Add print statements to debug eyecontact code in Application.cpp. --- interface/src/Application.cpp | 8 ++++++-- interface/src/Application.h | 2 +- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 7e01387519..28828f8531 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1721,14 +1721,16 @@ void Application::init() { const float MAX_AVATAR_EDIT_VELOCITY = 1.0f; const float MAX_VOXEL_EDIT_DISTANCE = 20.0f; -bool Application::isLookingAtOtherAvatar(glm::vec3 mouseRayOrigin, glm::vec3 mouseRayDirection, glm::vec3 &eyePosition) { +bool Application::isLookingAtOtherAvatar(glm::vec3 &mouseRayOrigin, glm::vec3 &mouseRayDirection, glm::vec3 &eyePosition) { NodeList* nodeList = NodeList::getInstance(); for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { if (node->getLinkedData() != NULL && node->getType() == NODE_TYPE_AGENT) { Avatar *avatar = (Avatar *)node->getLinkedData(); glm::vec3 headPosition = avatar->getHead().getPosition(); glm::vec3 intersectionPosition, intersectionNormal; - if (glm::intersectRaySphere(mouseRayOrigin, mouseRayDirection, headPosition, 1, intersectionPosition, intersectionNormal)) { + printf("x: %f y: %f z: %f \n", mouseRayOrigin.x, mouseRayOrigin.y, mouseRayOrigin.z); + if (glm::intersectRaySphere(mouseRayOrigin, mouseRayDirection, headPosition, 10, intersectionPosition, intersectionNormal)) { + printf("lalala\n"); eyePosition = avatar->getHead().getEyeLevelPosition(); return true; } @@ -1758,6 +1760,8 @@ void Application::update(float deltaTime) { glm::vec3 mouseRayOrigin, mouseRayDirection; _viewFrustum.computePickRay(_mouseX / (float)_glWidget->width(), _mouseY / (float)_glWidget->height(), mouseRayOrigin, mouseRayDirection); + // printf("x: %d y: %d \n", _mouseX, _mouseY); + // printf("x: %f y: %f z: %f \n", mouseRayOrigin.x, mouseRayOrigin.y, mouseRayOrigin.z); // tell my avatar the posiion and direction of the ray projected ino the world based on the mouse position _myAvatar.setMouseRay(mouseRayOrigin, mouseRayDirection); diff --git a/interface/src/Application.h b/interface/src/Application.h index 25f574d1b4..88b0abdd56 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -173,7 +173,7 @@ private: void init(); void update(float deltaTime); - bool isLookingAtOtherAvatar(glm::vec3 mouseRayOrigin, glm::vec3 mouseRayDirection, glm::vec3 &eyePosition); + bool isLookingAtOtherAvatar(glm::vec3 &mouseRayOrigin, glm::vec3 &mouseRayDirection, glm::vec3 &eyePosition); void updateAvatar(float deltaTime); void loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum); From 0b334f9e5d3ec59fc5551eef56397bc44a8e5754 Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Wed, 10 Jul 2013 15:56:23 -0700 Subject: [PATCH 3/9] Make lookAtVectors lock on other avatar's eyes if the mouse is over the other avatar's head. Add rayIntersectsSphere function to Util. glm::intersectRaySphere was buggy. --- interface/src/Application.cpp | 5 +---- interface/src/Util.cpp | 10 ++++++++++ interface/src/Util.h | 2 ++ 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c403a3c3dc..17e435e2ea 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1727,9 +1727,8 @@ bool Application::isLookingAtOtherAvatar(glm::vec3 &mouseRayOrigin, glm::vec3 &m if (node->getLinkedData() != NULL && node->getType() == NODE_TYPE_AGENT) { Avatar *avatar = (Avatar *)node->getLinkedData(); glm::vec3 headPosition = avatar->getHead().getPosition(); - glm::vec3 intersectionPosition, intersectionNormal; printf("x: %f y: %f z: %f \n", mouseRayOrigin.x, mouseRayOrigin.y, mouseRayOrigin.z); - if (glm::intersectRaySphere(mouseRayOrigin, mouseRayDirection, headPosition, 10, intersectionPosition, intersectionNormal)) { + if (rayIntersectsSphere(mouseRayOrigin, mouseRayDirection, headPosition, 0.07)) { printf("lalala\n"); eyePosition = avatar->getHead().getEyeLevelPosition(); return true; @@ -1760,8 +1759,6 @@ void Application::update(float deltaTime) { glm::vec3 mouseRayOrigin, mouseRayDirection; _viewFrustum.computePickRay(_mouseX / (float)_glWidget->width(), _mouseY / (float)_glWidget->height(), mouseRayOrigin, mouseRayDirection); - // printf("x: %d y: %d \n", _mouseX, _mouseY); - // printf("x: %f y: %f z: %f \n", mouseRayOrigin.x, mouseRayOrigin.y, mouseRayOrigin.z); // tell my avatar the posiion and direction of the ray projected ino the world based on the mouse position _myAvatar.setMouseRay(mouseRayOrigin, mouseRayDirection); diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 4bfdb1f587..3e961cd43f 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -509,3 +509,13 @@ float loadSetting(QSettings* settings, const char* name, float defaultValue) { } return value; } + +bool rayIntersectsSphere(glm::vec3 &rayStarting, glm::vec3 &rayNormalizedDirection, glm::vec3 &sphereCenter, double sphereRadius) { + glm::vec3 vecFromRayToSphereCenter = sphereCenter - rayStarting; + double projection = glm::dot(vecFromRayToSphereCenter, rayNormalizedDirection); + double shortestDistance = sqrt(glm::dot(vecFromRayToSphereCenter, vecFromRayToSphereCenter) - projection*projection); + if (shortestDistance <= sphereRadius) { + return true; + } + return false; +} \ No newline at end of file diff --git a/interface/src/Util.h b/interface/src/Util.h index 2005b76438..6a4a25995c 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -71,4 +71,6 @@ void runTimingTests(); float loadSetting(QSettings* settings, const char* name, float defaultValue); +bool rayIntersectsSphere(glm::vec3 &rayStarting, glm::vec3 &rayNormalizedDirection, glm::vec3 &sphereCenter, double sphereRadius); + #endif From c832662807f8e3cbfe7a3a8a7fb7db6bd017fe45 Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Wed, 10 Jul 2013 17:20:46 -0700 Subject: [PATCH 4/9] Remove random print statements from eyecontact code in Application.cpp --- interface/src/Application.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index bc1535f504..894ddd7e1d 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1738,9 +1738,7 @@ bool Application::isLookingAtOtherAvatar(glm::vec3 &mouseRayOrigin, glm::vec3 &m if (node->getLinkedData() != NULL && node->getType() == NODE_TYPE_AGENT) { Avatar *avatar = (Avatar *)node->getLinkedData(); glm::vec3 headPosition = avatar->getHead().getPosition(); - printf("x: %f y: %f z: %f \n", mouseRayOrigin.x, mouseRayOrigin.y, mouseRayOrigin.z); if (rayIntersectsSphere(mouseRayOrigin, mouseRayDirection, headPosition, 0.07)) { - printf("lalala\n"); eyePosition = avatar->getHead().getEyeLevelPosition(); return true; } From 390921781559c93751591e077a9761ce94b3cf59 Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Wed, 10 Jul 2013 17:24:47 -0700 Subject: [PATCH 5/9] Remove unused #include for glm intersect in Application.cpp --- interface/src/Application.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 894ddd7e1d..8dc1aabbe2 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -55,7 +55,6 @@ #include #include #include -#include #include "Application.h" #include "InterfaceConfig.h" From f145a1eac4bca8edef0f8bfc2269b3ca9ed6ab16 Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Thu, 11 Jul 2013 10:17:45 -0700 Subject: [PATCH 6/9] Add condition to updateAvatar() where if another avatar's head is at the center of the screen, the lookAtPosition is set to the eye level of that avatar. --- interface/src/Application.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 8dc1aabbe2..82e04a1394 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2016,6 +2016,17 @@ void Application::updateAvatar(float deltaTime) { _headMouseY = max(_headMouseY, 0); _headMouseY = min(_headMouseY, _glWidget->height()); + // Set lookAtPosition if an avatar is at the center of the screen + + glm::vec3 screenCenterRayOrigin, screenCenterRayDirection; + _viewFrustum.computePickRay(0.5, 0.5, screenCenterRayOrigin, screenCenterRayDirection); + + glm::vec3 eyePosition; + if (isLookingAtOtherAvatar(screenCenterRayOrigin, screenCenterRayDirection, eyePosition)) { + glm::vec3 myLookAtFromMouse(eyePosition); + _myAvatar.getHead().setLookAtPosition(myLookAtFromMouse); + } + } if (OculusManager::isConnected()) { From 24d32bcdc82cf3f9d4e3b3f63c3c55e0e43d2b76 Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Thu, 11 Jul 2013 10:40:57 -0700 Subject: [PATCH 7/9] Fix style mistakes according to code review for eyecontact code. --- interface/src/Application.cpp | 7 ++++--- interface/src/Application.h | 2 +- interface/src/Head.h | 4 ++-- interface/src/Util.cpp | 4 ++-- interface/src/Util.h | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index c5ac0e5494..b7ed7a45ae 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1734,14 +1734,15 @@ void Application::init() { const float MAX_AVATAR_EDIT_VELOCITY = 1.0f; const float MAX_VOXEL_EDIT_DISTANCE = 20.0f; +const float HEAD_SPHERE_RADIUS = 0.07; -bool Application::isLookingAtOtherAvatar(glm::vec3 &mouseRayOrigin, glm::vec3 &mouseRayDirection, glm::vec3 &eyePosition) { +bool Application::isLookingAtOtherAvatar(glm::vec3& mouseRayOrigin, glm::vec3& mouseRayDirection, glm::vec3& eyePosition) { NodeList* nodeList = NodeList::getInstance(); for (NodeList::iterator node = nodeList->begin(); node != nodeList->end(); node++) { if (node->getLinkedData() != NULL && node->getType() == NODE_TYPE_AGENT) { - Avatar *avatar = (Avatar *)node->getLinkedData(); + Avatar* avatar = (Avatar *) node->getLinkedData(); glm::vec3 headPosition = avatar->getHead().getPosition(); - if (rayIntersectsSphere(mouseRayOrigin, mouseRayDirection, headPosition, 0.07)) { + if (rayIntersectsSphere(mouseRayOrigin, mouseRayDirection, headPosition, HEAD_SPHERE_RADIUS)) { eyePosition = avatar->getHead().getEyeLevelPosition(); return true; } diff --git a/interface/src/Application.h b/interface/src/Application.h index d6386c8383..e6f0abecfa 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -181,7 +181,7 @@ private: void init(); void update(float deltaTime); - bool isLookingAtOtherAvatar(glm::vec3 &mouseRayOrigin, glm::vec3 &mouseRayDirection, glm::vec3 &eyePosition); + bool isLookingAtOtherAvatar(glm::vec3& mouseRayOrigin, glm::vec3& mouseRayDirection, glm::vec3& eyePosition); void updateAvatar(float deltaTime); void loadViewFrustum(Camera& camera, ViewFrustum& viewFrustum); diff --git a/interface/src/Head.h b/interface/src/Head.h index fce98826de..3cb41f81ec 100644 --- a/interface/src/Head.h +++ b/interface/src/Head.h @@ -53,8 +53,8 @@ public: glm::quat getOrientation() const; glm::quat getCameraOrientation () const; - glm::vec3 getPosition() const { return _position; } - glm::vec3 getEyeLevelPosition() const { return _eyeLevelPosition; } + glm::vec3 getPosition() const { return _position; } + const glm::vec3& getEyeLevelPosition() const { return _eyeLevelPosition; } glm::vec3 getRightDirection() const { return getOrientation() * IDENTITY_RIGHT; } glm::vec3 getUpDirection () const { return getOrientation() * IDENTITY_UP; } glm::vec3 getFrontDirection() const { return getOrientation() * IDENTITY_FRONT; } diff --git a/interface/src/Util.cpp b/interface/src/Util.cpp index 549cf49f98..65a277b623 100644 --- a/interface/src/Util.cpp +++ b/interface/src/Util.cpp @@ -538,10 +538,10 @@ float loadSetting(QSettings* settings, const char* name, float defaultValue) { return value; } -bool rayIntersectsSphere(glm::vec3 &rayStarting, glm::vec3 &rayNormalizedDirection, glm::vec3 &sphereCenter, double sphereRadius) { +bool rayIntersectsSphere(glm::vec3& rayStarting, glm::vec3& rayNormalizedDirection, glm::vec3& sphereCenter, double sphereRadius) { glm::vec3 vecFromRayToSphereCenter = sphereCenter - rayStarting; double projection = glm::dot(vecFromRayToSphereCenter, rayNormalizedDirection); - double shortestDistance = sqrt(glm::dot(vecFromRayToSphereCenter, vecFromRayToSphereCenter) - projection*projection); + double shortestDistance = sqrt(glm::dot(vecFromRayToSphereCenter, vecFromRayToSphereCenter) - projection * projection); if (shortestDistance <= sphereRadius) { return true; } diff --git a/interface/src/Util.h b/interface/src/Util.h index 6a4a25995c..37bd0595ec 100644 --- a/interface/src/Util.h +++ b/interface/src/Util.h @@ -71,6 +71,6 @@ void runTimingTests(); float loadSetting(QSettings* settings, const char* name, float defaultValue); -bool rayIntersectsSphere(glm::vec3 &rayStarting, glm::vec3 &rayNormalizedDirection, glm::vec3 &sphereCenter, double sphereRadius); +bool rayIntersectsSphere(glm::vec3& rayStarting, glm::vec3& rayNormalizedDirection, glm::vec3& sphereCenter, double sphereRadius); #endif From 5527d4b50ff729bedd2d5bf02d35e3bb81f42510 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 11 Jul 2013 10:51:56 -0700 Subject: [PATCH 8/9] use glm clamp instead of pleateauAdditionOfSamples in audio mixer --- audio-mixer/src/main.cpp | 75 ++++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 37 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 68d66ac7ac..67ccb47e8c 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -6,42 +6,45 @@ // Copyright (c) 2013 High Fidelity, Inc. All rights reserved. // +#include +#include +#include #include +#include #include -#include +#include #include #include -#include -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -#include "InjectedAudioRingBuffer.h" -#include "AvatarAudioRingBuffer.h" -#include -#include "PacketHeaders.h" +#include #ifdef _WIN32 #include "Syssocket.h" #include "Systime.h" #include #else +#include +#include #include #include -#include -#include #endif //_WIN32 +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "AvatarAudioRingBuffer.h" +#include "InjectedAudioRingBuffer.h" + const unsigned short MIXER_LISTEN_PORT = 55443; const short JITTER_BUFFER_MSECS = 12; @@ -49,17 +52,8 @@ const short JITTER_BUFFER_SAMPLES = JITTER_BUFFER_MSECS * (SAMPLE_RATE / 1000.0) const unsigned int BUFFER_SEND_INTERVAL_USECS = floorf((BUFFER_LENGTH_SAMPLES_PER_CHANNEL / SAMPLE_RATE) * 1000000); -const long MAX_SAMPLE_VALUE = std::numeric_limits::max(); -const long MIN_SAMPLE_VALUE = std::numeric_limits::min(); - -void plateauAdditionOfSamples(int16_t &mixSample, int16_t sampleToAdd) { - long sumSample = sampleToAdd + mixSample; - - long normalizedSample = std::min(MAX_SAMPLE_VALUE, sumSample); - normalizedSample = std::max(MIN_SAMPLE_VALUE, sumSample); - - mixSample = normalizedSample; -} +const int MAX_SAMPLE_VALUE = std::numeric_limits::max(); +const int MIN_SAMPLE_VALUE = std::numeric_limits::min(); void attachNewBufferToNode(Node *newNode) { if (!newNode->getLinkedData()) { @@ -304,16 +298,23 @@ int main(int argc, const char* argv[]) { // pull the earlier sample for the delayed channel int earlierSample = delaySamplePointer[s] * attenuationCoefficient * weakChannelAmplitudeRatio; - plateauAdditionOfSamples(delayedChannel[s], earlierSample); + delayedChannel[s] = glm::clamp(delayedChannel[s] + earlierSample, + MIN_SAMPLE_VALUE, + MAX_SAMPLE_VALUE); } int16_t currentSample = stkFrameBuffer[s] * attenuationCoefficient; - plateauAdditionOfSamples(goodChannel[s], currentSample); + goodChannel[s] = glm::clamp(goodChannel[s] + currentSample, + MIN_SAMPLE_VALUE, + MAX_SAMPLE_VALUE); if (s + numSamplesDelay < BUFFER_LENGTH_SAMPLES_PER_CHANNEL) { - plateauAdditionOfSamples(delayedChannel[s + numSamplesDelay], - currentSample * weakChannelAmplitudeRatio); + int sumSample = delayedChannel[s + numSamplesDelay] + + (currentSample * weakChannelAmplitudeRatio); + delayedChannel[s + numSamplesDelay] = glm::clamp(sumSample, + MIN_SAMPLE_VALUE, + MAX_SAMPLE_VALUE); } if (s >= BUFFER_LENGTH_SAMPLES_PER_CHANNEL - PHASE_DELAY_AT_90) { From 9749e5edd6c2dc038fb3e38c0717d8da8d17b56c Mon Sep 17 00:00:00 2001 From: Mark Peng Date: Thu, 11 Jul 2013 10:53:38 -0700 Subject: [PATCH 9/9] Add const var to represent magic num in eyecontact code when gyros are on. --- interface/src/Application.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index b7ed7a45ae..57109b7cad 100755 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2021,10 +2021,11 @@ void Application::updateAvatar(float deltaTime) { _headMouseY = max(_headMouseY, 0); _headMouseY = min(_headMouseY, _glWidget->height()); - // Set lookAtPosition if an avatar is at the center of the screen + const float MIDPOINT_OF_SCREEN = 0.5; + // Set lookAtPosition if an avatar is at the center of the screen glm::vec3 screenCenterRayOrigin, screenCenterRayDirection; - _viewFrustum.computePickRay(0.5, 0.5, screenCenterRayOrigin, screenCenterRayDirection); + _viewFrustum.computePickRay(MIDPOINT_OF_SCREEN, MIDPOINT_OF_SCREEN, screenCenterRayOrigin, screenCenterRayDirection); glm::vec3 eyePosition; if (isLookingAtOtherAvatar(screenCenterRayOrigin, screenCenterRayDirection, eyePosition)) {