mirror of
https://github.com/lubosz/overte.git
synced 2025-04-14 06:46:19 +02:00
nearly have the arms legs and back working with out the ik node
This commit is contained in:
parent
6680ca53ad
commit
8d88c627b0
6 changed files with 1773 additions and 1762 deletions
File diff suppressed because it is too large
Load diff
|
@ -4679,7 +4679,6 @@ void setupCpuMonitorThread() {
|
|||
|
||||
void Application::idle() {
|
||||
PerformanceTimer perfTimer("idle");
|
||||
qCDebug(interfaceapp) << "idle called";
|
||||
// Update the deadlock watchdog
|
||||
updateHeartbeat();
|
||||
|
||||
|
|
|
@ -886,7 +886,7 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars
|
|||
if (dt > MAX_OVERLAY_DT) {
|
||||
dt = MAX_OVERLAY_DT;
|
||||
}
|
||||
|
||||
|
||||
if (_relativePoses.size() != underPoses.size()) {
|
||||
loadPoses(underPoses);
|
||||
} else {
|
||||
|
@ -973,8 +973,8 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars
|
|||
::blend(1, &prevHipsAbsPose, &absPose, alpha, &absPose);
|
||||
}
|
||||
|
||||
_relativePoses[_hipsIndex] = parentAbsPose.inverse() * absPose;
|
||||
_relativePoses[_hipsIndex].scale() = glm::vec3(1.0f);
|
||||
//_relativePoses[_hipsIndex] = parentAbsPose.inverse() * absPose;
|
||||
//_relativePoses[_hipsIndex].scale() = glm::vec3(1.0f);
|
||||
}
|
||||
|
||||
// if there is an active jointChainInfo for the hips store the post shifted hips into it.
|
||||
|
@ -1041,10 +1041,13 @@ const AnimPoseVec& AnimInverseKinematics::overlay(const AnimVariantMap& animVars
|
|||
|
||||
preconditionRelativePosesToAvoidLimbLock(context, targets);
|
||||
|
||||
solve(context, targets, dt, jointChainInfoVec);
|
||||
//qCDebug(animation) << "hips before ccd" << _relativePoses[_hipsIndex];
|
||||
//solve(context, targets, dt, jointChainInfoVec);
|
||||
//qCDebug(animation) << "hips after ccd" << _relativePoses[_hipsIndex];
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (context.getEnableDebugDrawIKConstraints()) {
|
||||
debugDrawConstraints(context);
|
||||
}
|
||||
|
|
|
@ -48,6 +48,22 @@ const AnimPoseVec& AnimSplineIK::evaluate(const AnimVariantMap& animVars, const
|
|||
// evalute underPoses
|
||||
AnimPoseVec underPoses = _children[0]->evaluate(animVars, context, dt, triggersOut);
|
||||
_poses = underPoses;
|
||||
|
||||
// now we override the hips relative pose based on the hips target that has been set.
|
||||
////////////////////////////////////////////////////
|
||||
if (_poses.size() > 0) {
|
||||
AnimPose hipsUnderPose = _skeleton->getAbsolutePose(_hipsIndex, _poses);
|
||||
glm::quat hipsTargetRotation = animVars.lookupRigToGeometry("hipsRotation", hipsUnderPose.rot());
|
||||
glm::vec3 hipsTargetTranslation = animVars.lookupRigToGeometry("hipsPosition", hipsUnderPose.trans());
|
||||
AnimPose absHipsTargetPose(hipsTargetRotation, hipsTargetTranslation);
|
||||
|
||||
int hipsParentIndex = _skeleton->getParentIndex(_hipsIndex);
|
||||
AnimPose hipsParentAbsPose = _skeleton->getAbsolutePose(hipsParentIndex, _poses);
|
||||
|
||||
_poses[_hipsIndex] = hipsParentAbsPose.inverse() * absHipsTargetPose;
|
||||
_poses[_hipsIndex].scale() = glm::vec3(1.0f);
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// check to see if we actually need absolute poses.
|
||||
AnimPoseVec absolutePoses;
|
||||
|
@ -65,7 +81,7 @@ const AnimPoseVec& AnimSplineIK::evaluate(const AnimVariantMap& animVars, const
|
|||
AnimPose origSpine1 = _skeleton->getAbsolutePose(_skeleton->nameToJointIndex("Spine1"),_poses);
|
||||
//origSpine2PoseRel = origSpine1.inverse() * origSpine2;
|
||||
//qCDebug(animation) << "origSpine2Pose: " << origSpine2Pose.rot();
|
||||
qCDebug(animation) << "original relative spine2 " << origSpine2PoseAbs;
|
||||
//qCDebug(animation) << "original relative spine2 " << origSpine2PoseAbs;
|
||||
}
|
||||
|
||||
|
||||
|
@ -116,8 +132,8 @@ const AnimPoseVec& AnimSplineIK::evaluate(const AnimVariantMap& animVars, const
|
|||
targetSpine2 = AnimPose(rotation3, afterSolveSpine2.trans());
|
||||
finalSpine2 = afterSolveSpine1.inverse() * targetSpine2;
|
||||
|
||||
qCDebug(animation) << "relative spine2 after solve" << afterSolveSpine2Rel;
|
||||
qCDebug(animation) << "relative spine2 orig" << originalSpine2Relative;
|
||||
//qCDebug(animation) << "relative spine2 after solve" << afterSolveSpine2Rel;
|
||||
//qCDebug(animation) << "relative spine2 orig" << originalSpine2Relative;
|
||||
AnimPose latestSpine2Relative(originalSpine2Relative.rot(), afterSolveSpine2Rel.trans());
|
||||
//jointChain.setRelativePoseAtJointIndex(jointIndex2, finalSpine2);
|
||||
jointChain.outputRelativePoses(_poses);
|
||||
|
@ -146,7 +162,7 @@ const AnimPoseVec& AnimSplineIK::evaluate(const AnimVariantMap& animVars, const
|
|||
glm::quat rotation2 = animVars.lookupRigToGeometry("spine2Rotation", absPose2.rot());
|
||||
glm::vec3 translation2 = animVars.lookupRigToGeometry("spine2Position", absPose2.trans());
|
||||
float weight2 = animVars.lookup("spine2Weight", "2.0");
|
||||
qCDebug(animation) << "rig to geometry" << rotation2;
|
||||
// qCDebug(animation) << "rig to geometry" << rotation2;
|
||||
|
||||
//target2.setPose(rotation2, translation2);
|
||||
target2.setPose(targetSpine2.rot(), targetSpine2.trans());
|
||||
|
|
|
@ -79,6 +79,7 @@ const AnimPoseVec& AnimTwoBoneIK::evaluate(const AnimVariantMap& animVars, const
|
|||
|
||||
// determine if we should interpolate
|
||||
bool enabled = animVars.lookup(_enabledVar, _enabled);
|
||||
// qCDebug(animation) << "two bone var " << _enabledVar;
|
||||
if (enabled != _enabled) {
|
||||
AnimChain poseChain;
|
||||
poseChain.buildFromRelativePoses(_skeleton, _poses, _tipJointIndex);
|
||||
|
@ -91,7 +92,7 @@ const AnimPoseVec& AnimTwoBoneIK::evaluate(const AnimVariantMap& animVars, const
|
|||
_enabled = enabled;
|
||||
|
||||
// don't build chains or do IK if we are disabled & not interping.
|
||||
if (_interpType == InterpType::None){// && !enabled) {
|
||||
if (_interpType == InterpType::None && !enabled) {
|
||||
_poses = underPoses;
|
||||
return _poses;
|
||||
}
|
||||
|
@ -122,6 +123,7 @@ const AnimPoseVec& AnimTwoBoneIK::evaluate(const AnimVariantMap& animVars, const
|
|||
// First look in the triggers then look in the animVars, so we can follow output joints underneath us in the anim graph
|
||||
AnimPose targetPose(tipPose);
|
||||
if (triggersOut.hasKey(endEffectorRotationVar)) {
|
||||
qCDebug(animation) << " end effector variable " << endEffectorRotationVar << " is " << triggersOut.lookupRigToGeometry(endEffectorRotationVar, tipPose.rot());
|
||||
targetPose.rot() = triggersOut.lookupRigToGeometry(endEffectorRotationVar, tipPose.rot());
|
||||
} else if (animVars.hasKey(endEffectorRotationVar)) {
|
||||
targetPose.rot() = animVars.lookupRigToGeometry(endEffectorRotationVar, tipPose.rot());
|
||||
|
|
|
@ -1541,7 +1541,7 @@ void Rig::updateHands2(bool leftHandEnabled, bool rightHandEnabled, bool headEna
|
|||
int handJointIndex = _animSkeleton->nameToJointIndex("LeftHand");
|
||||
int elbowJointIndex = _animSkeleton->nameToJointIndex("LeftForeArm");
|
||||
int shoulderJointIndex = _animSkeleton->nameToJointIndex("LeftArm");
|
||||
int oppositeArmJointIndex = _animSkeleton->nameToJointIndex("LeftArm");
|
||||
int oppositeArmJointIndex = _animSkeleton->nameToJointIndex("RightArm");
|
||||
glm::vec3 poleVector;
|
||||
bool usePoleVector = calculateElbowPoleVector(handJointIndex, elbowJointIndex, shoulderJointIndex, oppositeArmJointIndex, poleVector);
|
||||
glm::vec3 sensorPoleVector = transformVectorFast(rigToSensorMatrix, poleVector);
|
||||
|
@ -1580,7 +1580,7 @@ void Rig::updateHands2(bool leftHandEnabled, bool rightHandEnabled, bool headEna
|
|||
int handJointIndex = _animSkeleton->nameToJointIndex("RightHand");
|
||||
int elbowJointIndex = _animSkeleton->nameToJointIndex("RightForeArm");
|
||||
int shoulderJointIndex = _animSkeleton->nameToJointIndex("RightArm");
|
||||
int oppositeArmJointIndex = _animSkeleton->nameToJointIndex("RightArm");
|
||||
int oppositeArmJointIndex = _animSkeleton->nameToJointIndex("LeftArm");
|
||||
glm::vec3 poleVector;
|
||||
bool usePoleVector = calculateElbowPoleVector(handJointIndex, elbowJointIndex, shoulderJointIndex, oppositeArmJointIndex, poleVector);
|
||||
glm::vec3 sensorPoleVector = transformVectorFast(rigToSensorMatrix, poleVector);
|
||||
|
@ -1856,10 +1856,10 @@ void Rig::updateFromControllerParameters(const ControllerParameters& params, flo
|
|||
|
||||
updateHead(_headEnabled, hipsEnabled, params.primaryControllerPoses[PrimaryControllerType_Head]);
|
||||
|
||||
updateHands(leftHandEnabled, rightHandEnabled, hipsEnabled, hipsEstimated, leftArmEnabled, rightArmEnabled, _headEnabled, dt,
|
||||
params.primaryControllerPoses[PrimaryControllerType_LeftHand], params.primaryControllerPoses[PrimaryControllerType_RightHand],
|
||||
params.hipsShapeInfo, params.spineShapeInfo, params.spine1ShapeInfo, params.spine2ShapeInfo,
|
||||
params.rigToSensorMatrix, sensorToRigMatrix);
|
||||
//updateHands(leftHandEnabled, rightHandEnabled, hipsEnabled, hipsEstimated, leftArmEnabled, rightArmEnabled, _headEnabled, dt,
|
||||
// params.primaryControllerPoses[PrimaryControllerType_LeftHand], params.primaryControllerPoses[PrimaryControllerType_RightHand],
|
||||
// params.hipsShapeInfo, params.spineShapeInfo, params.spine1ShapeInfo, params.spine2ShapeInfo,
|
||||
// params.rigToSensorMatrix, sensorToRigMatrix);
|
||||
|
||||
updateHands2(leftHandEnabled, rightHandEnabled, _headEnabled,
|
||||
params.primaryControllerPoses[PrimaryControllerType_LeftHand], params.primaryControllerPoses[PrimaryControllerType_RightHand],
|
||||
|
@ -1940,7 +1940,7 @@ void Rig::updateFromControllerParameters(const ControllerParameters& params, flo
|
|||
std::shared_ptr<AnimInverseKinematics> ikNode = getAnimInverseKinematicsNode();
|
||||
for (int i = 0; i < (int)NumSecondaryControllerTypes; i++) {
|
||||
int index = indexOfJoint(secondaryControllerJointNames[i]);
|
||||
if (index >= 0) {
|
||||
if ((index >= 0) && (ikNode)) {
|
||||
if (params.secondaryControllerFlags[i] & (uint8_t)ControllerFlags::Enabled) {
|
||||
ikNode->setSecondaryTargetInRigFrame(index, params.secondaryControllerPoses[i]);
|
||||
} else {
|
||||
|
|
Loading…
Reference in a new issue