到leap官网下载好sdk, 找到自己sdk安装的位置,


我的是直接放在桌面上的,记住图中红线位置,等下配置环境变量会用到




找到系统的 “环境配置”


新建一个为 leapsdk的用户变量。 把上面的画红色路径添加进去



找到用户变量 path ,把sdk所在的dll路径添加进去(如果找不到,可以如上同样新建一个)



保持设置。同时注销或者重新启动电脑。让刚才的配置生效


然后新建一个c++项目,右键项目属性。 


vc++目录->可执行文件目录。将 $(leapsdk)\lib\x86 添加进去



包含目录。将$(leapsdk)\include添加进去


库目录,将$(leapsdk)\lib\x86添加进去



链接器-->输入-->附加依赖项 ,添加附加依赖性,将Leapd.lib 添加进去


最后保存。


新建一个c++源文件。

把下面测试代码复制进去

/******************************************************************************\
* Copyright (C) 2012-2013 Leap Motion, Inc. All rights reserved.               *
* Use subject to the terms of the Leap Motion SDK Agreement available at *
* Leap Motion proprietary and confidential. Not for distribution.              *
* https://developer.leapmotion.com/sdk_agreement, or another agreement         *
#include <windows.h>//如果嫌刷屏太快打开这个定义1(一共2处)

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

* between Leap Motion and you, your company or other organization.             *
\******************************************************************************/
using namespace Leap;class SampleListener : public Listener {
public:
usGained(const Controller&);
virtual vo
  virtual void onInit(const Controller&);virtual void onConnect(const Controller&);virtual void onDisconnect(const Controller&);virtual void onExit(const Controller&);virtual void onFrame(const Controller&);virtual void onFo
cid onFocusLost(const Controller&);
};void SampleListener::onInit(const Controller& controller) {std::cout << "Initialized" << std::endl;
}//打开对所有手势的识别
void SampleListener::onConnect(const Controller& controller) {std::cout << "Connected" << std::endl;
ller) {
//Note: not dispatched when running in
   controller.enableGesture(Gesture::TYPE_CIRCLE);controller.enableGesture(Gesture::TYPE_KEY_TAP);controller.enableGesture(Gesture::TYPE_SCREEN_TAP);controller.enableGesture(Gesture::TYPE_SWIPE);
}void SampleListener::onDisconnect(const Controller& contr
oa debugger.std::cout << "Disconnected" << std::endl;
}void SampleListener::onExit(const Controller& controller) {std::cout << "Exited" << std::endl;
}//核心函数,当获取一帧数据时要做点什么事
void SampleListener::onFrame(const Controller& controller) {// 获取最新的一帧,并且返回一些基本信息const Frame frame = controller.frame();
.isEmpty()) {
// 得到第一只手[hands()返回HandL
  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;//非空,检测到手if (!frame.hands(
)ist结构,可以向操作容器一样操作]const Hand hand = frame.hands()[0];// 检查下手是否有手指[握拳的话,是找不到手指的]const FingerList fingers = hand.fingers();if (!fingers.isEmpty()) {// 计算指尖尖端平均位置坐标Vector avgPos;for (int i = 0; i < fingers.count(); ++i) {avgPos += fingers[i].tipPosition();}avgPos /= (float)fingers.count();
normal = hand.palmNormal();
const Vector dir
          std::cout << "Hand has " << fingers.count()<< " fingers, average finger tip position" << avgPos << std::endl;}// 获取手的球心半径和手掌的坐标std::cout << "Hand sphere radius: " << hand.sphereRadius()<< " mm, palm position: " << hand.palmPosition() << std::endl;// 获取手的垂直向量(垂直手心向里)和方向(以手心开始,沿着手指指尖方向)const Vector
