From e503542b6acfdb978fc8fb1914377d2f62c0b2a0 Mon Sep 17 00:00:00 2001 From: Atlante45 Date: Fri, 17 Feb 2017 18:29:00 -0800 Subject: [PATCH] Fix transform computation --- interface/src/avatar/MyAvatar.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index 0782d0c018..d3fc42cdf2 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -2481,21 +2481,21 @@ bool MyAvatar::pinJoint(int index, const glm::vec3& position, const glm::quat& o qWarning() << "Pinning is only supported for the hips joint at the moment."; return false; } + qApp->getActiveDisplayPlugin()->resetSensors(); auto jointTranslation = getAbsoluteJointTranslationInObjectFrame(index); auto jointRotation = getAbsoluteJointRotationInObjectFrame(index); - Transform final(orientation, Vectors::ONE, position); - Transform joint(jointRotation, Vectors::ONE, jointTranslation); + auto targetOrientation = orientation * glm::conjugate(glm::normalize(jointRotation)); + auto targetPosition = position - orientation * jointTranslation; - Transform avatarTransform(final.getMatrix() * joint.getInverseMatrix()); - setPosition(avatarTransform.getTranslation()); - setOrientation(avatarTransform.getRotation()); + setPosition(targetPosition); + setOrientation(targetOrientation); _rig->setMaxHipsOffsetLength(0.0f); auto it = std::find(_pinnedJoints.begin(), _pinnedJoints.end(), index); - if (it != _pinnedJoints.end()) { + if (it == _pinnedJoints.end()) { _pinnedJoints.push_back(index); }