leap.js_API——hand

leapjs下载地址

leapjsAPI中hand的一些简单介绍和总结

hand类图

leap.js_API——hand_第1张图片

根据类图可以让leap返回对应的手的数据,leap.js中能够返回的数据大致分为:

  1. 位置;比如说手指某个关节在当前帧的三维坐标
  2. 速度;比如说手指某个关节在当前帧的三个维度的移动速度
  3. 方向;比如说手指在某一帧的向量的数组
  4. 其他静态属性;比如手的id,手指长度,宽度等不会随着帧作较大变化的值
hand类图的使用方法

比如我们想要让屏幕打印出hand的数据,那么我们可以用下面的代码

Leap.loop({
     
            hand: function (hand){
     
                document.getElementById('hand').innerHTML = hand;
            }
        })

此时的屏幕会打印出类似于这样的数据
在这里插入图片描述
这些数据分别为:
Hand(左 or 右)[ id || palmvelocity[0],palmvelocity[1],palmvelocity[2],|| sphereCenter[0],sphereCenter[1],sphereCenter[2] ]

还比如我们想要调用hand中的fingers,我们可以这样

Leap.loop({
     
            hand: function (hand){
     
                document.getElementById('hand').innerHTML = hand.fingers;
            }
        })

当然,每个手都有预设了五根手指的数据,所以fingers一共有五个,从0-4分别为拇指,食指,中指,无名指以及小指;当然,在hand类里面,fingers有相似的一个变量
fingers[0] === thumb
fingers[1] === indexFingers
fingers[2] === middleFingers
fingers[3] === ringFingers
fingers[4] === pinky
即:
hand.fingers[0] 和 hand.thumb 可获取的数据大致差不多

最后我们可根据不同手势在某些数据上的一些特性,给出手势的识别,比如手握紧的时候,五个手指的方向和手掌的方向向量应该是小于0的,所以我们可以这样来判断手掌的张握

Leap.loop({
     
            hand: function (hand){
     
                let thumbIsopen = Leap.vec3.dot(hand.palmNormal, hand.thumb.direction).toPrecision(2),
                    indexIsopen = Leap.vec3.dot(hand.direction, hand.indexFinger.direction).toPrecision(2),//食指弯曲程度
                    middleIsopen = Leap.vec3.dot(hand.direction, hand.middleFinger.direction).toPrecision(2),//中指弯曲程度
                    ringIsopen = Leap.vec3.dot(hand.direction, hand.ringFinger.direction).toPrecision(2),//无名指弯曲程度
                    pinkyIsopen = Leap.vec3.dot(hand.direction, hand.pinky.direction).toPrecision(2);//小指弯曲程度
                let isClose = indexIsopen < 0 && middleIsopen < 0 && ringIsopen < 0 && pinkyIsopen < 0;//手掌是否握紧
                let isOpen = indexIsopen > 0 && middleIsopen > 0 && ringIsopen > 0 && pinkyIsopen > 0;//手掌是否打开
                if(isClose){
     
                    document.getElementById('hand1').innerHTML = '握紧';
                }
                else{
     
                    document.getElementById('hand1').innerHTML = '非握非张';
                }
                if(isOpen){
     
                    document.getElementById('hand2').innerHTML = '张开';
                }
                else{
     
                    document.getElementById('hand2').innerHTML = '非握非张';
                }
            }
        })

你可能感兴趣的:(leap,可视化,javascript)