ection = hand.direction();// 计算手的俯仰Pitch角度、平面Roll旋转角度和左右Yaw旋转角度std::cout << "Hand pitch: " << direction.pitch() * RAD_TO_DEG << " degrees, "<< "roll: " << normal.roll() * RAD_TO_DEG << " degrees, "<< "yaw: " << direction.yaw() * RAD_TO_DEG << " degrees" << std::endl;}/*他并没有使用一些函数rightmost和leftmost之类*/// 获取手势
) {
case Gesture::TYPE_CIRCLE:

{

ircl

C

 const GestureList gestures = frame.gestures();for (int g = 0; g < gestures.count(); ++g) {Gesture gesture = gestures[g];//这里最好去看下Gesture的定义,里面详细描述各种手势触发的阈值//编程技术比较厉害啊,都看不到Gesture的成员变量在哪里,完全被封装起来了,不是com就是dll封装的吧//我也很想学习这种完全把变量封装到看不见的方法,这样程序员会很省心(眼不见心为净)//注意下来使用了switch语句先判断它是否是这种类型手势,再进行类的重新构造switch (gesture.type(
)eGesture circle = gesture;std::string clockwiseness;if (circle.pointable().direction().angleTo(circle.normal()) <= PI/4) {clockwiseness = "clockwise";//顺时针旋转的话,circle.normal()指向外侧[右手坐标系,学过物理磁力线神马的一下子就会明白]} else {clockwiseness = "counterclockwise";//逆时针,同上理解}// 计算和上一帧经过的角度float sweptAngle = 0;
tAngle = (circle.progress() - previousUpdate.prog
                if (circle.state() != Gesture::STATE_START) {//如果不是第一帧[第一帧肯定不能作为判断,只能作为初始化]//frame(0)表示当前最新一帧,而frame(1)表示前一帧,以此类推//对于id的使用十分简单明了,但很重要。这样表示只针对这个人的这个手指。CircleGesture previousUpdate = CircleGesture(controller.frame(1).gesture(circle.id()));//progress()表示手指旋转了几圈,如果是0.5表示旋转了半圈,如果是3表示已经旋转了3圈[计数功能很赞啊]swe
press()) * 2 * PI;//一共旋转多少弧度[显示时他再次转换成角度]}std::cout << "Circle id: " << gesture.id()<< ", state: " << gesture.state()<< ", progress: " << circle.progress()<< ", radius: " << circle.radius()<< ", angle " << sweptAngle * RAD_TO_DEG<<  ", " << clockwiseness << std::endl;break;}case Gesture::TYPE_SWIPE:{//相对旋转手势来说,这个以及下面几个简单很多
id()
<< ", state: " << gestu
             SwipeGesture swipe = gesture;std::cout << "Swipe id: " << gesture.id()<< ", state: " << gesture.state()<< ", direction: " << swipe.direction()//这个可是能判断所有方向的,强大!我玩Kinect时只能识别几个特定的方向。<< ", speed: " << swipe.speed() << std::endl;break;}case Gesture::TYPE_KEY_TAP:{KeyTapGesture tap = gesture;std::cout << "Key Tap id: " << gesture
.re.state()<< ", position: " << tap.position()<< ", direction: " << tap.direction()<< std::endl;break;}case Gesture::TYPE_SCREEN_TAP:{ScreenTapGesture screentap = gesture;std::cout << "Screen Tap id: " << gesture.id()<< ", state: " << gesture.state()<< ", position: " << screentap.position()<< ", direction: " << screentap.direction()<< std::endl;break;
Lost
           }default:std::cout << "Unknown gesture type." << std::endl;break;}}if (!frame.hands().isEmpty() || !gestures.isEmpty()) {std::cout << std::endl;}//  Sleep(1000);//如果嫌刷屏太快打开这个定义2(一共2处)
}void SampleListener::onFocusGained(const Controller& controller) {std::cout << "Focus Gained" << std::endl;
}void SampleListener::onFocusLost(const Controller& controller) {std::cout << "Focus
" << std::endl;
}int main() {// 创建例子监听者和控制器SampleListener listener;Controller controller;// 让监听者获取控制器的数据并进行分析controller.addListener(listener);// 让程序一直运行,直到输入回车键才结束std::cout << "Press Enter to quit..." << std::endl;std::cin.get();// 移除监听者controller.removeListener(listener);return 0;
}

以上测试代码来自  http://52coding.com/understanding-the-cpp-sample-application 。 修改了其中的 empty 为 isEmpty(新版将empty修改为了isEmpty)


运行





