From 08d63b7fd89839c1b34ccf5ff44fac70f1480800 Mon Sep 17 00:00:00 2001 From: Seth Alves Date: Thu, 9 Jul 2015 11:03:02 -0700 Subject: [PATCH] first attempt at palm rotation --- interface/src/avatar/AvatarActionHold.cpp | 4 ++++ interface/src/avatar/MyAvatar.cpp | 26 +++++++++++++++++++++++ interface/src/avatar/MyAvatar.h | 6 ++++-- 3 files changed, 34 insertions(+), 2 deletions(-) diff --git a/interface/src/avatar/AvatarActionHold.cpp b/interface/src/avatar/AvatarActionHold.cpp index ca903a9771..c28032ddde 100644 --- a/interface/src/avatar/AvatarActionHold.cpp +++ b/interface/src/avatar/AvatarActionHold.cpp @@ -52,15 +52,19 @@ void AvatarActionHold::updateActionWorker(float deltaTimeStep) { } glm::vec3 palmPosition; + glm::quat palmRotation; if (_hand == "right") { palmPosition = myAvatar->getRightPalmPosition(); + palmRotation = myAvatar->getRightPalmRotation(); } else { palmPosition = myAvatar->getLeftPalmPosition(); + palmRotation = myAvatar->getLeftPalmRotation(); } auto rotation = myAvatar->getWorldAlignedOrientation(); auto offset = rotation * _relativePosition; auto position = palmPosition + offset; + rotation *= palmRotation; rotation *= _relativeRotation; unlock(); diff --git a/interface/src/avatar/MyAvatar.cpp b/interface/src/avatar/MyAvatar.cpp index aa6b6afc66..1a900d6afd 100644 --- a/interface/src/avatar/MyAvatar.cpp +++ b/interface/src/avatar/MyAvatar.cpp @@ -371,6 +371,19 @@ glm::vec3 MyAvatar::getLeftPalmPosition() { return leftHandPosition; } +glm::quat MyAvatar::getLeftPalmRotation() { + unsigned int leftIndex = 0; + if (getHand()->getNumPalms() > leftIndex) { + PalmData& palm = getHand()->getPalms()[leftIndex]; + if (palm.isActive()) { + glm::vec3 tipDirection = glm::normalize(palm.getTipPosition() - palm.getPosition()); + glm::vec3 avatarDirection = glm::vec3(0.0f, 0.0f, 1.0f) * getOrientation(); + return rotationBetween(avatarDirection, tipDirection); + } + } + return glm::quat(); +} + glm::vec3 MyAvatar::getRightPalmPosition() { glm::vec3 rightHandPosition; getSkeletonModel().getRightHandPosition(rightHandPosition); @@ -380,6 +393,19 @@ glm::vec3 MyAvatar::getRightPalmPosition() { return rightHandPosition; } +glm::quat MyAvatar::getRightPalmRotation() { + unsigned int rightIndex = 1; + if (getHand()->getNumPalms() > rightIndex) { + PalmData& palm = getHand()->getPalms()[rightIndex]; + if (palm.isActive()) { + glm::vec3 tipDirection = glm::normalize(palm.getTipPosition() - palm.getPosition()); + glm::vec3 avatarDirection = glm::vec3(0.0f, 0.0f, 1.0f) * getOrientation(); + return rotationBetween(avatarDirection, tipDirection); + } + } + return glm::quat(); +} + void MyAvatar::clearReferential() { changeReferential(NULL); } diff --git a/interface/src/avatar/MyAvatar.h b/interface/src/avatar/MyAvatar.h index 4e76143774..34dfcad2ad 100644 --- a/interface/src/avatar/MyAvatar.h +++ b/interface/src/avatar/MyAvatar.h @@ -195,10 +195,12 @@ public slots: void setThrust(glm::vec3 newThrust) { _thrust = newThrust; } void updateMotionBehavior(); - + glm::vec3 getLeftPalmPosition(); + glm::quat getLeftPalmRotation(); glm::vec3 getRightPalmPosition(); - + glm::quat getRightPalmRotation(); + void clearReferential(); bool setModelReferential(const QUuid& id); bool setJointReferential(const QUuid& id, int jointIndex);