From 81ab68a529c72f7215b6db7c35a7f9e9d433f79f Mon Sep 17 00:00:00 2001 From: Andrzej Kapolka Date: Mon, 20 Jan 2014 12:44:09 -0800 Subject: [PATCH] Store hand position relative to body orientation/position. --- interface/src/avatar/Avatar.cpp | 4 ---- interface/src/avatar/Avatar.h | 1 - libraries/avatars/src/AvatarData.cpp | 9 +++++++++ libraries/avatars/src/AvatarData.h | 6 ++++-- libraries/shared/src/PacketHeaders.cpp | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/interface/src/avatar/Avatar.cpp b/interface/src/avatar/Avatar.cpp index 069ad0b7d9..6db0a15300 100644 --- a/interface/src/avatar/Avatar.cpp +++ b/interface/src/avatar/Avatar.cpp @@ -124,10 +124,6 @@ glm::vec3 Avatar::getChestPosition() const { return _skeletonModel.getNeckPosition(neckPosition) ? (_position + neckPosition) * 0.5f : _position; } -glm::quat Avatar::getOrientation() const { - return glm::quat(glm::radians(glm::vec3(_bodyPitch, _bodyYaw, _bodyRoll))); -} - glm::quat Avatar::getWorldAlignedOrientation () const { return computeRotationFromBodyToWorldUp() * getOrientation(); } diff --git a/interface/src/avatar/Avatar.h b/interface/src/avatar/Avatar.h index 6248ac92e7..3f1da6bc31 100755 --- a/interface/src/avatar/Avatar.h +++ b/interface/src/avatar/Avatar.h @@ -92,7 +92,6 @@ public: const glm::vec3& getVelocity() const { return _velocity; } Head& getHead() { return _head; } Hand& getHand() { return _hand; } - glm::quat getOrientation() const; glm::quat getWorldAlignedOrientation() const; bool findRayIntersection(const glm::vec3& origin, const glm::vec3& direction, float& distance) const; diff --git a/libraries/avatars/src/AvatarData.cpp b/libraries/avatars/src/AvatarData.cpp index 8cd2f0dffc..35e6c37e96 100644 --- a/libraries/avatars/src/AvatarData.cpp +++ b/libraries/avatars/src/AvatarData.cpp @@ -44,6 +44,15 @@ AvatarData::~AvatarData() { delete _handData; } +glm::vec3 AvatarData::getHandPosition() const { + return getOrientation() * _handPosition + _position; +} + +void AvatarData::setHandPosition(const glm::vec3& handPosition) { + // store relative to position/orientation + _handPosition = glm::inverse(getOrientation()) * (handPosition - _position); +} + int AvatarData::getBroadcastData(unsigned char* destinationBuffer) { unsigned char* bufferStart = destinationBuffer; diff --git a/libraries/avatars/src/AvatarData.h b/libraries/avatars/src/AvatarData.h index c3ca80737d..0005d1eb11 100755 --- a/libraries/avatars/src/AvatarData.h +++ b/libraries/avatars/src/AvatarData.h @@ -76,8 +76,8 @@ public: const glm::vec3& getPosition() const { return _position; } void setPosition(const glm::vec3 position) { _position = position; } - const glm::vec3& getHandPosition() const { return _handPosition; } - void setHandPosition(const glm::vec3 handPosition) { _handPosition = handPosition; } + glm::vec3 getHandPosition() const; + void setHandPosition(const glm::vec3& handPosition); int getBroadcastData(unsigned char* destinationBuffer); int parseData(unsigned char* sourceBuffer, int numBytes); @@ -93,6 +93,8 @@ public: float getBodyRoll() const { return _bodyRoll; } void setBodyRoll(float bodyRoll) { _bodyRoll = bodyRoll; } + glm::quat getOrientation() const { return glm::quat(glm::radians(glm::vec3(_bodyPitch, _bodyYaw, _bodyRoll))); } + // Scale float getTargetScale() const { return _targetScale; } void setTargetScale(float targetScale) { _targetScale = targetScale; } diff --git a/libraries/shared/src/PacketHeaders.cpp b/libraries/shared/src/PacketHeaders.cpp index 0d468f0e1d..1ca0d99055 100644 --- a/libraries/shared/src/PacketHeaders.cpp +++ b/libraries/shared/src/PacketHeaders.cpp @@ -20,7 +20,7 @@ PACKET_VERSION versionForPacketType(PACKET_TYPE type) { return 2; case PACKET_TYPE_HEAD_DATA: - return 14; + return 15; case PACKET_TYPE_AVATAR_URLS: return 2;