关闭

Leap Motion 探究 【第四篇】

标签: leap motion
489人阅读 评论(2) 收藏 举报
分类:

       这一章说说Coordinate,坐标系。

       有朋友要问了,Leap不是本来就有坐标定义吗?对,这里附加的Coordinate是为了更方便的定义实体范围,比如这个官方例子:


       红色是Leap硬件能够采集的空间大小,如果我们要让球不能超越一个竖直的界线,我们通常会在程序中设定,超越边界时坐标值保持边界极限值。而Leap给我们提供了一个更加底层一些的做法,自定义坐标系大小,将2D或3D空间自我量化。


       倒金字塔是Leap硬件可采集的范围,红色是我们定义出的一个Box,超出这个范围,我们就不要数据了。实例化这个Box即新建一个InteractionBox。这是官方给出的2D平面的坐标量化实例:

int appWidth = 800;
int appHeight = 600;

InteractionBox iBox = leap.Frame().InteractionBox;
Pointable pointable = leap.Frame().Pointables.Frontmost;

Leap.Vector leapPoint = pointable.StabilizedTipPosition;
Leap.Vector normalizedPoint = iBox.NormalizePoint(leapPoint, false);

float appX = normalizedPoint.x * appWidth;
float appY = (1 - normalizedPoint.y) * appHeight;
//The z-coordinate is not used

       程序指定一个长度800,高度600的垂直剖面。不要疑惑为啥Y轴是(1-y)*Height,因为官方给的例子就是反转的。官方给了一个tip,记得用hand.stabilizedpalmposition或Pointable.stabilizedTipPosition来稳定操作,能有效的过滤掉一些抖动。具体使用,可以借鉴官方的例子:

Leap.Vector differentialNormalizer(Leap.Vector leapPoint,
                           InteractionBox iBox,
                                   bool isLeft,
                                   bool clamp)
{
    Leap.Vector normalized = iBox.NormalizePoint(leapPoint, false);
    float offset = isLeft ? 0.25f : -0.25f;
    normalized.x += offset;

    //clamp after offsetting
    normalized.x = (clamp && normalized.x < 0) ? 0 : normalized.x;
    normalized.x = (clamp && normalized.x > 1) ? 1 : normalized.x;
    normalized.y = (clamp && normalized.y < 0) ? 0 : normalized.y;
    normalized.y = (clamp && normalized.y > 1) ? 1 : normalized.y;

    return normalized;
}
      由于定义了坐标系,我们可以调整灵敏度,但通过坐标放大的Scale,灵敏度是线性变化的,这点在大部分情况下适用。官方的例子也给出了:

float appWidth = 800;
float appHeight = 600;

InteractionBox iBox = leap.Frame().InteractionBox;
Pointable pointable = leap.Frame().Pointables.Frontmost;

Leap.Vector leapPoint = pointable.StabilizedTipPosition;
Leap.Vector normalizedPoint = iBox.NormalizePoint(leapPoint, false);

normalizedPoint *= 1.5f; //scale
normalizedPoint -= new Leap.Vector(.25f, .25f, .25f); // re-center

float appX = normalizedPoint.x * appWidth;
float appY = (1 - normalizedPoint.y) * appHeight;
//The z-coordinate is not used

      定义坐标这个东西如果不是特别要求,意义不是特别大,但是VR中,空间的概念应该是稳定,精确的,这时候Coordinate应该是一个重头戏,现在先摸一遍所有的API,等实际使用中发现问题再好好试。具体例子还是以SDK为准,我之前做的模拟飞行例子已经加上了坐标检测,油门量是通过Z轴调整的,可以跳转至优酷看看,点我点我点我


        另外说一下,昨天没有解决的问题,就是Finger和Gesture对应。好好的看了下SDK,由于Gesture等级是低于Hand的,所以直接在Gesture中找Finger或者Finger中找Gesture是没有可能的,只能想办法去匹配坐标,今天大概试了一下,有一些小问题,日后解决了直接传代码。

        这周团队要交付个小项目,估计没时间更新了,看看能不能抽时间写个Leap控制鼠标的程序试试看。

0
0
查看评论

初识Leap motion

Leap motion
  • shiwq13
  • shiwq13
  • 2016-04-26 21:11
  • 452

ubuntu 16.04安装使用leap motion

1、http://www.linuxdiyf.com/linux/23737.html 2、https://www.leapmotion.com/setup/desktop/linux
  • StefanSalvatore
  • StefanSalvatore
  • 2017-06-01 20:48
  • 448

Unity leapmotion开发实录(5)完结篇

本系列文章将会从一个初学者的脚步去讲解unity和leapmotion协同开发的一系列问题: 基础 环境搭建 场景创建 核心组件使用 sdk使用 脚本编写与功能实现方法 代码优化 UI交互部分 特:本人水平有限所以有错误请及时指正 本人也会引用一些代码如果有所侵犯请联系删除 自...
  • admintan
  • admintan
  • 2015-12-24 19:11
  • 9237

关于leap motion的原理和疑点

关于leap motion的原理和疑点 转载来自    http://www.cnblogs.com/CVArt/archive/2012/05/28/2520967.html, 感觉介绍的很不错。牛人啊   一、关于原理的讨论 ...
  • m_kiss
  • m_kiss
  • 2012-05-28 14:40
  • 13397

LeapMotion官方开发翻译文档现在免费下载

该文档原本在淘宝网进行售卖,但由于LeapMotion的SDK发展很迅速,没想到一个这么小的硬件可以搞这么代多SDK。我也无暇去更新SDK信息,并且对体感开发没有之前那么热情了。现在我在这里公布出以前售卖的LeapMotion SDK翻译,供大家参考。 下载地址:http://pan.baid...
  • guoming0000
  • guoming0000
  • 2016-03-27 23:19
  • 1058

使用Leap Motion可视化工具

持续维护地址 http://52coding.com/using-the-leap-motion-visualizer 使用Leap Motion可视化工具 这篇文章描述Leap Motion可视化工具应用程序(Visualizer),它可以让你看到Leap Motion控制器捕获的...
  • guoming0000
  • guoming0000
  • 2013-07-28 14:51
  • 3956

LeapMotion开发(一)--下载安装以及C++环境配置

LeapMotion的配置入门,以C++的demo为例,介绍了如何下载安装以及配置lib以及dll环境~
  • zmdsjtu
  • zmdsjtu
  • 2016-09-12 15:57
  • 4650

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

Leap Motion 之Unity 开发实战,第一部分:如何制作手的HandController。
  • eagle_pre21
  • eagle_pre21
  • 2016-06-28 16:20
  • 6510

Leap Motion 教你玩转手势

刚尝试手势的时候我差点选择放弃,现在想想还是自己不好好看SDK,小心使得万年船啊。         五一不想断更的,实在是没办法,出去的急忘了带笔记本,只好断更。下午才回来,毕竟这种万年没休的也习惯这种生活方式了,反而出去溜达感到闲的蛋疼。   ...
  • qq_26399665
  • qq_26399665
  • 2016-06-02 20:49
  • 4631

leap motion 系统简介

从leap motion官网的介绍文章leap motion overview中,提取出个人认为有价值的东西,做下笔记,也是分享,希望能给大家带来帮助。原文地址 https://developer.leapmotion.com/documentation/Languages/C++/Guides/L...
  • smilingeyes
  • smilingeyes
  • 2013-10-30 21:12
  • 4731
    个人资料
    • 访问:14398次
    • 积分:327
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:1篇
    • 译文:0篇
    • 评论:10条
    文章分类
    最新评论