Hello World--------------LeapMotion API新建一个程序

此文将介绍如何连接控制器和接受基本的追踪数据,在开始开发应用之前打下坚实的基础。

首先,基础知识....

控制器如何工作

控制器包含软件和硬件部分,硬件首先包含一对立体红外相机和照明的LED,相机传感器向上监测(设备水平放置),下面的说明了传感器监测手掌的角度。

软件部分接收传感器数据并且分析分析出手掌,指头,手臂,工具的数据。软件包含一个中间的与传感器相比较最合适的一个模型。传感器数据被逐帧分析,并且服务把数据帧发送给应用。被应用接收的Frame对象包含了所有已知的位置和特性。例如,手、指头、工具。像手势、移动这样的概念将跨越多帧,当然也会在每一帧中更新。


新建一个文件

这个辅例是是使用命令行编译器和链接库,为了聚焦于代码本身,关于环境的问题,读者可以自己查找资料。

1.下载SDK压缩包

2.打开终端窗口,使用SDK的samples文件

3.sample.app包含已经此例完整的代码,为了充分的学习,你可以重新命名文件,或是创建新的cpp文件。

#include <iostream>
#include <string.h>
#include "Leap.h"

using namespace Leap;

int main(int argc, char** argv) {

    // Keep this process running until Enter is pressed
    std::cout << "Press Enter to quit..." << std::endl;
    std::cin.get();

    return 0;
}

连接设备

下一步是为程序添加一个controller对象,

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;
}
当你创建一个controller对象,controller自动连接LM服务,一旦连接建立,就可以从controller.frame()方法中获得追踪的数据。连接过程是异步进行的,所以你不能创建controller在一行而获得数据在另一行。必须要等到连接完成。

监听与否

为控制器添加一个监听器对象,这个提供基于事件的机制回应重要控制器状态变化。辅例中使用的是这种方法,只是这种方法不是最好的方法。监听器的问题:Listener对象使用独立的线程唤醒实现每一个事件的代码。因此,使用监听器机制能够介绍线程的复杂性。

class SampleListener: public Listener{

public:

virtual void onConnect(const controller &);

virtual void onFrame(const controller &);

};

void SampleListener::onConnect(const Controller& controller) {
    std::cout << "Connected" << std::endl;
}

void SampleListener::onFrame(const Controller& controller) {
    std::cout << "Frame available" << std::endl;
}
在完整的文件中,你能够注意到一些回调函数。你也可以添加其他的函数,但是为了让事情简化,我们聚焦于onConnect 和onFrame()。

现在创建SampleListener对象,并在controller中添加。

controller.addListener(listener);

controller.removeListener(listener);

int main(int argc, char** argv) {
    SampleListener listener;
    Controller controller;

    controller.addListener(listener);

    // Keep this process running until Enter is pressed
    std::cout << "Press Enter to quit..." << std::endl;
    std::cin.get();

    // Remove the sample listener when done
    controller.removeListener(listener);

    return 0;
}
on connect

当控制器对象成功的连接到LM服务、硬件接入。控制器对象改变isConnected()属性为true,并唤醒Listener.onConnect()回调。

当控制器连接上,你能够通过controller。enableGesture()和controller.setPolicy()方法设置控制器属性。例如,你能够在onConnect()函数中,监听滑动手势。

void SampleListener::onConnect(const Controller& controller) {
    std::cout << "Connected" << std::endl;
    controller.enableGesture(Gesture::TYPE_SWIPE);
}
on frame

系统中所有的追踪数据到达Frame对象,通过调用controller.frame()方法可以得到frame对象。

 const Frame frame = controller.frame();
当新的一帧数据准备好时,onFrame()就被回调。当你你不使用监听器时,你可以比较id()的值和最近的一帧,来判断是不是新的一帧。

打印Frame对象的一些特性

oid SampleListener::onFrame(const Controller& controller) {
    const Frame frame = controller.frame();
    std::cout << "Frame id: " << frame.id()
          << ", timestamp: " << frame.timestamp()
          << ", hands: " << frame.hands().count()
          << ", fingers: " << frame.fingers().count()
          << ", tools: " << frame.tools().count()
          << ", gestures: " << frame.gestures().count() << std::endl;
}
原文地址:https://developer.leapmotion.com/documentation/cpp/devguide/Sample_Tutorial.html

实验结果:



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值