Leap Motion开发第一步环境配置相关推荐

  1. Qt For Android 第一步 环境配置

    Qt是一个1991年由奇趣科技开发的跨平台C++图形用户界面应用程序开发框架.现在已经全面支持iOS.Android.WP. 当时Qt刚开始支持安卓的时候,忘记了是5.1还是5.0版本.自己写了一个H ...

  2. php基础教程 第一步 环境配置及helloworld

    PHP 是服务器端脚本语言.全称为 Hypertext Preprocessor 为超文本预处理器. 据说php8不久后也要发布了,趁着8还没有发布赶紧写一个php5到php7(在基础教程写完后将写p ...

  3. windows phone开发第一步:搭建软件开发环境

    2019独角兽企业重金招聘Python工程师标准>>> windows phone开发第一步:搭建软件开发环境:http://www.cnblogs.com/hanjun/archi ...

  4. leap motion java_[Leap Motion开发文档翻译]Leap Motion架构

    Leap Motion架构 Leap Motion体感控制器支持最流行的桌面操作系统.Leap Motion程序作为一个服务(在Windows中)或一个守护进程(在Mac和Linux中).这个程序通过 ...

  5. 微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证

    微信公众开放平台开发07---java servlet 实现微信开发第一步:微信服务器验证  技术qq交流群:JavaDream:251572072 ------------------------- ...

  6. vue开发移动端环境配置_如何设置移动开发环境

    vue开发移动端环境配置 The use of mobile devices has increased considerably in the past decade. It has been ov ...

  7. Python开发第一步:如何制作一个简单的桌面应用

    Python开发第一步:如何制作一个简单的桌面应用 前言 大家好,我是baifagg, 一个热爱Python的编程爱好者. 今天我们来学习一下, 如何用Python制作一个简单的桌面应用程序. 虽然桌 ...

  8. 使用QtCreator开发ros2的环境配置

    使用QtCreator开发ros2的环境配置 使用环境 操作系统:Ubuntu 20.04 amd64 ros2版本:foxy 选择QtCreator的版本 由于ros2的ros-qtc-plugin ...

  9. php5.6 mysql5.5,PHP开发第一步,PHP5.6 + MySQL5.5 + Apache2.4环境搭建

    前言 在web开发这个领域对php 可是早有耳闻,大家对php赞不绝口,称赞有加,这让php火了一阵子,现在也依旧流行,所以我实在是忍不住想搞搞php了,以前以为学了jsp就没必要学php了,因为用j ...

最新文章

  1. struts.xml向页面传参
  2. CPU是怎样制造的?解析intel Core i7生产全过程
  3. innobackupex中--slave-info参数的含义和适用场景
  4. RecyclerView(六)设置下拉刷新
  5. Linux(Centos7)下使用RPM方式安装MySQL5.7
  6. linux 进程 状态 ri,LINUX下解决netstat查看TIME_WAIT状态过多问题(转)
  7. java将中国标准模式转换成yyyy-mm-nn_java-IO
  8. 标准C语言程序设计第七版pdf,C语言程序设计(向华)7.pdf
  9. VAssistX 脚本
  10. 智能手机射频前端架构初识: Phase 2/3/5/6/6L/7/7L/7LE
  11. Visual C++ 2010创建Ribbon界面
  12. 浏览器架构的误区和瘦客户端应用
  13. qrcode生成一个带有图片的二维码
  14. ad网络标号怎么用_【Altium Designer】AD改变网络标号的作用域
  15. 听觉能力类毕业论文文献有哪些?
  16. java开发的微信公众号服务端生产环境中的两个大坑
  17. 国庆过了,该审视下自己的生活了
  18. 【手机号验证/前端】Vue2+elementUI编写一个手机号验证码登录页面,路由式开发(附完整代码)
  19. TarsGo 性能提升之路
  20. Netty 源码分析系列(十五)自定义解码器、编码器、编解码器

热门文章

  1. Unity3D中角色撞击物体弹出提示框或显示对象效果
  2. Linux极简快速入门|Linux操作系统(四)
  3. 论文笔记 Multiple Instance Detection Network with Online Instance Classifier Refinement - CVPR 2017
  4. 微信小程序绑定银行卡功能
  5. LaTeX 多层列举 条目 编号
  6. 微信美化版去水印小程序源码分享 附接口
  7. Android 判断手机设备是否是小米,华为,魅族设备
  8. 吃内存狂魔?微信官方工具来了:深度清理缓存
  9. Creo 4.0 软件安装教程
  10. VUE + CSS画三角形