From 3826ed0d6901e6812bcb7a7005c6c780803053f5 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Tue, 26 Aug 2014 15:36:08 -0700 Subject: [PATCH] Added setFinalPitch/Yaw/Roll to HeadData --- interface/src/avatar/Head.cpp | 12 ++++++++++++ interface/src/avatar/Head.h | 3 +++ libraries/avatars/src/AvatarData.cpp | 6 +++++- libraries/avatars/src/HeadData.h | 4 ++++ libraries/avatars/src/Recorder.cpp | 16 +++------------- libraries/avatars/src/Recorder.h | 2 -- 6 files changed, 27 insertions(+), 16 deletions(-) diff --git a/interface/src/avatar/Head.cpp b/interface/src/avatar/Head.cpp index 9bf8158ba7..b226b8ed31 100644 --- a/interface/src/avatar/Head.cpp +++ b/interface/src/avatar/Head.cpp @@ -222,6 +222,18 @@ glm::vec3 Head::getScalePivot() const { return _faceModel.isActive() ? _faceModel.getTranslation() : _position; } +void Head::setFinalPitch(float finalPitch) { + _deltaPitch = glm::clamp(finalPitch, MIN_HEAD_PITCH, MAX_HEAD_PITCH) - _basePitch; +} + +void Head::setFinalYaw(float finalYaw) { + _deltaYaw = glm::clamp(finalYaw, MIN_HEAD_YAW, MAX_HEAD_YAW) - _baseYaw; +} + +void Head::setFinalRoll(float finalRoll) { + _deltaRoll = glm::clamp(finalRoll, MIN_HEAD_ROLL, MAX_HEAD_ROLL) - _baseRoll; +} + float Head::getFinalYaw() const { return glm::clamp(_baseYaw + _deltaYaw, MIN_HEAD_YAW, MAX_HEAD_YAW); } diff --git a/interface/src/avatar/Head.h b/interface/src/avatar/Head.h index 0409ee3295..1cdfdaf5a3 100644 --- a/interface/src/avatar/Head.h +++ b/interface/src/avatar/Head.h @@ -95,6 +95,9 @@ public: void setDeltaRoll(float roll) { _deltaRoll = roll; } float getDeltaRoll() const { return _deltaRoll; } + virtual void setFinalYaw(float finalYaw); + virtual void setFinalPitch(float finalPitch); + virtual void setFinalRoll(float finalRoll); virtual float getFinalPitch() const; virtual float getFinalYaw() const; virtual float getFinalRoll() const; diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 0ec008d0cd..ddd032e91e 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -153,7 +153,8 @@ QByteArray AvatarData::toByteArray() { destinationBuffer += packFloatAngleToTwoByte(destinationBuffer, _bodyYaw); destinationBuffer += packFloatAngleToTwoByte(destinationBuffer, _bodyPitch); destinationBuffer += packFloatAngleToTwoByte(destinationBuffer, _bodyRoll); - + + // Body scale destinationBuffer += packFloatRatioToTwoByte(destinationBuffer, _targetScale); @@ -793,6 +794,9 @@ void AvatarData::setJointRotations(QVector jointRotations) { "setJointRotations", Qt::BlockingQueuedConnection, Q_ARG(QVector, jointRotations)); } + if (_jointData.size() < jointRotations.size()) { + _jointData.resize(jointRotations.size()); + } for (int i = 0; i < jointRotations.size(); ++i) { if (i < _jointData.size()) { setJointData(i, jointRotations[i]); diff --git a/libraries/avatars/src/HeadData.h b/libraries/avatars/src/HeadData.h index 310437689c..7e27365387 100644 --- a/libraries/avatars/src/HeadData.h +++ b/libraries/avatars/src/HeadData.h @@ -41,6 +41,10 @@ public: void setBasePitch(float pitch) { _basePitch = glm::clamp(pitch, MIN_HEAD_PITCH, MAX_HEAD_PITCH); } float getBaseRoll() const { return _baseRoll; } void setBaseRoll(float roll) { _baseRoll = glm::clamp(roll, MIN_HEAD_ROLL, MAX_HEAD_ROLL); } + + virtual void setFinalYaw(float finalYaw) { _baseYaw = finalYaw; } + virtual void setFinalPitch(float finalPitch) { _basePitch = finalPitch; } + virtual void setFinalRoll(float finalRoll) { _baseRoll = finalRoll; } virtual float getFinalYaw() const { return _baseYaw; } virtual float getFinalPitch() const { return _basePitch; } virtual float getFinalRoll() const { return _baseRoll; } diff --git a/libraries/avatars/src/Recorder.cpp b/libraries/avatars/src/Recorder.cpp index 502b10a460..2c35790b2e 100644 --- a/libraries/avatars/src/Recorder.cpp +++ b/libraries/avatars/src/Recorder.cpp @@ -229,11 +229,6 @@ void Player::startPlaying() { _audioThread->start(); QMetaObject::invokeMethod(_injector.data(), "injectAudio", Qt::QueuedConnection); - // Save head orientation - if (_avatar->getHeadData()) { - _originalHeadOrientation = _avatar->getHeadOrientation(); - } - _timer.start(); } } @@ -258,11 +253,6 @@ void Player::stopPlaying() { _injector.clear(); _audioThread = NULL; - // Restore head orientation - if (_avatar->getHeadData()) { - _avatar->setHeadOrientation(_originalHeadOrientation); - } - qDebug() << "Recorder::stopPlaying()"; } @@ -307,9 +297,9 @@ void Player::play() { head->setLeanSideways(_recording->getFrame(_currentFrame).getLeanSideways()); head->setLeanForward(_recording->getFrame(_currentFrame).getLeanForward()); glm::vec3 eulers = glm::degrees(safeEulerAngles(_recording->getFrame(_currentFrame).getHeadRotation())); - head->setBasePitch(eulers.x); - head->setBaseYaw(eulers.y); - head->setBaseRoll(eulers.z); + head->setFinalPitch(eulers.x); + head->setFinalYaw(eulers.y); + head->setFinalRoll(eulers.z); } _options.setPosition(_avatar->getPosition()); diff --git a/libraries/avatars/src/Recorder.h b/libraries/avatars/src/Recorder.h index caf6cb665c..770027a21d 100644 --- a/libraries/avatars/src/Recorder.h +++ b/libraries/avatars/src/Recorder.h @@ -162,8 +162,6 @@ private: QSharedPointer _injector; AudioInjectorOptions _options; - glm::quat _originalHeadOrientation; - AvatarData* _avatar; QThread* _audioThread; };