Leap motion的类

Leap motion 硬件与你的程序交流中类 Controller 是使用最多的,也是最重要。

  1. Leap::controller
  2. Leap::Listener(包含许多回调函数用于响应controller)
  3. Leap::Gesture
  4. Leap::Frame & Pointable
  5. Vector(计算角度以及其他)

Leap::controller

  • controller类中包含许多成员函数,用于传送 Leap motion 所采集的信息。
  • controller的成员函数,controller的成员函数可以传递手势信息

    1. controller.addListener( listener )
      函数的作用就是在调用listener的成员函数(也是回调函数,执行成员函数的内容)。
      它等价于:
      Listener listener;
      Controller leapController = Controller(listener);
      //都是在执行listener的成员函数。
    2. controller.frame()
      frame()函数里边有

Leap::Listener

Listener包含许多回调函数,可以用来处理controller所检测到的信息。

Leap motion官方网页Listener的信息

Listener包含的函数:

函数名(常用的) 何时调用
onConnect 硬件成功连接并且在软件上创建了类controller
onDisconnect 没有成功连接或者Leap motion Service没有运行
onFocusGained 硬件开始工作
onFocusLost 硬件不工作了
onFrame(最重要的) 你的硬件检测到手势,这样你就可以使用函数controller.frame()和其它函数了。

Leap::Gesture

  1. 手势识别首先需要调用这四个函数:
controller.enableGesture(Gesture::TYPE_CIRCLE);    //画圈手势
controller.enableGesture(Gesture::TYPE_SWIPE);     //滑动手势
controller.enableGesture(Gesture::TYPE_KEY_TAP);  //手指点一下
controller.enableGesture(Gesture::TYPE_SCREEN_TAP);  //点屏幕

这四个函数允许进行手势识别。

  1. Gesture.duration()/Gesture.durationSeconds(),这两个函数可以检测手势持续的时间。
  2. 手势识别函数:
    首先需要实例化一个Gesture的对象gesture:
const Gesture gesture = frame.gestures()[0];

然后调用函数:

gesture.type()

再使用选择语句:

