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",
"enabledVar": "splineIKEnabled",
"endEffectorRotationVarVar": "splineIKRotationVar",
"endEffectorPositionVarVar": "splineIKPositionVar"
"endEffectorPositionVarVar": "splineIKPositionVar",
"primaryFlexCoefficients": "1, 0.5, 0.25, 0.2, 0.1",
"secondaryFlexCoefficients": "1.0, 0.5, 0.25"
},
"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(endEffectorRotationVarVar, 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,
baseJointName, tipJointName,
alphaVar, enabledVar, endEffectorRotationVarVar, endEffectorPositionVarVar,
basePositionVar, baseRotationVar,
tipPositionVar, tipRotationVar, secondaryTargetJointName, secondaryTargetPositionVar, secondaryTargetRotationVar);
tipPositionVar, tipRotationVar, secondaryTargetJointName, secondaryTargetPositionVar,
secondaryTargetRotationVar, primaryFlexCoefficients, secondaryFlexCoefficients);
return node;
}

View file

@ -28,7 +28,9 @@ AnimSplineIK::AnimSplineIK(const QString& id, float alpha, bool enabled, float i
const QString& tipRotationVar,
const QString& secondaryTargetJointName,
const QString& secondaryTargetPositionVar,
const QString& secondaryTargetRotationVar) :
const QString& secondaryTargetRotationVar,
const QString& primaryFlexCoefficients,
const QString& secondaryFlexCoefficients) :
AnimNode(AnimNode::Type::SplineIK, id),
_alpha(alpha),
_enabled(enabled),
@ -47,8 +49,25 @@ AnimSplineIK::AnimSplineIK(const QString& id, float alpha, bool enabled, float i
_tipRotationVar(tipRotationVar),
_secondaryTargetJointName(secondaryTargetJointName),
_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.setWeight(weight);
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;
@ -182,7 +204,7 @@ const AnimPoseVec& AnimSplineIK::evaluate(const AnimVariantMap& animVars, const
secondaryTarget.setWeight(weight2);
const float* flexCoefficients2 = new float[3]{ 1.0f, 0.5f, 0.25f };
secondaryTarget.setFlexCoefficients(3, flexCoefficients2);
secondaryTarget.setFlexCoefficients(_numSecondaryFlexCoefficients, _secondaryFlexCoefficients);
}
AnimChain secondaryJointChain;

View file

@ -26,7 +26,9 @@ public:
const QString& tipPositionVar, const QString& tipRotationVar,
const QString& secondaryTargetJointName,
const QString& secondaryTargetPositionVar,
const QString& secondaryTargetRotationVar);
const QString& secondaryTargetRotationVar,
const QString& primaryFlexCoefficients,
const QString& secondaryFlexCoefficients);
virtual ~AnimSplineIK() override;
virtual const AnimPoseVec& evaluate(const AnimVariantMap& animVars, const AnimContext& context, float dt, AnimVariantMap& triggersOut) override;
@ -65,6 +67,14 @@ protected:
QString _tipRotationVar;
QString _secondaryTargetPositionVar;
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 _baseJointIndex { -1 };