Hello World

Hello World

这个文档介绍了如何与Leap Motion控制器连接,如何访问基本的跟踪数据。

How the Leap Motion Controller Works

Leap Motion控制器包括硬件和软件部分。硬件主要包括一对立体红外摄像机和光照LED。当设备处于其标准的方位时,摄像机的传感器朝上。接下来的说明展示了从Leap Motion传感器的视角中用户的手是怎样的:
Leap Motion的软件接收传感器数据,然后分析这个特定为手、手指、胳膊和工具的数据(将来会加入其他类型的物体来用于跟踪,但这是当前的跟踪实体)。软件包括了一个人手的内部模型,把这个模型与传感器数据相比较,确定最佳匹配。传感器数据是逐帧分析的,然后把每一帧的数据送给Leap Motion启用的应用程序。你的应用程序接收的Frame对象包含了所有跟踪实体已知的位置、速率和身份,诸如手、手指和工具,持续多帧的手势和动作的构造在每帧中更新。

Set Up the Files

详见“连接控制器”。

Get Connected

接下来一步就是在程序中加入一个Controller对象,作为我们与Leap Motion服务的连接。
int main(int argc, char** argv) {
Controller controller;
// Keep this process running until Enter is pressed
std::cout << “Press Enter to quit…” << std::endl;
std::cin.get();
return 0;
}

To Listen or not to Listen?

你可以把一个Listener对象加入到Controller,这提供了一个基于事件的机制来对重要的Controller状态转变做出回应这是本教程中使用的方法,但并不总是最好的方法。
Listener的问题:Listener对象用独立的进程来调用你为每个事件实现的代码。因此,用Listener机制会在你的程序中引入线程的复杂性。所以,你的责任在于,确保你在Listener子类中实现的代码可以以一种线程安全的方式访问程序的其它部分。比如,你只能从主线程中访问与GUI控件相关的变量。这也有额外的与线程的创建和清理相关的开销。
避免Listeners:当你的程序方便的时候,你可以通过轮询Controller的帧(或者其他状态)来避免使用Listener对象。很多程序已经有一个事件循环或动画循环来推动用户输入和动画。如果是这样,每个循环可以得到一次跟踪数据,这通常是与你用数据一样快。
API中的Listener类定义了一个函数的标签,当一个Controller事件发生时会调用这个函数。通过创建一个Listener的子类可以创建一个侦听器,来实现你感兴趣的事件的回调函数。如果一切正常,运行例程可以在终端窗口里看到字符串“Connected”。

On Connect

当你的Controller对象成功与Leap Motion光驱连接,而且硬件插上电源,这个对象会改变idConnected()属性为true然后调用Listener.onConnect()回调函数。
当控制器相连,可以用Controller.enableGesture()和Controller.setPolicy()函数设置控制器属性。比如,如果你要启用挥动的手势,如下:
void SampleL*istener::onConnect(const Controller& controller) {
std::cout << “Connected” << std::endl;
controller.enableGesture(Gest*ure::TYPE_SWIPE);
}

On Frame

Leap Motion系统中所有的跟踪数据通过Frame对象来到达,可以通过Controller.frame()函数来得到控制器中的Frame对象。当新一帧数据可用时,调用Listener子类中的onFrame()回调函数。当你不用侦听器,可以与你处理的上一帧的id()值来看这是否为新的一帧。通过设置frame()的历史参数可以得到比当前帧更早的帧。因此,即使在慢于设备帧率的情况下轮询,你依然可以处理每一帧。

译自:https://developer.leapmotion.com/documentation/cpp/devguide/Sample_Tutorial.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值