switch (gesture.type()) {case Leap::Gesture::TYPE_CIRCLE:std::cout<<"TYPE_CIRCLE"<<endl;//Handle circle gesturesbreak;case Leap::Gesture::TYPE_KEY_TAP://Handle key tap gesturesstd::cout<<"TYPE_KEY_TAP"<<endl;break;case Leap::Gesture::TYPE_SCREEN_TAP://Handle screen tap gesturesstd::cout<<"TYPE_SCREEN_TAP"<<endl;break;case Leap::Gesture::TYPE_SWIPE://Handle swipe gesturesstd::cout<<"TYPE_SWIPE"<<endl;break;default://Handle unrecognized gesturesbreak;}

这样就实现了手势的识别,如果需要对检测到某个手势后进行操作,只需要在case里边添加需要执行的内容即可。

Leap::Frame & Pointable

  1. 获取手指(指尖)的坐标:
    frame.pointables()包含手指的一些信息,例如指尖的坐标,运动的方向,运动的速度,手掌的面积,宽度,长度等。
    (1)实例化pointable对象
Leap::Pointable pointable = frame.hands()[0].pointables()[i];
//i是指检测到手掌自大拇指开始向右的第i跟手指,i从0开始。

当然也可以用其他的方法去获取手指的数据:

Leap::Finger farLeft = frame.fingers().leftmost();
//从最左边开始计数
Leap::Tool rightTool = frame.tools().rightmost();
//从最右边开始计数
Leap::Finger mostForwardOnHand = frame.hands()[0].fingers().frontmost();
//

Vector(计算角度以及其他)

  • 使用angleTo()计算角度,计算两个矢量的夹角可以用以下代码实现:
angle =Vector::xAxis().angleTo(Vector::zAxis())*RAD_TO_DEG;
//这个是计算x-z轴的夹角,把这两个矢量换成你所需要计算的即可计算夹角。
  • 使用pitch,yaw,roll获取角度,获取手掌向量V与x,y,z轴的角度。
pitch = hand.direction().pitch()*RAD_TO_DEG;
yaw = hand.direction().yaw()*RAD_TO_DEG;
roll = hand.direction().roll()*RAD_TO_DEG;

(Leap motion的坐标系的x轴为Leap motion长的方向(亮灯处为正方向),y轴的正向指向天空,z轴的正方向指向使用者(也是灯指向使用者的方向))
pitch是V映射到y-z平面上的分量与-z轴的夹角。
yaw是V映射到x-z平面上的分量与-z轴的夹角。
roll是V映射到x-y平面上的分量与+y轴的夹角。

  • 手掌的旋转角度
    首先规定一下手掌顺时针旋转为正,反之为负。
    代码实现:
normal=Vector::xAxis().angleTo(hand.palmNormal())*RAD_TO_DEG-90;
//hand.palmNormal()是垂直于手掌的向量,方向向下。

初识Leap motion相关推荐

  1. 使用Leap Motion Orion开发酷炫的手势识别VR/AR应用

    Leap Motion Orien支持Oculus和HTC Vive开发,当然对Unity的支持显然是必须的. 不过前提是: 1.Windows 7 64位或者windows 10 2.Leap Mo ...

  2. Leap Motion+第六感或引发人机交互革命

    Leap Motion近来很火,火到什么程度呢?举个例子你就知道了,当Readwrite的编辑Dan Lyons去采访一个创业公司CEO,对方给他演示产品到一半时突然问他:"诶,你知道Lea ...

  3. 深度:Leap Motion手势识别大揭秘

    2016-05-03 10:11:54 来源: yivian(广州) 2013年,初创公司Leap发布了面向PC及苹果电脑MAC的体感控制器Leap Motion.但是当时Leap Motion的体验 ...

  4. Unity3D与Leap motion连接学习记录

     https://www.leapmotion.com/partnerships (Leapmotion官方网站) 把这个leapmotion手势识别相机看一下,这个开发互动非常方便,有开发sdk ...

  5. [转]这才是真正的3D显示!Leap Motion推出次毫米级3D手动控制技术,让人手和影像融为一体...

    Kinect的体感控制牛吗?但还有更牛的!近日刚获得1275万美元A轮融资的创业公司Leap Motion推出了一种新型3D动作控制系统,完全突破了以前3D控制的概念,为未来的3D交互打开了无限的想象 ...

  6. Leap Motion 上手体验

    很早之前就关注了Leap Motion这个颠覆性的体感操作设备,如今7月22日上市至今已经一个月左右,淘宝的价格也已经降到650元,虽说相对国外还是偏贵,但是已经忍不住尝尝鲜了. Leap Motio ...

  7. Unity3D中使用Leap Motion进行手势控制

    Leap Motion作为一款手势识别设备,相比于Kniect,优点在于精确度. 在我的毕业设计<场景漫游器>的开发中,Leap Motion的手势控制作为重要的一个环节.以此,谈谈开发中 ...

  8. Leap Motion开发第一步环境配置

    到leap官网下载好sdk, 找到自己sdk安装的位置, 我的是直接放在桌面上的,记住图中红线位置,等下配置环境变量会用到 找到系统的 "环境配置" 新建一个为 leapsdk的用 ...

  9. Leap Motion 之Unity 开发实战(一. 制作手的HandController)

    Leap Motion 之Unity开发实战 (一) 制作手的HandController 一. Unity官方包介绍 到如下链接下载 https://developer.leapmotion.com ...

最新文章

  1. linux挂载移动硬盘 格式化_linux系统下如何挂载NTFS移动硬盘
  2. ESPNet: 自动驾驶领域轻量级分割模型
  3. kubernetes学习笔记之七: Ingress-nginx 部署使用
  4. js返回上一页并刷新代码整理 转
  5. 魔术师发牌问题 java_魔术师发牌问题--java实现
  6. (转)DirectShow9在VS2005或vc6.0下编译出现问题的解决方法
  7. html页面中Location对象跳转页面用法
  8. android语音识别
  9. 第二部分 python基础 day10\11\12 运算符与基本数据类型
  10. php多个 运算_php计算多个集合的笛卡尔积实例详解
  11. 基于SSM的电脑商城(源码)
  12. 根据工资计算税费html,税后工资计算器2018 个人所得税excel计算公式
  13. hibou 主界面自定义侧滑
  14. 阿里云邮箱企业版和个人免费版之间的区别
  15. 条码打印软件如何批量打印快递单
  16. IE浏览器打开github点击code无响应
  17. 五年级上册计算机工作总结,小学五年级信息技术上册教学工作总结范文
  18. Python函数(西安加油!!!)
  19. 更新网卡后蓝牙无法删除亦无法连接问题
  20. Centos-openstack-Rocky-ironic部署

热门文章

  1. 一个网页显示歌词的音乐播放器
  2. Windows10系统中安装Rational Rose
  3. 兄弟Brother MFC-7240 驱动
  4. 数字化采购浪潮下,MRO工业品采购商城系统如何助力企业深化智能升级
  5. SQL*Plus 系统变量之28 - LOBOF[FSET]
  6. 使用虚拟机模拟Pickering开关及程控电阻的方法
  7. caged系统pdf_贸易术语.pdf
  8. Android androidx下的fragment懒加载
  9. Unity shader 使用 半兰伯特 (Half-Lambert)漫反射会使得模型在没有直射光的情况下漆黑一片
  10. 微信订餐系统php,微信网上订餐系统多用户版 v0.52