mirror of
https://github.com/lubosz/overte.git
synced 2025-04-14 02:06:15 +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",
|
||||
"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": [
|
||||
{
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
|
@ -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 };
|
||||
|
|
Loading…
Reference in a new issue