diff --git a/libraries/animation/src/AnimSkeleton.cpp b/libraries/animation/src/AnimSkeleton.cpp index c5e6241555..b124f55641 100644 --- a/libraries/animation/src/AnimSkeleton.cpp +++ b/libraries/animation/src/AnimSkeleton.cpp @@ -54,7 +54,6 @@ AnimSkeleton::AnimSkeleton(const HFMModel& hfmModel) { } _clusterBindMatrixOriginalValues.push_back(dummyClustersList); } - //dump(false); } AnimSkeleton::AnimSkeleton(const std::vector& joints, const QMap jointOffsets) { @@ -208,51 +207,6 @@ void AnimSkeleton::mirrorAbsolutePoses(AnimPoseVec& poses) const { } } -bool AnimSkeleton::checkNonMirrored(QString jointName) const { - - if (_fbxToHifiJointNameMapping.contains(_fbxToHifiJointNameMapping.key(jointName))) { - jointName = _fbxToHifiJointNameMapping.key(jointName); - } - // check the unmapped name - if (jointName != "Hips" && jointName != "Spine" && - jointName != "Spine1" && jointName != "Spine2" && - jointName != "Neck" && jointName != "Head" && - !((jointName.startsWith("Left") || jointName.startsWith("Right")) && - jointName != "LeftEye" && jointName != "RightEye")) { - return true; - } else { - return false; - } -} - -int AnimSkeleton::containsLeft(QString jointName) const { - int mirrorJointIndex = -1; - if (_fbxToHifiJointNameMapping.contains(_fbxToHifiJointNameMapping.key(jointName))) { - jointName = _fbxToHifiJointNameMapping.key(jointName); - } - if (mirrorJointIndex < 0) { - if (jointName.startsWith("Left")) { - QString mirrorJointName = QString(jointName).replace(0, 4, "Right"); - mirrorJointIndex = nameToJointIndex(mirrorJointName); - } - } - return mirrorJointIndex; -} - -int AnimSkeleton::containsRight(QString jointName) const { - int mirrorJointIndex = -1; - if (_fbxToHifiJointNameMapping.contains(_fbxToHifiJointNameMapping.key(jointName))) { - jointName = _fbxToHifiJointNameMapping.key(jointName); - } - if (mirrorJointIndex < 0) { - if (jointName.startsWith("Right")) { - QString mirrorJointName = QString(jointName).replace(0, 5, "Left"); - mirrorJointIndex = nameToJointIndex(mirrorJointName); - } - } - return mirrorJointIndex; -} - void AnimSkeleton::buildSkeletonFromJoints(const std::vector& joints, const QMap jointOffsets) { _joints = joints; @@ -304,15 +258,26 @@ void AnimSkeleton::buildSkeletonFromJoints(const std::vector& joints, _nonMirroredIndices.clear(); _mirrorMap.reserve(_jointsSize); for (int i = 0; i < _jointsSize; i++) { - if (checkNonMirrored(_joints[i].name)) { + QString jointName = _joints[i].name; + if (_fbxToHifiJointNameMapping.contains(_fbxToHifiJointNameMapping.key(jointName))) { + jointName = _fbxToHifiJointNameMapping.key(jointName); + } + if (jointName != "Hips" && jointName != "Spine" && + jointName != "Spine1" && jointName != "Spine2" && + jointName != "Neck" && jointName != "Head" && + !((jointName.startsWith("Left") || jointName.startsWith("Right")) && + jointName != "LeftEye" && jointName != "RightEye")) { // HACK: we don't want to mirror some joints so we remember their indices // so we can restore them after a future mirror operation _nonMirroredIndices.push_back(i); } int mirrorJointIndex = -1; - mirrorJointIndex = containsLeft(_joints[i].name); - if (mirrorJointIndex < 0) { - mirrorJointIndex = containsRight(_joints[i].name); + if (jointName.startsWith("Left")) { + QString mirrorJointName = QString(jointName).replace(0, 4, "Right"); + mirrorJointIndex = nameToJointIndex(mirrorJointName); + } else if (jointName.startsWith("Right")) { + QString mirrorJointName = QString(jointName).replace(0, 5, "Left"); + mirrorJointIndex = nameToJointIndex(mirrorJointName); } if (mirrorJointIndex >= 0) { _mirrorMap.push_back(mirrorJointIndex); diff --git a/libraries/animation/src/AnimSkeleton.h b/libraries/animation/src/AnimSkeleton.h index 5581976d74..50b5d25c63 100644 --- a/libraries/animation/src/AnimSkeleton.h +++ b/libraries/animation/src/AnimSkeleton.h @@ -56,9 +56,6 @@ public: void saveNonMirroredPoses(const AnimPoseVec& poses) const; void restoreNonMirroredPoses(AnimPoseVec& poses) const; - bool checkNonMirrored(QString jointName) const; - int containsLeft(QString jointName) const; - int containsRight(QString jointName) const; void mirrorRelativePoses(AnimPoseVec& poses) const; void mirrorAbsolutePoses(AnimPoseVec& poses) const; @@ -67,7 +64,6 @@ public: std::vector lookUpJointIndices(const std::vector& jointNames) const; const HFMCluster getClusterBindMatricesOriginalValues(const int meshIndex, const int clusterIndex) const { return _clusterBindMatrixOriginalValues[meshIndex][clusterIndex]; } - const QMap getFBXToHifiJointNameMapping() const { return _fbxToHifiJointNameMapping; } protected: void buildSkeletonFromJoints(const std::vector& joints, const QMap jointOffsets); diff --git a/libraries/animation/src/Rig.cpp b/libraries/animation/src/Rig.cpp index 5e2610e37e..128ac05b81 100644 --- a/libraries/animation/src/Rig.cpp +++ b/libraries/animation/src/Rig.cpp @@ -363,6 +363,7 @@ void Rig::reset(const HFMModel& hfmModel) { _animSkeleton = std::make_shared(hfmModel); + _internalPoseSet._relativePoses.clear(); _internalPoseSet._relativePoses = _animSkeleton->getRelativeDefaultPoses(); @@ -420,11 +421,7 @@ static const uint32_t MAX_JOINT_NAME_WARNING_COUNT = 100; int Rig::indexOfJoint(const QString& jointName) const { if (_animSkeleton) { - int result = _animSkeleton->nameToJointIndex(jointName); - if (_animSkeleton->getFBXToHifiJointNameMapping().contains(jointName)) { - result = _animSkeleton->nameToJointIndex(jointName); - } // This is a content error, so we should issue a warning. if (result < 0 && _jointNameWarningCount < MAX_JOINT_NAME_WARNING_COUNT) {