From 69dd4ff59bfa90b545657331a36e4f9923893cda Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Wed, 5 Jun 2013 13:08:17 -0700 Subject: [PATCH] Improved rotation computation. --- interface/src/Avatar.cpp | 4 +++- interface/src/Skeleton.cpp | 4 +++- interface/src/Skeleton.h | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/interface/src/Avatar.cpp b/interface/src/Avatar.cpp index d8178ca643..ed4102f522 100644 --- a/interface/src/Avatar.cpp +++ b/interface/src/Avatar.cpp @@ -1082,7 +1082,9 @@ void Avatar::updateBodyBalls(float deltaTime) { if (_skeleton.joint[b].parent == AVATAR_JOINT_NULL || length < SMALL_SPRING_LENGTH) { _bodyBall[b].rotation = orientation * _skeleton.joint[_bodyBall[b].parentJoint].absoluteBindPoseRotation; } else { - _bodyBall[b].rotation = rotationBetween(jointDirection, springVector) * orientation; + glm::vec3 parentDirection = _bodyBall[ _skeleton.joint[b].parent ].rotation * JOINT_DIRECTION; + _bodyBall[b].rotation = rotationBetween(parentDirection, springVector) * + _bodyBall[ _skeleton.joint[b].parent ].rotation; } } } diff --git a/interface/src/Skeleton.cpp b/interface/src/Skeleton.cpp index b3720c8869..92dba252a1 100644 --- a/interface/src/Skeleton.cpp +++ b/interface/src/Skeleton.cpp @@ -118,7 +118,9 @@ void Skeleton::initialize() { } else { joint[b].absoluteBindPosePosition = joint[ joint[b].parent ].absoluteBindPosePosition + joint[b].bindPosePosition; - joint[b].absoluteBindPoseRotation = rotationBetween(JOINT_DIRECTION, joint[b].bindPosePosition); + glm::vec3 parentDirection = joint[ joint[b].parent ].absoluteBindPoseRotation * JOINT_DIRECTION; + joint[b].absoluteBindPoseRotation = rotationBetween(parentDirection, joint[b].bindPosePosition) * + joint[ joint[b].parent ].absoluteBindPoseRotation; } } } diff --git a/interface/src/Skeleton.h b/interface/src/Skeleton.h index b5a7cee0ba..e98c2e7b12 100644 --- a/interface/src/Skeleton.h +++ b/interface/src/Skeleton.h @@ -42,7 +42,7 @@ enum AvatarJointID NUM_AVATAR_JOINTS }; -const glm::vec3 JOINT_DIRECTION = glm::vec3(1.0f, 0.0f, 0.0f); +const glm::vec3 JOINT_DIRECTION = glm::vec3(0.0f, 1.0f, 0.0f); class Skeleton { public: