Fix Leap hand roll

This commit is contained in:
David Rowe 2014-10-08 10:11:18 -07:00
parent 373d2f0532
commit a3cce3ae22

View file

@ -30,7 +30,6 @@ var leapHands = (function () {
CALIBRATING = 1, CALIBRATING = 1,
CALIBRATED = 2, CALIBRATED = 2,
CALIBRATION_TIME = 1000, // milliseconds CALIBRATION_TIME = 1000, // milliseconds
PI = 3.141593,
avatarScale, avatarScale,
avatarFaceModelURL, avatarFaceModelURL,
avatarSkeletonModelURL, avatarSkeletonModelURL,
@ -314,11 +313,7 @@ var leapHands = (function () {
j, j,
side, side,
handOffset, handOffset,
handRoll,
handPitch,
handYaw,
handRotation, handRotation,
wristAbsRotation,
locRotation, locRotation,
cameraOrientation, cameraOrientation,
inverseAvatarOrientation; inverseAvatarOrientation;
@ -357,20 +352,22 @@ var leapHands = (function () {
handOffset.x = -handOffset.x; handOffset.x = -handOffset.x;
// Hand rotation in camera coordinates ... // Hand rotation in camera coordinates ...
// TODO: 2.0* scale factors should not be necessary; Leap Motion controller code needs investigating. handRotation = wrists[h].controller.getAbsRotation();
handRoll = 2.0 * -hands[h].controller.getAbsRotation().z; handRotation = {
wristAbsRotation = wrists[h].controller.getAbsRotation(); x: handRotation.z,
handPitch = 2.0 * wristAbsRotation.x - PI / 2.0; y: handRotation.y,
handYaw = 2.0 * -wristAbsRotation.y; z: handRotation.x,
// TODO: Roll values only work if hand is upside down; Leap Motion controller code needs investigating. w: handRotation.w
handRoll = PI + handRoll; };
if (h === 0) { if (h === 0) {
handRotation = Quat.multiply(Quat.angleAxis(-90.0, { x: 0, y: 1, z: 0 }), handRotation.x = -handRotation.x;
Quat.fromVec3Radians({ x: handRoll, y: handYaw, z: -handPitch })); handRotation = Quat.multiply(Quat.angleAxis(90.0, { x: 1, y: 0, z: 0 }), handRotation);
handRotation = Quat.multiply(Quat.angleAxis(90.0, { x: 0, y: 0, z: 1 }), handRotation);
} else { } else {
handRotation = Quat.multiply(Quat.angleAxis(90.0, { x: 0, y: 1, z: 0 }), handRotation.z = -handRotation.z;
Quat.fromVec3Radians({ x: -handRoll, y: handYaw, z: handPitch })); handRotation = Quat.multiply(Quat.angleAxis(90.0, { x: 1, y: 0, z: 0 }), handRotation);
handRotation = Quat.multiply(Quat.angleAxis(-90.0, { x: 0, y: 0, z: 1 }), handRotation);
} }
// Hand rotation in avatar coordinates ... // Hand rotation in avatar coordinates ...
@ -388,19 +385,22 @@ var leapHands = (function () {
z: hands[h].zeroPosition.z - handOffset.z z: hands[h].zeroPosition.z - handOffset.z
}; };
// TODO: 2.0* scale factors should not be necessary; Leap Motion controller code needs investigating. handRotation = wrists[h].controller.getAbsRotation();
handRoll = 2.0 * -hands[h].controller.getAbsRotation().z; handRotation = {
wristAbsRotation = wrists[h].controller.getAbsRotation(); x: handRotation.z,
handPitch = 2.0 * -wristAbsRotation.x; y: handRotation.y,
handYaw = 2.0 * wristAbsRotation.y; z: handRotation.x,
w: handRotation.w
};
// Hand position and orientation ...
if (h === 0) { if (h === 0) {
handRotation.x = -handRotation.x;
handRotation = Quat.multiply(Quat.angleAxis(-90.0, { x: 0, y: 1, z: 0 }), handRotation = Quat.multiply(Quat.angleAxis(-90.0, { x: 0, y: 1, z: 0 }),
Quat.fromVec3Radians({ x: handRoll, y: handYaw, z: -handPitch })); handRotation);
} else { } else {
handRotation.z = -handRotation.z;
handRotation = Quat.multiply(Quat.angleAxis(90.0, { x: 0, y: 1, z: 0 }), handRotation = Quat.multiply(Quat.angleAxis(90.0, { x: 0, y: 1, z: 0 }),
Quat.fromVec3Radians({ x: -handRoll, y: handYaw, z: handPitch })); handRotation);
} }
} }