added the flex coeff for the primary and secondary spline targets to the json

This commit is contained in:
amantley 2019-01-25 14:41:18 -08:00
parent 992820cd67
commit 446d7b9514
4 changed files with 44 additions and 7 deletions

View file

@ -193,7 +193,9 @@
"alphaVar": "splineIKAlpha", "alphaVar": "splineIKAlpha",
"enabledVar": "splineIKEnabled", "enabledVar": "splineIKEnabled",
"endEffectorRotationVarVar": "splineIKRotationVar", "endEffectorRotationVarVar": "splineIKRotationVar",
"endEffectorPositionVarVar": "splineIKPositionVar" "endEffectorPositionVarVar": "splineIKPositionVar",
"primaryFlexCoefficients": "1, 0.5, 0.25, 0.2, 0.1",
"secondaryFlexCoefficients": "1.0, 0.5, 0.25"
}, },
"children": [ "children": [
{ {

View file

@ -596,12 +596,15 @@ static AnimNode::Pointer loadSplineIKNode(const QJsonObject& jsonObj, const QStr
READ_STRING(enabledVar, jsonObj, id, jsonUrl, nullptr); READ_STRING(enabledVar, jsonObj, id, jsonUrl, nullptr);
READ_STRING(endEffectorRotationVarVar, jsonObj, id, jsonUrl, nullptr); READ_STRING(endEffectorRotationVarVar, jsonObj, id, jsonUrl, nullptr);
READ_STRING(endEffectorPositionVarVar, jsonObj, id, jsonUrl, nullptr); READ_STRING(endEffectorPositionVarVar, jsonObj, id, jsonUrl, nullptr);
READ_STRING(primaryFlexCoefficients, jsonObj, id, jsonUrl, nullptr);
READ_STRING(secondaryFlexCoefficients, jsonObj, id, jsonUrl, nullptr);
auto node = std::make_shared<AnimSplineIK>(id, alpha, enabled, interpDuration, auto node = std::make_shared<AnimSplineIK>(id, alpha, enabled, interpDuration,
baseJointName, tipJointName, baseJointName, tipJointName,
alphaVar, enabledVar, endEffectorRotationVarVar, endEffectorPositionVarVar, alphaVar, enabledVar, endEffectorRotationVarVar, endEffectorPositionVarVar,
basePositionVar, baseRotationVar, basePositionVar, baseRotationVar,
tipPositionVar, tipRotationVar, secondaryTargetJointName, secondaryTargetPositionVar, secondaryTargetRotationVar); tipPositionVar, tipRotationVar, secondaryTargetJointName, secondaryTargetPositionVar,
secondaryTargetRotationVar, primaryFlexCoefficients, secondaryFlexCoefficients);
return node; return node;
} }

View file

@ -28,7 +28,9 @@ AnimSplineIK::AnimSplineIK(const QString& id, float alpha, bool enabled, float i
const QString& tipRotationVar, const QString& tipRotationVar,
const QString& secondaryTargetJointName, const QString& secondaryTargetJointName,
const QString& secondaryTargetPositionVar, const QString& secondaryTargetPositionVar,
const QString& secondaryTargetRotationVar) : const QString& secondaryTargetRotationVar,
const QString& primaryFlexCoefficients,
const QString& secondaryFlexCoefficients) :
AnimNode(AnimNode::Type::SplineIK, id), AnimNode(AnimNode::Type::SplineIK, id),
_alpha(alpha), _alpha(alpha),
_enabled(enabled), _enabled(enabled),
@ -47,8 +49,25 @@ AnimSplineIK::AnimSplineIK(const QString& id, float alpha, bool enabled, float i
_tipRotationVar(tipRotationVar), _tipRotationVar(tipRotationVar),
_secondaryTargetJointName(secondaryTargetJointName), _secondaryTargetJointName(secondaryTargetJointName),
_secondaryTargetPositionVar(secondaryTargetPositionVar), _secondaryTargetPositionVar(secondaryTargetPositionVar),
_secondaryTargetRotationVar(secondaryTargetRotationVar) _secondaryTargetRotationVar(secondaryTargetRotationVar)
{ {
QStringList flexCoefficientsValues = primaryFlexCoefficients.split(',', QString::SkipEmptyParts);
for (int i = 0; i < flexCoefficientsValues.size(); i++) {
if (i < MAX_NUMBER_FLEX_VARIABLES) {
qCDebug(animation) << "flex value " << flexCoefficientsValues[i].toDouble();
_primaryFlexCoefficients[i] = (float)flexCoefficientsValues[i].toDouble();
}
}
_numPrimaryFlexCoefficients = std::min(flexCoefficientsValues.size(), MAX_NUMBER_FLEX_VARIABLES);
QStringList secondaryFlexCoefficientsValues = secondaryFlexCoefficients.split(',', QString::SkipEmptyParts);
for (int i = 0; i < secondaryFlexCoefficientsValues.size(); i++) {
if (i < MAX_NUMBER_FLEX_VARIABLES) {
qCDebug(animation) << "secondaryflex value " << secondaryFlexCoefficientsValues[i].toDouble();
_secondaryFlexCoefficients[i] = (float)secondaryFlexCoefficientsValues[i].toDouble();
}
}
_numSecondaryFlexCoefficients = std::min(secondaryFlexCoefficientsValues.size(), MAX_NUMBER_FLEX_VARIABLES);
} }
@ -145,8 +164,11 @@ const AnimPoseVec& AnimSplineIK::evaluate(const AnimVariantMap& animVars, const
target.setPose(rotation, translation); target.setPose(rotation, translation);
target.setWeight(weight); target.setWeight(weight);
const float* flexCoefficients = new float[5]{ 1.0f, 0.5f, 0.25f, 0.2f, 0.1f }; const float* flexCoefficients = new float[5]{ 1.0f, 0.5f, 0.25f, 0.2f, 0.1f };
target.setFlexCoefficients(5, flexCoefficients); target.setFlexCoefficients(_numPrimaryFlexCoefficients, _primaryFlexCoefficients);
} }
AnimChain jointChain; AnimChain jointChain;
@ -182,7 +204,7 @@ const AnimPoseVec& AnimSplineIK::evaluate(const AnimVariantMap& animVars, const
secondaryTarget.setWeight(weight2); secondaryTarget.setWeight(weight2);
const float* flexCoefficients2 = new float[3]{ 1.0f, 0.5f, 0.25f }; const float* flexCoefficients2 = new float[3]{ 1.0f, 0.5f, 0.25f };
secondaryTarget.setFlexCoefficients(3, flexCoefficients2); secondaryTarget.setFlexCoefficients(_numSecondaryFlexCoefficients, _secondaryFlexCoefficients);
} }
AnimChain secondaryJointChain; AnimChain secondaryJointChain;

View file

@ -26,7 +26,9 @@ public:
const QString& tipPositionVar, const QString& tipRotationVar, const QString& tipPositionVar, const QString& tipRotationVar,
const QString& secondaryTargetJointName, const QString& secondaryTargetJointName,
const QString& secondaryTargetPositionVar, const QString& secondaryTargetPositionVar,
const QString& secondaryTargetRotationVar); const QString& secondaryTargetRotationVar,
const QString& primaryFlexCoefficients,
const QString& secondaryFlexCoefficients);
virtual ~AnimSplineIK() override; virtual ~AnimSplineIK() override;
virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override; virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override;
@ -65,6 +67,14 @@ protected:
QString _tipRotationVar; QString _tipRotationVar;
QString _secondaryTargetPositionVar; QString _secondaryTargetPositionVar;
QString _secondaryTargetRotationVar; QString _secondaryTargetRotationVar;
//QString _primaryFlexCoefficients;
//QString _secondaryFlexCoefficients;
static const int MAX_NUMBER_FLEX_VARIABLES = 10;
float _primaryFlexCoefficients[MAX_NUMBER_FLEX_VARIABLES];
float _secondaryFlexCoefficients[MAX_NUMBER_FLEX_VARIABLES];
int _numPrimaryFlexCoefficients { 0 };
int _numSecondaryFlexCoefficients { 0 };
int _baseParentJointIndex { -1 }; int _baseParentJointIndex { -1 };
int _baseJointIndex { -1 }; int _baseJointIndex { -1 };