持续维护地址 http://guoming.me/leap-motion-architecture
翻译网页 https://developer.leapmotion.com/documentation/GetStarted/Leap_Architecture.html
Leap Motion架构
Leap Motion体感控制器支持最流行的桌面操作系统。Leap Motion程序作为一个服务(在Windows中)或一个守护进程(在Mac和Linux中)。这个程序通过USB总线和Leap Motion体感控制器相连。基于Leap的应用程序通过Leap Motion服务来获取运动追踪数据。Leap Motion的SDK提供两类API来获取Leap Motion的数据。这些API可以让你在多个语言下开发基于Leap的应用程序,包括在浏览器中运行JavaScript语言。
注意:Leap Motion 服务/守护进程通过TCP端口:127.0.0.1:5905来与应用程序通信。这个地址-端口必须不是被防火墙或其它程序屏蔽的。
Leap Motion SDK提供两类API来从Leap Motion服务中来获取追踪数据,一个是原生接口,一个是网页套接字WebSocket。原生接口是一个可以让你创建新的Leap应用程序的动态库。而网页套接字接口和JavaScript客户端库使你可以创建基于Leap的应用。
应用程序接口通过动态链接库提供。这个库连接到Leap Motion服务,并且为您的程序提供追踪数据。你在C++和Objective-C开发的应用中可以直接链接到库中,或者通过Java,C#和Python的语言绑定链接。
上图是:基于Leap的应用程序
1.Leap Motion的服务通过USB总线,从Leap Motion控制器接收数据。它[这个服务]处理这些信息,然后发送到正在运行的Leap应用。默认情况下,服务仅仅向前台应用程序发送追踪数据。但是,应用程序可以通过询问方式,使得他们从后台也可接收数据(询问可以被用户否定)。
2.Leap Motion的设置对话框是和服务独立的,它允许计算机用户配置Leap Motion的安装。在Windows下,这个配置程序是个控制面板小程序,而在Mac X操作系统下是个菜单条。
3.前台Leap Motion应用程序从服务接受运动追踪数据。一个Leap应用程序可以通过原生Leap Motion库链接到Leap Motion服务。你的应用程序既可以通过C++和Objective-C直接连到原生库上,也可以通过语言包装库(Java,C#和Python)链接。
4.当一个Leap应用程序失去了操作系统焦点,Leap Motion服务则停止向它发送数据。经过请求许可,应用程序可以在后台接收数据。当运行在后台时,由前台程序配置。
Leap Motion的服务以网页套接字(WebSocket)在本地域6437端口下运行。网页套接字接口通过JSON信息提供追踪数据。一个JavaScript本地库可以接受JSON消息,并且把追踪数据作为普通的JavaScript对象。
上图:Leap网页应用程序
1.Leap Motion服务提供网页套接字服务,监听http://127.0.0.1:6437。
2.Leap Motion的设置对话框运行用户启动或禁止网页套接字服务。
3.服务端以JSON信息形式发送追踪数据。一个应用程序可以向服务器返回配置信息。
4.leap.js客户端JavaScript库应该在网页应用中使用。这个库建立与服务器的链接,并且接受JSON信息。有JavaScript库提供的API与原生API的结构类似。
这个接口主要目的是用于网页应用,但是任何可以建立网页套接字的应用程序都能使用它。这个服务符合RFC6455。
Leap Motion库是由C++编码的。Leap Motion还是用了SWIG,一个开源工具,来生成C#,Java和Python的语言绑定。SWIG生成的绑定可以翻译绑定语言对于C++ Leap Motion库的调用。每个SWIG绑定都使用两个附加的库。对于JavaScript和网页程序的开发,Leap Motion提供了一个网页套接字服务和一个客户端JavaScript库。
在开发Leap应用程序和插件时,需要的所有的库、代码和头文件都包含在Leap Motion的SDK里,除了leap.js的客户端JavaScript库。你尅通过Leap Motion开发门户网站来下载Leap Motion SDK。对于任何支持的操作系统,SDK压缩包都有提供。JavaScript客户库是独立的,可以从LeapJS GitHub repository下载。
用C++开发Leap Motion控制器应用,你需要在你的程序中,加入API头文件并且链接上Leap Motion库,根据操作系统,可能是libLeap.dylib,Leap.dll或者是libLeap.so等。
Objective-C应用由手写的封装代码提供。为了建立一个Objective-C的Leap应用程序,你需要在程序中包含C++头文件,然后是封装头文件和Objective-C++代码文件。你可以使用在封装中定义的纯Objective-C类。将你的程序链接上libLeap.dylib并且导入在你应用程序包下的库。
C#类的定义由独立的库分别提供.NET 3.5和.NET 4.0环境。你的代码既可以参考LeapCSharp.NET3.5.dll,也可以参考LeapCSharp.NET4.0.dll(在所有支持的操作系统下,都使用同样名称的库)。这些库加载libCSharp.dylib(Mac),LeapCSharp.dll(Windows)或者libLeapCSharp.so(Linux)。中间库加载libLeap.dylib,Leap.dll或者libLeap.so(依赖于系统)。
使用.NET3.5库来进行Unity 3D游戏的程序开发。Leap Motion SDK提供了一个Unity开发环境的”Pro”版本的Unity插件。查看知识库的文章,确认各个版本的Unity editor是否支持关于开发Leap应用的插件。
Leap.jar包含Leap Motion的Java类。这个代码载入libLeapJava.dylib(Mac),LeapJaval.dll(Windows)或者libLeapJava.so(Linxu)。这些包含原生代码的库可以将Java函数的翻译成在libLeap.dylib,Leap.dll或者libLeap.so的基本Leap Motion API。基本Leap Motion动态库可以通过中间库载入。
Leap.py包含Python模块,你可以在你的Python应用程序中使用。这个模块加载LeapPython.so(Mac和Linxu)或者LeapPython.dll(Windows)。这些库加载libLeap.dylib,Leap.dll或者libLeap.so。
Leap Motion JavaScript有两个重要组成部分。第一个部分是网页套接字服务器,由Leap Motion服务提供。这个服务器允许网页应用(或者任何可以链接到网页套接字的程序)来获取以JSON格式信息的Leap Motion追踪信息。第二个部分是JavaScript客户端库,Leap.js。Leap.js是一个开源JavaScript API可以接受网页套接字JSON输出,并且以物理上和结构上都与原生Leap MotionAPI类似的形式呈现。
其它社会创建的语言绑定版本可以从链接看到。
Leap Motion程序目前支持OS X 10.6和Windows 7+。还有一些试验中的alpha版本的Linux SDK提供给开发者。