Apply Leap data directly to skeleton.

This commit is contained in:
Andrzej Kapolka 2013-11-06 16:47:03 -08:00
parent d0cd9e9790
commit 2b4db0ea0e
3 changed files with 30 additions and 8 deletions

View file

@ -921,8 +921,7 @@ void MyAvatar::updateHandMovementAndTouching(float deltaTime, bool enableHandMov
_avatarTouch.setHasInteractingOther(false);
}
bool leapHands = updateLeapHandPositions();
enableHandMovement |= leapHands;
enableHandMovement |= updateLeapHandPositions();
//constrain right arm length and re-adjust elbow position as it bends
// NOTE - the following must be called on all avatars - not just _isMine
@ -936,7 +935,7 @@ void MyAvatar::updateHandMovementAndTouching(float deltaTime, bool enableHandMov
if (_mousePressed) {
_handState = HAND_STATE_GRASPING;
} else if (pointing || leapHands) {
} else if (pointing) {
_handState = HAND_STATE_POINTING;
} else {
_handState = HAND_STATE_NULL;

View file

@ -28,11 +28,26 @@ void SkeletonModel::simulate(float deltaTime) {
Model::simulate(deltaTime);
if (_owningAvatar->getHandState() == HAND_STATE_NULL) {
const float HAND_RESTORATION_RATE = 0.25f;
restoreRightHandPosition(HAND_RESTORATION_RATE);
} else {
setRightHandPosition(_owningAvatar->getHandPosition());
const float HAND_RESTORATION_RATE = 0.25f;
switch (_owningAvatar->getHand().getNumPalms()) {
case 0: // no Leap data; set hands from mouse
if (_owningAvatar->getHandState() == HAND_STATE_NULL) {
restoreRightHandPosition(HAND_RESTORATION_RATE);
} else {
setRightHandPosition(_owningAvatar->getHandPosition());
}
restoreLeftHandPosition(HAND_RESTORATION_RATE);
break;
case 1: // right hand only
applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, _owningAvatar->getHand().getPalms()[0]);
restoreLeftHandPosition(HAND_RESTORATION_RATE);
break;
default: // both hands
applyPalmData(_geometry->getFBXGeometry().leftHandJointIndex, _owningAvatar->getHand().getPalms()[0]);
applyPalmData(_geometry->getFBXGeometry().rightHandJointIndex, _owningAvatar->getHand().getPalms()[1]);
break;
}
}
@ -86,6 +101,10 @@ bool SkeletonModel::render(float alpha) {
return true;
}
void SkeletonModel::applyPalmData(int jointIndex, const PalmData& palm) {
setJointPosition(jointIndex, palm.getPosition());
}
void SkeletonModel::updateJointState(int index) {
Model::updateJointState(index);

View file

@ -9,6 +9,8 @@
#ifndef __interface__SkeletonModel__
#define __interface__SkeletonModel__
#include <HandData.h>
#include "renderer/Model.h"
class Avatar;
@ -26,6 +28,8 @@ public:
protected:
void applyPalmData(int jointIndex, const PalmData& palm);
/// Updates the state of the joint at the specified index.
virtual void updateJointState(int index);