From 485e36d824c5d843beec47cde01c525ba272ddca Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Mon, 26 Oct 2015 17:11:46 -0700 Subject: [PATCH] Bug fix for hand IK when using the Owen avatar. The IK was assiming that the "Hips" bone index was always 0. This was not the case for Owen. Now we lookup the Hips index and cache it for use during the hipsOffset computation. --- libraries/animation/src/AnimInverseKinematics.cpp | 4 +++- libraries/animation/src/AnimInverseKinematics.h | 1 + 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/libraries/animation/src/AnimInverseKinematics.cpp b/libraries/animation/src/AnimInverseKinematics.cpp index 516d4116d8..42e9472819 100644 --- a/libraries/animation/src/AnimInverseKinematics.cpp +++ b/libraries/animation/src/AnimInverseKinematics.cpp @@ -366,7 +366,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars if (offsetLength > MIN_HIPS_OFFSET_LENGTH) { // but only if offset is long enough float scaleFactor = ((offsetLength - MIN_HIPS_OFFSET_LENGTH) / offsetLength); - _relativePoses[0].trans = underPoses[0].trans + scaleFactor * _hipsOffset; + _relativePoses[_hipsIndex].trans = underPoses[_hipsIndex].trans + scaleFactor * _hipsOffset; } solveWithCyclicCoordinateDescent(targets); @@ -758,8 +758,10 @@ void AnimInverseKinematics::setSkeletonInternal(AnimSkeleton::ConstPointer skele if (skeleton) { initConstraints(); _headIndex = _skeleton->nameToJointIndex("Head"); + _hipsIndex = _skeleton->nameToJointIndex("Hips"); } else { clearConstraints(); _headIndex = -1; + _hipsIndex = -1; } } diff --git a/libraries/animation/src/AnimInverseKinematics.h b/libraries/animation/src/AnimInverseKinematics.h index b96dd3711e..f8f7fd9e9e 100644 --- a/libraries/animation/src/AnimInverseKinematics.h +++ b/libraries/animation/src/AnimInverseKinematics.h @@ -80,6 +80,7 @@ protected: // experimental data for moving hips during IK int _headIndex = -1; + int _hipsIndex = -1; glm::vec3 _hipsOffset = Vectors::ZERO; // _maxTargetIndex is tracked to help optimize the recalculation of absolute poses