From 75ec1428275dee7fa39ac2c347d559b7cc79ef64 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Mon, 14 Sep 2015 16:42:57 -0700 Subject: [PATCH] fix animation-tests --- .../animation/src/SwingTwistConstraint.cpp | 5 +++- .../animation/src/SwingTwistConstraint.h | 3 +++ .../src/AnimInverseKinematicsTests.cpp | 25 +++++++++++-------- .../animation/src/RotationConstraintTests.cpp | 4 +++ 4 files changed, 26 insertions(+), 11 deletions(-) diff --git a/libraries/animation/src/SwingTwistConstraint.cpp b/libraries/animation/src/SwingTwistConstraint.cpp index b788be5ce7..f9cea2abad 100644 --- a/libraries/animation/src/SwingTwistConstraint.cpp +++ b/libraries/animation/src/SwingTwistConstraint.cpp @@ -72,7 +72,7 @@ SwingTwistConstraint::SwingTwistConstraint() : _swingLimitFunction(), _minTwist(-PI), _maxTwist(PI), - _lastTwistBoundary(0) + _lastTwistBoundary(LAST_CLAMP_NO_BOUNDARY) { } @@ -249,3 +249,6 @@ bool SwingTwistConstraint::apply(glm::quat& rotation) const { return false; } +void SwingTwistConstraint::clearHistory() { + _lastTwistBoundary = LAST_CLAMP_NO_BOUNDARY; +} diff --git a/libraries/animation/src/SwingTwistConstraint.h b/libraries/animation/src/SwingTwistConstraint.h index 180127e1e1..155f72a518 100644 --- a/libraries/animation/src/SwingTwistConstraint.h +++ b/libraries/animation/src/SwingTwistConstraint.h @@ -73,6 +73,9 @@ public: /// \return reference to SwingLimitFunction instance for unit-testing const SwingLimitFunction& getSwingLimitFunction() const { return _swingLimitFunction; } + /// \brief exposed for unit testing + void clearHistory(); + protected: SwingLimitFunction _swingLimitFunction; float _minTwist; diff --git a/tests/animation/src/AnimInverseKinematicsTests.cpp b/tests/animation/src/AnimInverseKinematicsTests.cpp index 3958db1242..bb15a1d257 100644 --- a/tests/animation/src/AnimInverseKinematicsTests.cpp +++ b/tests/animation/src/AnimInverseKinematicsTests.cpp @@ -35,7 +35,6 @@ void makeTestFBXJoints(std::vector& fbxJoints) { joint.freeLineage.clear(); joint.parentIndex = -1; joint.distanceToParent = 1.0f; - joint.boneRadius = 1.0f; joint.translation = origin; // T joint.preTransform = glm::mat4(); // Roff * Rp @@ -96,11 +95,11 @@ void makeTestFBXJoints(std::vector& fbxJoints) { void AnimInverseKinematicsTests::testSingleChain() { std::vector fbxJoints; - AnimPose offset; - makeTestFBXJoints(fbxJoints, offset); + makeTestFBXJoints(fbxJoints); // create a skeleton and doll - AnimSkeleton* skeleton = new AnimSkeleton(fbxJoints); + AnimPose offset; + AnimSkeleton* skeleton = new AnimSkeleton(fbxJoints, offset); AnimSkeleton::Pointer skeletonPtr(skeleton); AnimInverseKinematics ikDoll("doll"); ikDoll.setSkeleton(skeletonPtr); @@ -130,10 +129,13 @@ void AnimInverseKinematicsTests::testSingleChain() { // // A------>B------>C------>D // - int indexD = 3; glm::vec3 targetPosition(2.0f, 1.0f, 0.0f); glm::quat targetRotation = glm::angleAxis(PI / 2.0f, zAxis); - ikDoll.updateTarget(indexD, targetPosition, targetRotation); + AnimVariantMap varMap; + varMap.set("positionD", targetPosition); + varMap.set("rotationD", targetRotation); + ikDoll.setTargetVars("D", "positionD", "rotationD"); + AnimNode::Triggers triggers; // the IK solution should be: // @@ -143,7 +145,7 @@ void AnimInverseKinematicsTests::testSingleChain() { // A------>B------>C // float dt = 1.0f; - ikDoll.evaluate(dt); + ikDoll.evaluate(varMap, dt, triggers); // verify absolute results // NOTE: since we expect this solution to converge very quickly (one loop) @@ -204,17 +206,20 @@ void AnimInverseKinematicsTests::testSingleChain() { // | // A------>B t // - int indexD = 3; glm::vec3 targetPosition(3.0f, 0.0f, 0.0f); glm::quat targetRotation = identity; - ikDoll.updateTarget(indexD, targetPosition, targetRotation); + AnimVariantMap varMap; + varMap.set("positionD", targetPosition); + varMap.set("rotationD", targetRotation); + ikDoll.setTargetVars("D", "positionD", "rotationD"); + AnimNode::Triggers triggers; // the IK solution should be: // // A------>B------>C------>D // float dt = 1.0f; - ikDoll.evaluate(dt); + ikDoll.evaluate(varMap, dt, triggers); // verify absolute results // NOTE: the IK algorithm doesn't converge very fast for full-reach targets, diff --git a/tests/animation/src/RotationConstraintTests.cpp b/tests/animation/src/RotationConstraintTests.cpp index 4aac875f2a..7aacf26826 100644 --- a/tests/animation/src/RotationConstraintTests.cpp +++ b/tests/animation/src/RotationConstraintTests.cpp @@ -193,6 +193,7 @@ void RotationConstraintTests::testSwingTwistConstraint() { glm::quat inputRotation = swingRotation * twistRotation * referenceRotation; glm::quat outputRotation = inputRotation; + shoulder.clearHistory(); bool updated = shoulder.apply(outputRotation); QVERIFY(updated == false); QCOMPARE_WITH_ABS_ERROR(inputRotation, outputRotation, EPSILON); @@ -223,6 +224,7 @@ void RotationConstraintTests::testSwingTwistConstraint() { glm::quat inputRotation = swingRotation * twistRotation * referenceRotation; glm::quat outputRotation = inputRotation; + shoulder.clearHistory(); bool updated = shoulder.apply(outputRotation); QVERIFY(updated == true); @@ -257,6 +259,7 @@ void RotationConstraintTests::testSwingTwistConstraint() { glm::quat inputRotation = swingRotation * twistRotation * referenceRotation; glm::quat outputRotation = inputRotation; + shoulder.clearHistory(); bool updated = shoulder.apply(outputRotation); QVERIFY(updated == true); @@ -291,6 +294,7 @@ void RotationConstraintTests::testSwingTwistConstraint() { glm::quat inputRotation = swingRotation * twistRotation * referenceRotation; glm::quat outputRotation = inputRotation; + shoulder.clearHistory(); bool updated = shoulder.apply(outputRotation); QVERIFY(updated == true);