From c0be32d35939ea15c5fb01511cbed6c9448564d3 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 2 Oct 2015 11:40:46 -0700 Subject: [PATCH] Fix for model offset when using Rig Animations. --- interface/src/avatar/SkeletonModel.cpp | 5 ++++- libraries/animation/src/Rig.cpp | 8 ++++---- libraries/animation/src/Rig.h | 2 +- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/SkeletonModel.cpp b/interface/src/avatar/SkeletonModel.cpp index c308f5f041..a892447961 100644 --- a/interface/src/avatar/SkeletonModel.cpp +++ b/interface/src/avatar/SkeletonModel.cpp @@ -247,7 +247,10 @@ void SkeletonModel::simulate(float deltaTime, bool fullUpdate) { hand->getLeftRightPalmIndices(leftPalmIndex, rightPalmIndex); // let rig compute the model offset - setOffset(_rig->getModelOffset()); + glm::vec3 modelOffset; + if (_rig->getModelOffset(modelOffset)) { + setOffset(modelOffset); + } // Don't Relax toward hand positions when in animGraph mode. if (!_rig->getEnableAnimGraph()) { diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 74108eade2..ee3ac0a05a 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -1203,11 +1203,11 @@ void Rig::initAnimGraph(const QUrl& url, const FBXGeometry& fbxGeometry) { }); } -glm::vec3 Rig::getModelOffset() const { +bool Rig::getModelOffset(glm::vec3& modelOffsetOut) const { if (_animSkeleton && _rootJointIndex >= 0) { - return -_animSkeleton->getAbsoluteBindPose(_rootJointIndex).trans; + modelOffsetOut = -_animSkeleton->getAbsoluteBindPose(_rootJointIndex).trans; + return true; } else { - const glm::vec3 DEFAULT_MODEL_OFFSET(0.0f, 0.0f, 0.0f); - return DEFAULT_MODEL_OFFSET; + return false; } } diff --git a/libraries/animation/src/Rig.h b/libraries/animation/src/Rig.h index 3ad2539da5..ef802e925d 100644 --- a/libraries/animation/src/Rig.h +++ b/libraries/animation/src/Rig.h @@ -204,7 +204,7 @@ public: AnimSkeleton::ConstPointer getAnimSkeleton() const { return _animSkeleton; } bool disableHands {false}; // should go away with rig animation (and Rig::inverseKinematics) - glm::vec3 getModelOffset() const; + bool getModelOffset(glm::vec3& modelOffsetOut) const; protected: