mirror of
https://github.com/overte-org/overte.git
synced 2025-08-09 15:29:32 +02:00
added the flex coeff for the primary and secondary spline targets to the json
This commit is contained in:
parent
992820cd67
commit
446d7b9514
4 changed files with 44 additions and 7 deletions
|
@ -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": [
|
||||||
{
|
{
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 };
|
||||||
|
|
Loading…
Reference in a new issue