我想知道如何从Leap Motion获得正确的手掌旋转角度(沿着Y轴)(我使用的是最新的LeapJS API)?
我尝试了rotationAngle(sinceFrame)
方法和frame._rotation
。但是,rotationAngle()
会返回一个非常小的值,接近0
,这似乎是根据当前帧计算的旋转角度(如何在sinceFrame
中定义Leap.loop(function(frame)){}
,因为它似乎只记录当前帧的数据。)
并且frame._rotation
返回一个3 * 3矩阵(我不知道它是什么,因为它没有包含在API文档中)。因此,我想知道是否有办法从这些方法中获得正确的Y轴旋转角度?
答案 0 :(得分:0)
最新版本的leap.js库包含一个roll()函数作为Hand对象的成员。 (它也有pitch()和yaw(),如果roll()不是你想要的全部。)roll()函数定义为:
Hand.prototype.roll = function() {
return Math.atan2(this.palmNormal[0], -this.palmNormal[1]);
}
另外,由于您不需要使用rotationAngle()来获取当前的手掌角度,因此rotationAngle()函数可以为您提供两帧之间发生的旋转。对于sinceFrame,您可以存储对起始帧的引用,也可以从Controller对象维护的历史缓冲区中获取过去的帧。虽然Leap.loop()函数不允许您直接访问其Controller对象,但您应该能够创建自己的Controller对象。请注意,frame._rotation是一个内部变量,用于计算两个帧之间的转换。它本身并没有多大用处。