Leap Motion 之Unity 开发指南(二. 开发架构和SDK)L

来源:互联网 发布:淘宝产品文案怎么写 编辑:程序博客网 时间:2024/05/01 18:48

LeapMotion 之Unity开发指南(二. 开发架构和SDK)


一. Leap Motion开发架构

在Windows下,LeapMotion软件是作为一个后台服务在运行(在ControlPanel中可检视),在Mac和Linux下则是一个驻留程序在运行,都通过USB总线与硬件控制层通信。上层的App应用则与这个服务(或驻留程序)通讯,获得手势跟踪数据。

Leap Motion SDK提供了两种类型的API获得手势数据,一种是本地接口方式;一种是WebSocket接口方式,因而我们可用使用多种语言(包括JavaScript)开发应用。

1.      本地接口

即:动态库方式,可以直接在C++或Object-C中调用,或通过Java,C#,Python的封装库来调用。应用可以设计成前台与后台两种方式。


2.      WebSocket接口

以WebSocket Server运行于localhost的端口6437。跟踪数据以JSON格式提供。JS库是leap.js

 

 

二.LeapMotion的SDK库

LeapMotion SDK包含了两种基本库,一种C++,一种C;之上再封装为C#和Object-C可调用的库。Java,Python则使用了一个开源工具SWIG对基本库进行封装和调用,对于JavaScript和Web应用开发,提供了WebSocket Server和JS库来实现调用。

各语言开发环境的要求:

·      C++ on Windows: Visual Studio2008, 2010, 2012, and 2013

·      C++ on Mac: Xcode 3.0+, clang3.0+, and gcc

·      Objective-C: Mac OS 10.7+, Xcode4.2+ and clang 3.0+

·      C# for .NET framework versions3.5+

·      Mono version 2.10

·      Unity Pro and Personal versions5.3+

·      Java versions 6 and 7

·      Python version 2.7.3

·      UnrealEngine 4.9+

三.Unity 主要类介绍

1.      Leap.Unity 命名空间下的类

此命名空间下的类负责与Unity的GameObject或组件交互,获取跟踪数据。

·        LeapServiceProvider

访问跟踪(手势轨迹)数据和图形,并与LeapController对象通信,转换轨迹数据为Unity的制式;同时将右手坐标转化为左手坐标。

·        IHandModel,HandModel,或继承于它们的 类(如CapsuleHand)–

所有的手都基于这些接口和类,如果你创建自己的手,你必须实现IHandModel 或继承HandModel.

·        LeapHandController

负责与手的图元以及物理对象进行交互。

2.      Leap命名空间leap     Leap 

Leap空间中的类定义了LeapMotion所跟踪的具体内容。

·        Frame

帧是某个时间点的数据集合,一个帧包含了Hand对象。

·        Hand

一个Hand手对象表示了一个跟踪的手,一个手总是包含5个手指以及相关属性如:Direction,PalmPosition,和Basis(orientation).

·        Finger

一个Finger手指对象表示了追踪的手指。一个手指包含四个骨头。

·        Bone

Bone骨头对象表示手指的一段,并包含位置、大小和方位数据。

·        Arm

Arm胳膊对象是特殊的Bone,其实是跟踪了前臂。.


Leap命名空间下的脚本不是仅专属于Unity的,也可被任何C#程序调用。但在Unity中使用这些类有一些重要的区别:你必须从LeapProvider中获得Frame对象,而不是从Controller对象。LeapProvider将Leap Motion的坐标空间转为Unity的。如果你直接从Controller中获得帧,那么你必须自己处理这些转化。

LeapMotion和UnityAPI为向量和空间变换定义了各自的类,你可以从Leap Motion的类转为Unity等价的类,如下例所示。

Vector3 unityVector = leapVector.ToVector3();
Quaternion unityRotation = leapMatrix.Rotation();
Vector3 unityTranslation = leapMatrix.origin.ToVector3();
Vector3 unityScale = new Vector3(leapMatrix.xBasis.Magnitude,
                                 leapMatrix.yBasis.Magnitude,
                                 leapMatrix.zBasis.Magnitude);

 

 

0 0
原创粉丝点击