got the spline arms and legs working without any inverse kinematic node in the json, using _withIKnode.json

This commit is contained in:
amantley 2019-01-22 11:53:18 -08:00
parent 8d88c627b0
commit dbd03e2eb4
4 changed files with 2260 additions and 2 deletions

File diff suppressed because it is too large Load diff

View file

@ -886,7 +886,8 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars
if (dt > MAX_OVERLAY_DT) {
dt = MAX_OVERLAY_DT;
}
loadPoses(underPoses);
/*
if (_relativePoses.size() != underPoses.size()) {
loadPoses(underPoses);
} else {
@ -1054,7 +1055,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars
}
processOutputJoints(triggersOut);
*/
return _relativePoses;
}

View file

@ -40,6 +40,12 @@ AnimSplineIK::~AnimSplineIK() {
}
//virtual
const AnimPoseVec& AnimSplineIK::overlay(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut, const AnimPoseVec& underPoses) {
loadPoses(underPoses);
return _poses;
}
const AnimPoseVec& AnimSplineIK::evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) {
assert(_children.size() == 1);
if (_children.size() != 1) {
@ -444,4 +450,13 @@ void AnimSplineIK::computeAndCacheSplineJointInfosForIKTarget(const AnimContext&
}
_splineJointInfoMap[target.getIndex()] = splineJointInfoVec;
}
void AnimSplineIK ::loadPoses(const AnimPoseVec& poses) {
assert(_skeleton && ((poses.size() == 0) || (_skeleton->getNumJoints() == (int)poses.size())));
if (_skeleton->getNumJoints() == (int)poses.size()) {
_poses = poses;
} else {
_poses.clear();
}
}

View file

@ -25,6 +25,7 @@ public:
virtual ~AnimSplineIK() override;
virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override;
virtual const AnimPoseVec& overlay(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut, const AnimPoseVec& underPoses) override;
protected:
@ -36,6 +37,7 @@ protected:
};
void computeAbsolutePoses(AnimPoseVec& absolutePoses) const;
void loadPoses(const AnimPoseVec& poses);
// for AnimDebugDraw rendering
virtual const AnimPoseVec& getPosesInternal() const override;