mirror of
https://github.com/overte-org/overte.git
synced 2025-08-08 19:56:44 +02:00
Fix Leap hand roll
This commit is contained in:
parent
373d2f0532
commit
a3cce3ae22
1 changed files with 24 additions and 24 deletions
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue