From 40844d2a49a8376bc2ee4cbfa9e48f5584b3f851 Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 7 Apr 2017 14:03:31 -0700 Subject: [PATCH 1/3] Added getAbsoluteDefaultJoint*InOjbectFrame to Avatar API. --- interface/src/avatar/Avatar.cpp | 15 +++++++++++++++ interface/src/avatar/Avatar.h | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index ade98c63d8..b9b9a7b912 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -933,6 +933,21 @@ glm::vec3 Avatar::getDefaultJointTranslation(int index) const { return translation; } +glm::quat Avatar::getAbsoluteDefaultJointRotationInObjectFrame(int index) const { + glm::quat rotation; + auto rig = _skeletonModel->getRig(); + glm::quat rot = rig->getAnimSkeleton()->getAbsoluteDefaultPose(index).rot(); + return Quaternions::Y_180 * rot; +} + +glm::vec3 Avatar::getAbsoluteDefaultJointTranslationInObjectFrame(int index) const { + glm::vec3 translation; + auto rig = _skeletonModel->getRig(); + glm::vec3 trans = rig->getAnimSkeleton()->getAbsoluteDefaultPose(index).trans(); + glm::mat4 y180Mat = createMatFromQuatAndPos(Quaternions::Y_180, glm::vec3()); + return transformPoint(y180Mat * rig->getGeometryToRigTransform(), trans); +} + glm::quat Avatar::getAbsoluteJointRotationInObjectFrame(int index) const { if (index < 0) { index += numeric_limits::max() + 1; // 65536 diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index ba7e1c617e..c81ff95f10 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -121,6 +121,10 @@ public: Q_INVOKABLE virtual glm::quat getDefaultJointRotation(int index) const; Q_INVOKABLE virtual glm::vec3 getDefaultJointTranslation(int index) const; + // in avatar coordinates + Q_INVOKABLE virtual glm::quat getAbsoluteDefaultJointRotationInObjectFrame(int index) const; + Q_INVOKABLE virtual glm::vec3 getAbsoluteDefaultJointTranslationInObjectFrame(int index) const; + virtual glm::quat getAbsoluteJointRotationInObjectFrame(int index) const override; virtual glm::vec3 getAbsoluteJointTranslationInObjectFrame(int index) const override; virtual bool setAbsoluteJointRotationInObjectFrame(int index, const glm::quat& rotation) override { return false; } From e065c1bac499b432a93dd33a86c20b81d4d2735f Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 7 Apr 2017 14:12:03 -0700 Subject: [PATCH 2/3] Added jsdoc for new Avatar.getAbsoluteDefaultJoint*InObjectFrame API --- interface/src/avatar/Avatar.h | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index c81ff95f10..fae4cd08be 100644 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -121,8 +121,24 @@ public: Q_INVOKABLE virtual glm::quat getDefaultJointRotation(int index) const; Q_INVOKABLE virtual glm::vec3 getDefaultJointTranslation(int index) const; - // in avatar coordinates + /**jsdoc + * Provides read only access to the default joint rotations in avatar coordinates. + * The default pose of the avatar is defined by the position and orientation of all bones + * in the avatar's model file. Typically this is a t-pose. + * @function Avatar.getAbsoluteDefaultJointRotationInObjectFrame + * @param index {number} index number + * @returns {Quat} The rotation of this joint in avatar coordinates. + */ Q_INVOKABLE virtual glm::quat getAbsoluteDefaultJointRotationInObjectFrame(int index) const; + + /**jsdoc + * Provides read only access to the default joint translations in avatar coordinates. + * The default pose of the avatar is defined by the position and orientation of all bones + * in the avatar's model file. Typically this is a t-pose. + * @function Avatar.getAbsoluteDefaultJointTranslationInObjectFrame + * @param index {number} index number + * @returns {Vec3} The position of this joint in avatar coordinates. + */ Q_INVOKABLE virtual glm::vec3 getAbsoluteDefaultJointTranslationInObjectFrame(int index) const; virtual glm::quat getAbsoluteJointRotationInObjectFrame(int index) const override; From a06df1a400686a62a3db7801286a4516bbb79d2f Mon Sep 17 00:00:00 2001 From: "Anthony J. Thibault" Date: Fri, 7 Apr 2017 14:13:00 -0700 Subject: [PATCH 3/3] Bug fix for passing quats from script to C++ via the animationStateHandler --- libraries/animation/src/AnimVariant.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/animation/src/AnimVariant.cpp b/libraries/animation/src/AnimVariant.cpp index 911899f5a9..832ab8678c 100644 --- a/libraries/animation/src/AnimVariant.cpp +++ b/libraries/animation/src/AnimVariant.cpp @@ -109,7 +109,7 @@ void AnimVariantMap::animVariantMapFromScriptValue(const QScriptValue& source) { if (z.isNumber()) { QScriptValue w = value.property("w"); if (w.isNumber()) { - set(property.name(), glm::quat(x.toNumber(), y.toNumber(), z.toNumber(), w.toNumber())); + set(property.name(), glm::quat(w.toNumber(), x.toNumber(), y.toNumber(), z.toNumber())); } else { set(property.name(), glm::vec3(x.toNumber(), y.toNumber(), z.toNumber())); }