From f51db292a47f8c0d1a3395318dbccd651a6d4db6 Mon Sep 17 00:00:00 2001 From: Jeffrey Ventrella Date: Mon, 5 Aug 2013 16:26:32 -0700 Subject: [PATCH 1/8] ya --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index f4b9b0999a..7f7e0f67ab 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2562,7 +2562,7 @@ void Application::update(float deltaTime) { if (_renderParticleSystemOn->isChecked()) { updateParticleSystem(deltaTime); - } + } } void Application::updateAvatar(float deltaTime) { From 4ceba28632f44d1759bcd4b9658c06f858300a62 Mon Sep 17 00:00:00 2001 From: Jeffrey Ventrella Date: Mon, 5 Aug 2013 17:00:50 -0700 Subject: [PATCH 2/8] working with Eric to fix transmission of hand data --- interface/src/avatar/Hand.cpp | 34 ++++++++++++++++++++++++---------- interface/src/avatar/Hand.h | 5 ++++- 2 files changed, 28 insertions(+), 11 deletions(-) diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index bf09096d7f..95128ec007 100755 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -42,6 +42,9 @@ void Hand::init() { else { _ballColor = glm::vec3(0.0, 0.0, 0.4); } + + _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_NULL; + _raveGloveEffectsModeChanged = false; } void Hand::reset() { @@ -51,6 +54,14 @@ void Hand::reset() { void Hand::simulate(float deltaTime, bool isMine) { if (_isRaveGloveActive) { + if (_raveGloveEffectsModeChanged) { + + printf( "_raveGloveEffectsMode = %d\n", _raveGloveEffectsMode); + + setRaveGloveMode(_raveGloveEffectsMode); + _raveGloveEffectsModeChanged = false; + } + updateRaveGloveParticles(deltaTime); } } @@ -106,18 +117,21 @@ void Hand::calculateGeometry() { } void Hand::setRaveGloveEffectsMode(QKeyEvent* event) { + + _raveGloveEffectsModeChanged = true; + switch (event->key()) { - case Qt::Key_0: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_THROBBING_COLOR); break; - case Qt::Key_1: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_TRAILS ); break; - case Qt::Key_2: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_FIRE ); break; - case Qt::Key_3: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_WATER ); break; - case Qt::Key_4: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_FLASHY ); break; - case Qt::Key_5: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_BOZO_SPARKLER ); break; - case Qt::Key_6: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_LONG_SPARKLER ); break; - case Qt::Key_7: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_SNAKE ); break; - case Qt::Key_8: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_PULSE ); break; - case Qt::Key_9: setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_THROB ); break; + case Qt::Key_0: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_THROBBING_COLOR; break; + case Qt::Key_1: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_TRAILS; break; + case Qt::Key_2: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_FIRE; break; + case Qt::Key_3: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_WATER; break; + case Qt::Key_4: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_FLASHY; break; + case Qt::Key_5: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_BOZO_SPARKLER; break; + case Qt::Key_6: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_LONG_SPARKLER; break; + case Qt::Key_7: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_SNAKE; break; + case Qt::Key_8: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_PULSE; break; + case Qt::Key_9: _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_THROB; break; }; } diff --git a/interface/src/avatar/Hand.h b/interface/src/avatar/Hand.h index 39845141aa..6df97ea106 100755 --- a/interface/src/avatar/Hand.h +++ b/interface/src/avatar/Hand.h @@ -60,6 +60,8 @@ private: float _raveGloveClock; bool _raveGloveInitialized; int _raveGloveEmitter[NUM_FINGERS]; + int _raveGloveEffectsMode; + bool _raveGloveEffectsModeChanged; Avatar* _owningAvatar; float _renderAlpha; @@ -72,8 +74,9 @@ private: void setLeapHands(const std::vector& handPositions, const std::vector& handNormals); - void renderRaveGloveStage(); virtual void setRaveGloveMode(int mode); + + void renderRaveGloveStage(); void renderLeapHandSpheres(); void renderLeapHands(); void renderLeapHand(PalmData& hand); From cba42808c135a3c9d389b74bf201c80fd640c59c Mon Sep 17 00:00:00 2001 From: Jeffrey Ventrella Date: Mon, 5 Aug 2013 17:24:31 -0700 Subject: [PATCH 3/8] fixed initial rave glove mode --- interface/src/avatar/Hand.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index 95128ec007..c78b42fcea 100755 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -43,7 +43,7 @@ void Hand::init() { _ballColor = glm::vec3(0.0, 0.0, 0.4); } - _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_NULL; + _raveGloveEffectsMode = RAVE_GLOVE_EFFECTS_MODE_FIRE; _raveGloveEffectsModeChanged = false; } @@ -362,7 +362,6 @@ void Hand::updateRaveGloveParticles(float deltaTime) { } - void Hand::setRaveGloveMode(int mode) { _raveGloveMode = mode; From d85ce813135f6f9b28f856dc711026d73ca5e600 Mon Sep 17 00:00:00 2001 From: Eric Johnston Date: Mon, 5 Aug 2013 17:27:42 -0700 Subject: [PATCH 4/8] Rave glove demo: network-glove fixes After this change, people can see each other's rave glove performances. 1. Moved hand->simulate call into avatar->simulate so that it gets called on all avatars, not just mine. 2. Hide the rave stage, so it's out of the way while we figure out the best way to darken the world, if that's still desired. --- interface/src/Application.cpp | 2 -- interface/src/avatar/Avatar.cpp | 2 ++ interface/src/avatar/Hand.cpp | 3 ++- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6087a4493e..8cfeaf3327 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2446,8 +2446,6 @@ void Application::update(float deltaTime) { _myAvatar.simulate(deltaTime, NULL); } - _myAvatar.getHand().simulate(deltaTime, true); - if (!OculusManager::isConnected()) { if (_lookingInMirror->isChecked()) { if (_myCamera.getMode() != CAMERA_MODE_MIRROR) { diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 346d5ff7d5..065501f39a 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -741,6 +741,8 @@ void Avatar::simulate(float deltaTime, Transmitter* transmitter) { _head.setScale(_scale); _head.setSkinColor(glm::vec3(SKIN_COLOR[0], SKIN_COLOR[1], SKIN_COLOR[2])); _head.simulate(deltaTime, isMyAvatar()); + _hand.simulate(deltaTime, isMyAvatar()); + diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index 7b74a1b7d8..bb941c9beb 100755 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -129,7 +129,8 @@ void Hand::render(bool lookingInMirror) { calculateGeometry(); if (_isRaveGloveActive) { - renderRaveGloveStage(); + // Disable raveGloveStage while we work on the network glove features + // renderRaveGloveStage(); if (_raveGloveInitialized) { updateRaveGloveEmitters(); // do this after calculateGeometry From f9f925b70b9e4021451f05ac0e6f3e28ec631142 Mon Sep 17 00:00:00 2001 From: Jeffrey Ventrella Date: Mon, 5 Aug 2013 17:30:04 -0700 Subject: [PATCH 5/8] removed printf --- interface/src/avatar/Hand.cpp | 3 --- 1 file changed, 3 deletions(-) diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index c78b42fcea..0e12b8c2b5 100755 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -55,9 +55,6 @@ void Hand::simulate(float deltaTime, bool isMine) { if (_isRaveGloveActive) { if (_raveGloveEffectsModeChanged) { - - printf( "_raveGloveEffectsMode = %d\n", _raveGloveEffectsMode); - setRaveGloveMode(_raveGloveEffectsMode); _raveGloveEffectsModeChanged = false; } From 16aae5993ab64c430e6fdd9763b55d5472da2df8 Mon Sep 17 00:00:00 2001 From: Eric Johnston Date: Tue, 6 Aug 2013 07:33:18 -0700 Subject: [PATCH 6/8] Rave glove fixes: removed double-stored glove mode members Uncommented glove mode switch, which now calls a non-crashing method. Fixed overlapping method names for very different methods (setRaveGloveMode becomes activateNewRaveGloveMode). --- interface/src/avatar/Hand.cpp | 10 +++++----- interface/src/avatar/Hand.h | 4 +--- libraries/avatars/src/HandData.cpp | 13 ++++++++++--- libraries/avatars/src/HandData.h | 7 ++++--- 4 files changed, 20 insertions(+), 14 deletions(-) diff --git a/interface/src/avatar/Hand.cpp b/interface/src/avatar/Hand.cpp index 4043f1e42f..e445f89472 100755 --- a/interface/src/avatar/Hand.cpp +++ b/interface/src/avatar/Hand.cpp @@ -55,7 +55,7 @@ void Hand::simulate(float deltaTime, bool isMine) { if (_isRaveGloveActive) { if (_raveGloveEffectsModeChanged) { - setRaveGloveMode(_raveGloveEffectsMode); + activateNewRaveGloveMode(); _raveGloveEffectsModeChanged = false; } @@ -352,6 +352,7 @@ void Hand::updateRaveGloveParticles(float deltaTime) { } setRaveGloveMode(RAVE_GLOVE_EFFECTS_MODE_FIRE); + activateNewRaveGloveMode(); _raveGloveParticleSystem.setUpDirection(glm::vec3(0.0f, 1.0f, 0.0f)); _raveGloveInitialized = true; } else { @@ -359,11 +360,10 @@ void Hand::updateRaveGloveParticles(float deltaTime) { } } +// The rave glove mode has changed, so activate the effects. +void Hand::activateNewRaveGloveMode() { -void Hand::setRaveGloveMode(int mode) { - - _raveGloveMode = mode; - + int mode = _raveGloveEffectsMode; _raveGloveParticleSystem.killAllParticles(); for ( int f = 0; f< NUM_FINGERS; f ++ ) { diff --git a/interface/src/avatar/Hand.h b/interface/src/avatar/Hand.h index 6df97ea106..d2a36b97b1 100755 --- a/interface/src/avatar/Hand.h +++ b/interface/src/avatar/Hand.h @@ -60,8 +60,6 @@ private: float _raveGloveClock; bool _raveGloveInitialized; int _raveGloveEmitter[NUM_FINGERS]; - int _raveGloveEffectsMode; - bool _raveGloveEffectsModeChanged; Avatar* _owningAvatar; float _renderAlpha; @@ -74,7 +72,7 @@ private: void setLeapHands(const std::vector& handPositions, const std::vector& handNormals); - virtual void setRaveGloveMode(int mode); + void activateNewRaveGloveMode(); void renderRaveGloveStage(); void renderLeapHandSpheres(); diff --git a/libraries/avatars/src/HandData.cpp b/libraries/avatars/src/HandData.cpp index 644a0764b7..e8e623decd 100644 --- a/libraries/avatars/src/HandData.cpp +++ b/libraries/avatars/src/HandData.cpp @@ -20,7 +20,8 @@ HandData::HandData(AvatarData* owningAvatar) : _baseOrientation(0.0f, 0.0f, 0.0f, 1.0f), _owningAvatarData(owningAvatar), _isRaveGloveActive(false), - _raveGloveMode(RAVE_GLOVE_EFFECTS_MODE_THROBBING_COLOR) + _raveGloveEffectsMode(RAVE_GLOVE_EFFECTS_MODE_THROBBING_COLOR), + _raveGloveEffectsModeChanged(false) { // Start with two palms addNewPalm(); @@ -160,8 +161,7 @@ int HandData::decodeRemoteData(unsigned char* sourceBuffer) { } setRaveGloveActive((gloveFlags & GLOVE_FLAG_RAVE) != 0); -// This is disabled for crash tracing. -// setRaveGloveMode(effectsMode); + setRaveGloveMode(effectsMode); // One byte for error checking safety. unsigned char requiredLength = (unsigned char)(sourceBuffer - startPosition); @@ -171,6 +171,13 @@ int HandData::decodeRemoteData(unsigned char* sourceBuffer) { return sourceBuffer - startPosition; } +void HandData::setRaveGloveMode(int effectsMode) +{ + if (effectsMode != _raveGloveEffectsMode) + _raveGloveEffectsModeChanged = true; + _raveGloveEffectsMode = effectsMode; +} + void HandData::setFingerTrailLength(unsigned int length) { for (size_t i = 0; i < getNumPalms(); ++i) { PalmData& palm = getPalms()[i]; diff --git a/libraries/avatars/src/HandData.h b/libraries/avatars/src/HandData.h index fd820bccc0..c871c568bb 100755 --- a/libraries/avatars/src/HandData.h +++ b/libraries/avatars/src/HandData.h @@ -70,9 +70,9 @@ public: int decodeRemoteData(unsigned char* sourceBuffer); void setRaveGloveActive(bool active) { _isRaveGloveActive = active; } - virtual void setRaveGloveMode(int effectsMode) { _raveGloveMode = effectsMode; } + void setRaveGloveMode(int effectsMode); bool isRaveGloveActive() const { return _isRaveGloveActive; } - int getRaveGloveMode() { return _raveGloveMode; } + int getRaveGloveMode() { return _raveGloveEffectsMode; } friend class AvatarData; protected: @@ -81,7 +81,8 @@ protected: AvatarData* _owningAvatarData; std::vector _palms; bool _isRaveGloveActive; - int _raveGloveMode; + int _raveGloveEffectsMode; + bool _raveGloveEffectsModeChanged; private: // privatize copy ctor and assignment operator so copies of this object cannot be made HandData(const HandData&); From 58cb85259702aa0bd25dba1f017ebde59463fe6e Mon Sep 17 00:00:00 2001 From: Philip Rosedale Date: Tue, 6 Aug 2013 10:06:40 -0700 Subject: [PATCH 7/8] Touch-driven pitch happens immediately even when wearing gyros --- interface/src/Application.cpp | 1 - interface/src/avatar/Avatar.cpp | 7 +++---- interface/src/avatar/Avatar.h | 1 - interface/src/avatar/Head.cpp | 3 ++- interface/src/avatar/Head.h | 3 +++ 5 files changed, 8 insertions(+), 7 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 66f414d38d..5efe365a49 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -2587,7 +2587,6 @@ void Application::updateAvatar(float deltaTime) { glm::vec3(_headCameraPitchYawScale, _headCameraPitchYawScale, _headCameraPitchYawScale), - 0.f, _pitchFromTouch); if (_serialHeadSensor.isActive()) { diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index cfb39d2e54..0b6484c8a7 100755 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -295,8 +295,8 @@ void Avatar::reset() { // Update avatar head rotation with sensor data void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook, const glm::vec3& amplifyAngle, - float yawFromTouch, float pitchFromTouch) { + _head.setMousePitch(pitchFromTouch); SerialInterface* gyros = Application::getInstance()->getSerialHeadSensor(); Webcam* webcam = Application::getInstance()->getWebcam(); glm::vec3 estimatedPosition, estimatedRotation; @@ -308,7 +308,6 @@ void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook, } else { _head.setPitch(pitchFromTouch); - _head.setYaw(yawFromTouch); return; } if (webcam->isActive()) { @@ -334,8 +333,8 @@ void Avatar::updateFromGyrosAndOrWebcam(bool gyroLook, } else { _head.getFace().clearFrame(); } - _head.setPitch(estimatedRotation.x * amplifyAngle.x + pitchFromTouch); - _head.setYaw(estimatedRotation.y * amplifyAngle.y + yawFromTouch); + _head.setPitch(estimatedRotation.x * amplifyAngle.x); + _head.setYaw(estimatedRotation.y * amplifyAngle.y); _head.setRoll(estimatedRotation.z * amplifyAngle.z); _head.setCameraFollowsHead(gyroLook); diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index b490429ec9..ca41bdcb32 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -124,7 +124,6 @@ public: void follow(Avatar* leadingAvatar); void updateFromGyrosAndOrWebcam(bool gyroLook, const glm::vec3& amplifyAngle, - float yawFromTouch, float pitchFromTouch); void addBodyYaw(float bodyYaw) {_bodyYaw += bodyYaw;}; void addBodyYawDelta(float bodyYawDelta) {_bodyYawDelta += bodyYawDelta;} diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index b88802b7f1..40ed309097 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -84,6 +84,7 @@ Head::Head(Avatar* owningAvatar) : _rightEyeBlinkVelocity(0.0f), _timeWithoutTalking(0.0f), _cameraPitch(_pitch), + _mousePitch(0.f), _cameraYaw(_yaw), _isCameraMoving(false), _cameraFollowsHead(false), @@ -428,7 +429,7 @@ glm::quat Head::getOrientation() const { glm::quat Head::getCameraOrientation () const { Avatar* owningAvatar = static_cast(_owningAvatar); return owningAvatar->getWorldAlignedOrientation() - * glm::quat(glm::radians(glm::vec3(_cameraPitch, _cameraYaw, 0.0f))); + * glm::quat(glm::radians(glm::vec3(_cameraPitch + _mousePitch, _cameraYaw, 0.0f))); } void Head::renderHeadSphere() { diff --git a/interface/src/avatar/Head.h b/interface/src/avatar/Head.h index 1256b05bb7..f31bc53f2a 100644 --- a/interface/src/avatar/Head.h +++ b/interface/src/avatar/Head.h @@ -57,6 +57,8 @@ public: void setCameraFollowsHead(bool cameraFollowsHead) { _cameraFollowsHead = cameraFollowsHead; } + void setMousePitch(float mousePitch) { _mousePitch = mousePitch; } + glm::quat getOrientation() const; glm::quat getCameraOrientation () const; @@ -123,6 +125,7 @@ private: float _rightEyeBlinkVelocity; float _timeWithoutTalking; float _cameraPitch; // Used to position the camera differently from the head + float _mousePitch; float _cameraYaw; bool _isCameraMoving; bool _cameraFollowsHead; From fc23eaa8257f2a92fffcd89b26477930f7a0ebc5 Mon Sep 17 00:00:00 2001 From: Eric Johnston Date: Tue, 6 Aug 2013 10:28:31 -0700 Subject: [PATCH 8/8] Fixed per github feedback. Also, to prevent a repeat of yesterday's crash trouble, disabled the mode switch, so that those working on the rave mode can enable it locally for testing. --- libraries/avatars/src/HandData.cpp | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/libraries/avatars/src/HandData.cpp b/libraries/avatars/src/HandData.cpp index e8e623decd..b60b423627 100644 --- a/libraries/avatars/src/HandData.cpp +++ b/libraries/avatars/src/HandData.cpp @@ -161,7 +161,8 @@ int HandData::decodeRemoteData(unsigned char* sourceBuffer) { } setRaveGloveActive((gloveFlags & GLOVE_FLAG_RAVE) != 0); - setRaveGloveMode(effectsMode); +// Jeffrey: uncomment this to test locally, before unrolling it to the team. +// setRaveGloveMode(effectsMode); // One byte for error checking safety. unsigned char requiredLength = (unsigned char)(sourceBuffer - startPosition); @@ -171,10 +172,10 @@ int HandData::decodeRemoteData(unsigned char* sourceBuffer) { return sourceBuffer - startPosition; } -void HandData::setRaveGloveMode(int effectsMode) -{ - if (effectsMode != _raveGloveEffectsMode) +void HandData::setRaveGloveMode(int effectsMode) { + if (effectsMode != _raveGloveEffectsMode) { _raveGloveEffectsModeChanged = true; + } _raveGloveEffectsMode = effectsMode; }