From d550b09399228cc4c73f0f1d8991fe51f8facd7d Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Tue, 23 Apr 2013 13:31:05 -0700 Subject: [PATCH 1/9] Added 'gyro look' option to have gyro drive your render yaw, added render menu. --- interface/src/main.cpp | 57 +++++++++++++++++++++--------------------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index df77265ea9..247922f7a6 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -160,8 +160,10 @@ bool perfStatsOn = false; // Do we want to display perfStats? int noiseOn = 0; // Whether to add random noise float noise = 1.0; // Overall magnitude scaling for random noise levels +bool gyroLook = false; // Whether to allow the gyro data from head to move your view + int displayLevels = 0; -bool lookingInMirror = 0; // Are we currently rendering one's own head as if in mirror? +bool lookingInMirror = 0; // Are we currently rendering one's own head as if in mirror? int displayField = 0; int displayHeadMouse = 1; // Display sample mouse pointer controlled by head movement @@ -476,31 +478,18 @@ void updateAvatar(float frametime) headMouseY = min(headMouseY, HEIGHT); // Update render direction (pitch/yaw) based on measured gyro rates - const int MIN_YAW_RATE = 100; - const int MIN_PITCH_RATE = 100; - const float YAW_SENSITIVITY = 0.02; - const float PITCH_SENSITIVITY = 0.05; + const float MIN_YAW_RATE = 5; + const float YAW_SENSITIVITY = 1.0; - // Update render pitch and yaw rates based on keyPositions - const float KEY_YAW_SENSITIVITY = 2.0; - if (myAvatar.getDriveKeys(ROT_LEFT)) renderYawRate -= KEY_YAW_SENSITIVITY*frametime; - if (myAvatar.getDriveKeys(ROT_RIGHT)) renderYawRate += KEY_YAW_SENSITIVITY*frametime; - - if (fabs(gyroYawRate) > MIN_YAW_RATE) - { - if (gyroYawRate > 0) - renderYawRate += (gyroYawRate - MIN_YAW_RATE) * YAW_SENSITIVITY * frametime; - else - renderYawRate += (gyroYawRate + MIN_YAW_RATE) * YAW_SENSITIVITY * frametime; - } - if (fabs(gyroPitchRate) > MIN_PITCH_RATE) + // If enabled, Update render pitch and yaw based on gyro data + if (::gyroLook) { - if (gyroPitchRate > 0) - renderPitchRate += (gyroPitchRate - MIN_PITCH_RATE) * PITCH_SENSITIVITY * frametime; - else - renderPitchRate += (gyroPitchRate + MIN_PITCH_RATE) * PITCH_SENSITIVITY * frametime; + if (fabs(gyroYawRate) > MIN_YAW_RATE) { + //if (fabs(myAvatar.getHeadYaw()) > MIN_YAW_ANGLE) { + myAvatar.addBodyYaw(-gyroYawRate * YAW_SENSITIVITY * frametime); + } } - + float renderPitch = myAvatar.getRenderPitch(); // Decay renderPitch toward zero because we never look constantly up/down renderPitch *= (1.f - 2.0*frametime); @@ -1072,6 +1061,12 @@ int setNoise(int state) { return iRet; } +int setGyroLook(int state) { + int iRet = setValue(state, &::gyroLook); + std::cout << "gyro look" << ::gyroLook << "\n"; + return iRet; +} + int setVoxels(int state) { return setValue(state, &::showingVoxels); } @@ -1190,16 +1185,20 @@ const char* getFrustumRenderModeName(int state) { } void initMenu() { - MenuColumn *menuColumnOptions, *menuColumnTools, *menuColumnDebug, *menuColumnFrustum; + MenuColumn *menuColumnOptions, *menuColumnRender, *menuColumnTools, *menuColumnDebug, *menuColumnFrustum; // Options menuColumnOptions = menu.addColumn("Options"); menuColumnOptions->addRow("Mirror (h)", setHead); - menuColumnOptions->addRow("Field (f)", setField); - menuColumnOptions->addRow("(N)oise", setNoise); - menuColumnOptions->addRow("(V)oxels", setVoxels); - menuColumnOptions->addRow("Stars (*)", setStars); - menuColumnOptions->addRow("(Q)uit", quitApp); + menuColumnOptions->addRow("Noise (n)", setNoise); + menuColumnOptions->addRow("Gyro Look", setGyroLook); + menuColumnOptions->addRow("Quit (q)", quitApp); + // Render + menuColumnRender = menu.addColumn("Render"); + menuColumnRender->addRow("Voxels (V)", setVoxels); + menuColumnRender->addRow("Stars (*)", setStars); + menuColumnRender->addRow("Field (f)", setField); + // Tools menuColumnTools = menu.addColumn("Tools"); menuColumnTools->addRow("Stats (/)", setStats); From 78aa4fdf80f207b2f41200a4c9f182c07285ea6b Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Wed, 24 Apr 2013 11:26:59 -0700 Subject: [PATCH 2/9] Simplified average loudness calculation, mouths and eyebrows of other people now move again! --- interface/src/Audio.cpp | 7 +++---- interface/src/Audio.h | 2 +- interface/src/AudioData.h | 1 - interface/src/Head.cpp | 18 ++++++++++++++++-- interface/src/main.cpp | 6 +----- 5 files changed, 21 insertions(+), 13 deletions(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 9dbfdbf07f..17bb5c310b 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -130,7 +130,7 @@ int audioCallback (const void *inputBuffer, loudness /= BUFFER_LENGTH_SAMPLES; data->lastInputLoudness = loudness; - data->averagedInputLoudness = 0.66*data->averagedInputLoudness + 0.33*loudness; + // // If scope is turned on, copy input buffer to scope // @@ -510,9 +510,8 @@ error: } -void Audio::getInputLoudness(float * lastLoudness, float * averageLoudness) { - *lastLoudness = audioData->lastInputLoudness; - *averageLoudness = audioData->averagedInputLoudness; +const float Audio::getInputLoudness() { + return audioData->lastInputLoudness; } void Audio::render(int screenWidth, int screenHeight) diff --git a/interface/src/Audio.h b/interface/src/Audio.h index f983a315e0..3e74596402 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -25,7 +25,7 @@ public: bool getMixerLoopbackFlag(); void setMixerLoopbackFlag(bool newMixerLoopbackFlag); - void getInputLoudness(float * lastLoudness, float * averageLoudness); + const float getInputLoudness(); void updateMixerParams(in_addr_t mixerAddress, in_port_t mixerPort); void setWalkingState(bool newWalkState); diff --git a/interface/src/AudioData.h b/interface/src/AudioData.h index ca7d5ec8b5..fdc15998f0 100644 --- a/interface/src/AudioData.h +++ b/interface/src/AudioData.h @@ -36,7 +36,6 @@ class AudioData { int wasStarved; float lastInputLoudness; - float averagedInputLoudness; bool mixerLoopbackFlag; bool playWalkSound; diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index 9770bcbce1..896562b21e 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -566,6 +566,14 @@ void Head::simulate(float deltaTime) { _head.eyebrowRoll [1] *=-1; } } + + // + // Update audio trailing average for rendering facial animations + // + + const float AUDIO_AVERAGING_SECS = 0.05; + _head.averageLoudness = (1.f - deltaTime / AUDIO_AVERAGING_SECS)*_head.averageLoudness + + (deltaTime / AUDIO_AVERAGING_SECS) * _audioLoudness; } @@ -740,16 +748,22 @@ void Head::renderHead(bool lookingInMirror) { } glPopMatrix(); - // _eyebrows + // + // Update audio attack data for facial animation (eyebrows and mouth) + // + _head.audioAttack = 0.9 * _head.audioAttack + 0.1 * fabs(_audioLoudness - _head.lastLoudness); _head.lastLoudness = _audioLoudness; - + + const float BROW_LIFT_THRESHOLD = 100; if (_head.audioAttack > BROW_LIFT_THRESHOLD) _head.browAudioLift += sqrt(_head.audioAttack) / 1000.0; _head.browAudioLift *= .90; + + // Render Eyebrows glPushMatrix(); glTranslatef(-_head.interBrowDistance / 2.0,0.4,0.45); for(side = 0; side < 2; side++) { diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 119473ef9e..a20ad0e3a2 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -503,11 +503,8 @@ void updateAvatar(float frametime) myAvatar.setRenderPitch(renderPitch + renderPitchRate); // Get audio loudness data from audio input device - float loudness, averageLoudness; #ifndef _WIN32 - audio.getInputLoudness(&loudness, &averageLoudness); - myAvatar.setLoudness(loudness); - myAvatar.setAverageLoudness(averageLoudness); + myAvatar.setLoudness(audio.getInputLoudness()); #endif // Update Avatar with latest camera and view frustum data... @@ -1063,7 +1060,6 @@ int setNoise(int state) { int setGyroLook(int state) { int iRet = setValue(state, &::gyroLook); - std::cout << "gyro look" << ::gyroLook << "\n"; return iRet; } From cfbe8a719c3b38873b7a4e3bce33dc547a032b49 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Apr 2013 12:39:25 -0700 Subject: [PATCH 3/9] fix getter for hand state in AvatarData --- interface/src/Head.cpp | 2 +- libraries/avatars/src/AvatarData.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index 9770bcbce1..ac6e412b1e 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -1263,7 +1263,7 @@ void Head::renderBody() { //--------------------------------------------------------- // if the hand is grasping, show it... //--------------------------------------------------------- - if (( _usingBodySprings ) && ( getHandState() == 1 )) { + if (( _usingBodySprings ) && ( _handState == 1 )) { glPushMatrix(); glTranslatef ( diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index c403a1683a..e404efaf84 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -48,7 +48,7 @@ public: // Hand State void setHandState(char s) { _handState = s; }; - const float getHandState() const {return _handState; }; //@Philip - shouldn't this be an int or a char? + const char getHandState() const {return _handState; }; // Instantaneous audio loudness to drive mouth/facial animation void setLoudness(float l) { _audioLoudness = l; }; From 33f95c696bafbcab9242ae06c9420702b73b8cc4 Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Wed, 24 Apr 2013 13:12:08 -0700 Subject: [PATCH 4/9] Fixes per code review --- interface/src/Audio.cpp | 2 +- interface/src/Audio.h | 2 +- interface/src/Head.cpp | 11 +++-------- interface/src/main.cpp | 4 +--- 4 files changed, 6 insertions(+), 13 deletions(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 17bb5c310b..287325c090 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -510,7 +510,7 @@ error: } -const float Audio::getInputLoudness() { +float Audio::getInputLoudness() const { return audioData->lastInputLoudness; } diff --git a/interface/src/Audio.h b/interface/src/Audio.h index 3e74596402..f4bf594b0c 100644 --- a/interface/src/Audio.h +++ b/interface/src/Audio.h @@ -25,7 +25,7 @@ public: bool getMixerLoopbackFlag(); void setMixerLoopbackFlag(bool newMixerLoopbackFlag); - const float getInputLoudness(); + float getInputLoudness() const; void updateMixerParams(in_addr_t mixerAddress, in_port_t mixerPort); void setWalkingState(bool newWalkState); diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index 896562b21e..0a632b4a6b 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -567,12 +567,9 @@ void Head::simulate(float deltaTime) { } } - // // Update audio trailing average for rendering facial animations - // - const float AUDIO_AVERAGING_SECS = 0.05; - _head.averageLoudness = (1.f - deltaTime / AUDIO_AVERAGING_SECS)*_head.averageLoudness + + _head.averageLoudness = (1.f - deltaTime / AUDIO_AVERAGING_SECS) * _head.averageLoudness + (deltaTime / AUDIO_AVERAGING_SECS) * _audioLoudness; } @@ -748,11 +745,9 @@ void Head::renderHead(bool lookingInMirror) { } glPopMatrix(); - // + // Update audio attack data for facial animation (eyebrows and mouth) - // - - _head.audioAttack = 0.9 * _head.audioAttack + 0.1 * fabs(_audioLoudness - _head.lastLoudness); + _head.audioAttack = 0.9 * _head.audioAttack + 0.1 * fabs(_audioLoudness - _head.lastLoudness); _head.lastLoudness = _audioLoudness; diff --git a/interface/src/main.cpp b/interface/src/main.cpp index a20ad0e3a2..41ffdc1e92 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -482,10 +482,8 @@ void updateAvatar(float frametime) const float YAW_SENSITIVITY = 1.0; // If enabled, Update render pitch and yaw based on gyro data - if (::gyroLook) - { + if (::gyroLook) { if (fabs(gyroYawRate) > MIN_YAW_RATE) { - //if (fabs(myAvatar.getHeadYaw()) > MIN_YAW_ANGLE) { myAvatar.addBodyYaw(-gyroYawRate * YAW_SENSITIVITY * frametime); } } From 142a8a6f087849485af4806c2396b6101e1d0f6a Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Apr 2013 13:45:17 -0700 Subject: [PATCH 5/9] remove double const in AvatarData.h --- libraries/avatars/src/AvatarData.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index e404efaf84..06d6f43287 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -48,11 +48,11 @@ public: // Hand State void setHandState(char s) { _handState = s; }; - const char getHandState() const {return _handState; }; + char getHandState() const {return _handState; }; // Instantaneous audio loudness to drive mouth/facial animation void setLoudness(float l) { _audioLoudness = l; }; - const float getLoudness() const {return _audioLoudness; }; + float getLoudness() const {return _audioLoudness; }; // getters for camera details const glm::vec3& getCameraPosition() const { return _cameraPosition; }; From a423d3c38fdffd7a986e02e787b8d9bc7f725526 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Apr 2013 13:49:24 -0700 Subject: [PATCH 6/9] more const repairs in AvatarData --- libraries/avatars/src/AvatarData.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 06d6f43287..4f08d12d41 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -39,9 +39,9 @@ public: void setHeadPitch(float p) {_headPitch = p; } void setHeadYaw(float y) {_headYaw = y; } void setHeadRoll(float r) {_headRoll = r; }; - const float getHeadPitch() const { return _headPitch; }; - const float getHeadYaw() const { return _headYaw; }; - const float getHeadRoll() const { return _headRoll; }; + float getHeadPitch() const { return _headPitch; }; + float getHeadYaw() const { return _headYaw; }; + float getHeadRoll() const { return _headRoll; }; void addHeadPitch(float p) {_headPitch -= p; } void addHeadYaw(float y){_headYaw -= y; } void addHeadRoll(float r){_headRoll += r; } @@ -55,14 +55,14 @@ public: float getLoudness() const {return _audioLoudness; }; // getters for camera details - const glm::vec3& getCameraPosition() const { return _cameraPosition; }; - const glm::vec3& getCameraDirection() const { return _cameraDirection; } - const glm::vec3& getCameraUp() const { return _cameraUp; } - const glm::vec3& getCameraRight() const { return _cameraRight; } - float getCameraFov() const { return _cameraFov; } - float getCameraAspectRatio() const { return _cameraAspectRatio; } - float getCameraNearClip() const { return _cameraNearClip; } - float getCameraFarClip() const { return _cameraFarClip; } + glm::vec3 getCameraPosition() const { return _cameraPosition; }; + glm::vec3 getCameraDirection() const { return _cameraDirection; } + glm::vec3 getCameraUp() const { return _cameraUp; } + glm::vec3 getCameraRight() const { return _cameraRight; } + float getCameraFov() const { return _cameraFov; } + float getCameraAspectRatio() const { return _cameraAspectRatio; } + float getCameraNearClip() const { return _cameraNearClip; } + float getCameraFarClip() const { return _cameraFarClip; } // setters for camera details void setCameraPosition(const glm::vec3& position) { _cameraPosition = position; }; From 461ca6ecb42c91e6756007a10e5362521ac07261 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Apr 2013 13:51:27 -0700 Subject: [PATCH 7/9] revert some of the const changes that make sense --- libraries/avatars/src/AvatarData.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 4f08d12d41..05f40b825a 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -55,10 +55,10 @@ public: float getLoudness() const {return _audioLoudness; }; // getters for camera details - glm::vec3 getCameraPosition() const { return _cameraPosition; }; - glm::vec3 getCameraDirection() const { return _cameraDirection; } - glm::vec3 getCameraUp() const { return _cameraUp; } - glm::vec3 getCameraRight() const { return _cameraRight; } + const glm::vec3& getCameraPosition() const { return _cameraPosition; }; + const glm::vec3& getCameraDirection() const { return _cameraDirection; } + const glm::vec3& getCameraUp() const { return _cameraUp; } + const glm::vec3& getCameraRight() const { return _cameraRight; } float getCameraFov() const { return _cameraFov; } float getCameraAspectRatio() const { return _cameraAspectRatio; } float getCameraNearClip() const { return _cameraNearClip; } From 87386cb05a55217931cefb37ca9937bd6490a0d0 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Apr 2013 13:54:35 -0700 Subject: [PATCH 8/9] line the consts back up in AvatarData --- libraries/avatars/src/AvatarData.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 05f40b825a..cb2171cbe5 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -59,10 +59,10 @@ public: const glm::vec3& getCameraDirection() const { return _cameraDirection; } const glm::vec3& getCameraUp() const { return _cameraUp; } const glm::vec3& getCameraRight() const { return _cameraRight; } - float getCameraFov() const { return _cameraFov; } - float getCameraAspectRatio() const { return _cameraAspectRatio; } - float getCameraNearClip() const { return _cameraNearClip; } - float getCameraFarClip() const { return _cameraFarClip; } + float getCameraFov() const { return _cameraFov; } + float getCameraAspectRatio() const { return _cameraAspectRatio; } + float getCameraNearClip() const { return _cameraNearClip; } + float getCameraFarClip() const { return _cameraFarClip; } // setters for camera details void setCameraPosition(const glm::vec3& position) { _cameraPosition = position; }; From 9c3ebf9f64671ca3760f4e7cf8ea05fd9076208b Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 24 Apr 2013 14:11:07 -0700 Subject: [PATCH 9/9] only set hand state for mouse press for me --- interface/src/Head.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/interface/src/Head.cpp b/interface/src/Head.cpp index 91b9e1b516..f6683b6a9a 100644 --- a/interface/src/Head.cpp +++ b/interface/src/Head.cpp @@ -1137,7 +1137,9 @@ void Head::updateHandMovement( float deltaTime ) { _bone[ AVATAR_BONE_RIGHT_HAND ].position += transformedHandMovement; - setHandState(_mousePressed); + if (_isMine) { + _handState = _mousePressed; + } //--------------------------------------------------------------------- // if holding hands with another avatar, add a force to the hand...