From 0a295fc258e9cdb620edd4b459630efe6dd4745f Mon Sep 17 00:00:00 2001 From: kunalgosar Date: Fri, 14 Apr 2017 13:56:13 -0700 Subject: [PATCH] setBlendshapes will presist --- interface/src/avatar/SkeletonModel.cpp | 2 +- libraries/avatars/src/AvatarData.cpp | 1 + libraries/avatars/src/AvatarData.h | 6 ++++++ libraries/avatars/src/HeadData.cpp | 13 ++++++++++--- libraries/avatars/src/HeadData.h | 2 ++ libraries/render-utils/src/Model.cpp | 1 + 6 files changed, 21 insertions(+), 4 deletions(-) diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index 0c11fa456d..9f13efe3b8 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -242,7 +242,7 @@ void SkeletonModel::updateAttitude() { void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { updateAttitude(); if (fullUpdate) { - setBlendshapeCoefficients(_owningAvatar->getHead()->getBlendshapeCoefficients()); + setBlendshapeCoefficients(_owningAvatar->getHead()->getSummedBlendshapeCoefficients()); Model::simulate(deltaTime, fullUpdate); diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 9802630cf5..20894104ff 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -967,6 +967,7 @@ int AvatarData::parseDataFromBuffer(const QByteArray& buffer) { const int coefficientsSize = sizeof(float) * numCoefficients; PACKET_READ_CHECK(FaceTrackerCoefficients, coefficientsSize); _headData->_blendshapeCoefficients.resize(numCoefficients); // make sure there's room for the copy! + _headData->_baseBlendshapeCoefficients.resize(numCoefficients); memcpy(_headData->_blendshapeCoefficients.data(), sourceBuffer, coefficientsSize); sourceBuffer += coefficientsSize; int numBytesRead = sourceBuffer - startSection; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index 8319eb5249..79bcac5fcc 100644 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -438,6 +438,12 @@ public: _headData->setBlendshapeCoefficients(blendshapeCoefficients); } } + + void setSummedBlendshapeCoefficients(QVector& blendshapeCoefficients) { + if (_headData) { + _headData->setSummedBlendshapeCoefficients(blendshapeCoefficients); + } + } // access to Head().set/getMousePitch (degrees) float getHeadPitch() const { return _headData->getBasePitch(); } diff --git a/libraries/avatars/src/HeadData.cpp b/libraries/avatars/src/HeadData.cpp index 909c6a613e..59b1a209e7 100644 --- a/libraries/avatars/src/HeadData.cpp +++ b/libraries/avatars/src/HeadData.cpp @@ -38,7 +38,8 @@ HeadData::HeadData(AvatarData* owningAvatar) : _rightEyeBlink(0.0f), _averageLoudness(0.0f), _browAudioLift(0.0f), - _owningAvatar(owningAvatar) + _owningAvatar(owningAvatar), + _baseBlendshapeCoefficients(0, 0), { } @@ -86,17 +87,23 @@ static const QMap& getBlendshapesLookupMap() { return blendshapeLookupMap; } +const QVector& HeadData::getSummedBlendshapeCoefficients() { + for (int i = 0; i < _baseBlendshapeCoefficients.size(); i++) { + _blendshapeCoefficients[i] += _baseBlendshapeCoefficients[i]; + } + return _blendshapeCoefficients; +} void HeadData::setBlendshape(QString name, float val) { const auto& blendshapeLookupMap = getBlendshapesLookupMap(); - //Check to see if the named blendshape exists, and then set its value if it does auto it = blendshapeLookupMap.find(name); if (it != blendshapeLookupMap.end()) { if (_blendshapeCoefficients.size() <= it.value()) { _blendshapeCoefficients.resize(it.value() + 1); + _baseBlendshapeCoefficients.resize(it.value() + 1); } - _blendshapeCoefficients[it.value()] = val; + _baseBlendshapeCoefficients[it.value()] = val; } } diff --git a/libraries/avatars/src/HeadData.h b/libraries/avatars/src/HeadData.h index 6c468daefd..ec542fe6a1 100644 --- a/libraries/avatars/src/HeadData.h +++ b/libraries/avatars/src/HeadData.h @@ -59,6 +59,7 @@ public: void setBlendshape(QString name, float val); const QVector& getBlendshapeCoefficients() const { return _blendshapeCoefficients; } + const QVector& getSummedBlendshapeCoefficients(); void setBlendshapeCoefficients(const QVector& blendshapeCoefficients) { _blendshapeCoefficients = blendshapeCoefficients; } const glm::vec3& getLookAtPosition() const { return _lookAtPosition; } @@ -92,6 +93,7 @@ protected: float _browAudioLift; QVector _blendshapeCoefficients; + QVector _baseBlendshapeCoefficients; AvatarData* _owningAvatar; private: diff --git a/libraries/render-utils/src/Model.cpp b/libraries/render-utils/src/Model.cpp index c274d69af6..ec82b0f606 100644 --- a/libraries/render-utils/src/Model.cpp +++ b/libraries/render-utils/src/Model.cpp @@ -901,6 +901,7 @@ Blender::Blender(ModelPointer model, int blendNumber, const Geometry::WeakPointe } void Blender::run() { + qDebug() << "!!!!!!!!!!!!!!" << _blendshapeCoefficients; PROFILE_RANGE_EX(simulation_animation, __FUNCTION__, 0xFFFF0000, 0, { { "url", _model->getURL().toString() } }); QVector vertices, normals; if (_model) {