3
0
Fork 0
mirror of https://github.com/lubosz/overte.git synced 2025-04-26 07:55:31 +02:00

Use animation for pointing index finger instead of setting joint angles

This commit is contained in:
David Rowe 2017-02-25 11:36:06 +13:00
parent e723385df2
commit a205d2a00c
6 changed files with 107 additions and 24 deletions

View file

@ -128,7 +128,17 @@
"id": "rightHandGrasp",
"interpTarget": 3,
"interpDuration": 3,
"transitions": []
"transitions": [
{ "var": "isRightIndexPoint", "state": "rightIndexPoint" }
]
},
{
"id": "rightIndexPoint",
"interpTarget": 15,
"interpDuration": 3,
"transitions": [
{ "var": "isRightHandGrasp", "state": "rightHandGrasp" }
]
}
]
},
@ -166,6 +176,40 @@
"children": []
}
]
},
{
"id": "rightIndexPoint",
"type": "blendLinear",
"data": {
"alpha": 0.0,
"alphaVar": "rightHandGraspAlpha"
},
"children": [
{
"id": "rightIndexPointOpen",
"type": "clip",
"data": {
"url": "animations/touch_point_open_right.fbx",
"startFrame": 15.0,
"endFrame": 15.0,
"timeScale": 1.0,
"loopFlag": true
},
"children": []
},
{
"id": "rightIndexPointClosed",
"type": "clip",
"data": {
"url": "animations/touch_point_closed_right.fbx",
"startFrame": 15.0,
"endFrame": 15.0,
"timeScale": 1.0,
"loopFlag": true
},
"children": []
}
]
}
]
},
@ -175,7 +219,7 @@
"data": {
"alpha": 0.0,
"boneSet": "leftHand",
"alphaVar" : "leftHandOverlayAlpha"
"alphaVar": "leftHandOverlayAlpha"
},
"children": [
{
@ -188,7 +232,17 @@
"id": "leftHandGrasp",
"interpTarget": 3,
"interpDuration": 3,
"transitions": []
"transitions": [
{ "var": "isLeftIndexPoint", "state": "leftIndexPoint" }
]
},
{
"id": "leftIndexPoint",
"interpTarget": 15,
"interpDuration": 3,
"transitions": [
{ "var": "isLeftHandGrasp", "state": "leftHandGrasp" }
]
}
]
},
@ -226,6 +280,40 @@
"children": []
}
]
},
{
"id": "leftIndexPoint",
"type": "blendLinear",
"data": {
"alpha": 0.0,
"alphaVar": "leftHandGraspAlpha"
},
"children": [
{
"id": "leftIndexPointOpen",
"type": "clip",
"data": {
"url": "animations/touch_point_open_left.fbx",
"startFrame": 15.0,
"endFrame": 15.0,
"timeScale": 1.0,
"loopFlag": true
},
"children": []
},
{
"id": "leftIndexPointClosed",
"type": "clip",
"data": {
"url": "animations/touch_point_closed_left.fbx",
"startFrame": 15.0,
"endFrame": 15.0,
"timeScale": 1.0,
"loopFlag": true
},
"children": []
}
]
}
]
},

View file

@ -28,8 +28,6 @@ var animStateHandlerID;
var isPointingIndex = false;
var HIFI_POINT_INDEX_MESSAGE_CHANNEL = "Hifi-Point-Index";
var indexfingerJointNames = ["LeftHandIndex1", "LeftHandIndex2", "LeftHandIndex3", "RightHandIndex1", "RightHandIndex2", "RightHandIndex3"];
function clamp(val, min, max) {
return Math.min(Math.max(val, min), max);
}
@ -46,17 +44,28 @@ function init() {
Script.update.connect(update);
animStateHandlerID = MyAvatar.addAnimationStateHandler(
animStateHandler,
["leftHandOverlayAlpha", "rightHandOverlayAlpha", "leftHandGraspAlpha", "rightHandGraspAlpha"]
[
"leftHandOverlayAlpha", "leftHandGraspAlpha",
"rightHandOverlayAlpha", "rightHandGraspAlpha",
"isLeftHandGrasp", "isLeftIndexPoint",
"isRightHandGrasp", "isRightIndexPoint"
]
);
Messages.subscribe(HIFI_POINT_INDEX_MESSAGE_CHANNEL);
Messages.messageReceived.connect(handleMessages);
}
function animStateHandler(props) {
return { leftHandOverlayAlpha: leftHandOverlayAlpha,
leftHandGraspAlpha: lastLeftTrigger,
rightHandOverlayAlpha: rightHandOverlayAlpha,
rightHandGraspAlpha: lastRightTrigger };
return {
leftHandOverlayAlpha: leftHandOverlayAlpha,
leftHandGraspAlpha: lastLeftTrigger,
rightHandOverlayAlpha: rightHandOverlayAlpha,
rightHandGraspAlpha: lastRightTrigger,
isLeftHandGrasp: !isPointingIndex,
isLeftIndexPoint: isPointingIndex,
isRightHandGrasp: !isPointingIndex,
isRightIndexPoint: isPointingIndex
};
}
function update(dt) {
@ -83,14 +92,6 @@ function update(dt) {
} else {
rightHandOverlayAlpha = clamp(rightHandOverlayAlpha - OVERLAY_RAMP_RATE * dt, 0, 1);
}
// Point index finger.
if (isPointingIndex) {
var zeroRotation = { x: 0, y: 0, z: 0, w: 1 };
for (var i = 0; i < indexfingerJointNames.length; i++) {
MyAvatar.setJointRotation(indexfingerJointNames[i], zeroRotation);
}
}
}
function handleMessages(channel, message, sender) {
@ -99,12 +100,6 @@ function handleMessages(channel, message, sender) {
if (data.pointIndex !== undefined) {
print("pointIndex: " + data.pointIndex);
isPointingIndex = data.pointIndex;
if (!isPointingIndex) {
for (var i = 0; i < indexfingerJointNames.length; i++) {
MyAvatar.clearJointData(indexfingerJointNames[i]);
}
}
}
}
}