LeapMotion預覽php
這個就是LeapMotion:html
原文轉自: LeapMotion預覽express
LeapMotion 官網:http://leapmotion.com/app
開發者:https://developer.leapmotion.com (需註冊)ide
官方視頻:http://v.youku.com/v_show/id_XNTgzMjc5Njgw.html函數
Leap識別並綁定手,手指或者相似手指的工具,這款設備可以在毫米級別的前提下實現操做和幀率的綁定。基於Leap的SDK的軟件可以分析在設備視野能的物體,並對手,手指和工具的位置,手勢和動做作出反應!
Leap的視野範圍是一個以設備爲中心的倒狀金字塔,有效的範圍是從設備紙上26㎜到600㎜!工具
歸納預覽:動畫
1. 座標系統ui
2. 動做捕捉數據this
2.1 幀
2.2 綁定數據列表
2.3 幀動畫
3. 手模型
3.1 手屬性
3.2手的動畫
3.3手指和工具列表
3.4手指和工具模型
4. 手勢
4.1 花圈
4.2 劃過
4.3 點擊
4.3.1 按鍵類型點擊
4.3.2 屏幕類型點擊
Coordinate system
1. 座標系統
Leap遵循右手座標系,座標系中單位與世界中一毫米相對應,座標原點是設備的中心。
XZ軸組成水平的一個平面,X軸指向設備的長邊,Y軸豎直,向上爲正方向!Z軸相對屏幕向外是正方向!
2. 動做綁定數據
Leap經過綁定視野範圍能的手,手指或者工具來提供實時數據,這些數據多數是經過集合或者圳數據提供!每一幀都包含了一系列的基本綁定數據,好比手,手指或者工具的數據,固然,他也能實時的識別場景中的手勢和自定義數據!
當設備檢測到手、手指、工具或者是手勢的話,設備會賦予它一個惟一的ID號碼做爲標記,只要這個實體不出設備的可視區域,這個ID號就會一直不變,若是設備丟失這個實體以後又出現了,Leap 就會賦予它一個新的ID號碼,可是軟件不會知道這個和之前的那個實體有什麼關係。
注意:咱們計劃在發佈給消費者可以提升爲你程序提供的動畫步驟的數據。在未來發布的SDK中,咱們計劃使用骨骼手指模型來提供更加詳細的數據綁定和連續性的實時數據。
2.1 幀
A Frame object provides lists of the tracking data, gestures, and factors describing the overall motion observed in the Leap field of view.
一個Frame的對象提供了綁定數據,手勢和元素的列表,這些數據用來描述設備視野內觀察到總體的動做。
2.2 數據綁定的列表
Hands——全部的手
Pointables——全部做爲 Pointables的手指和工具
Fingers——全部的手指
Tools——全部的工具
Gestures——全部的手勢包括開始、結束或者在進行中的
這三個 可指向物體的列表(可指向物體、手指、工具)包含每個在每一種裏被檢測到的可指向的物體。你可使用一個手來訪問這些可指向的物體,這個手對象是經過Hands在手列表中的對象。須要注意的是:手指或者工具可能不會被手對象所關聯,願意是這些可指向的物體只有一部分在Leap的可視區域裏面。
若是你綁定了一個單獨的物體,好比一個手指頭,每一幀中,你均可以經過ID和那個物體關聯起來,並在新的幀裏面找到它。使用如下的方法來找到相應的類型物體。
Frame.Hand()
Frame.Finger()
Frame.Tool()
Frame.Pointable()
Frame.Gesture()
這些方法函數返回相應的對象的引用,若是在當前的幀裏面存在的話。若是這個對象再也不存在了,一個特殊的無效對象就會被返回。無效對象被很好的定義供你使用,可是不存在有效的綁定數據。這項技術幫助咱們減小了空對象檢測的工做。
2.3 幀動畫
Leap 可以分析在場景中較早的幀中的總體的動畫,而且綜合典型的移動旋轉和縮放因素。好比,若是你將兩隻手同時向左移動,並保證在Leap的視野裏面,在幀中包含了移動的信息。若是你彎曲你的手就像旋轉一個球,在幀裏面就包含旋轉的信息。若是你移動兩隻手相對或者相向移動,那麼在幀中就包含了縮放的信息。Leap設備對於動畫的分析基於在視野中的全部物體,若是有一個手在其中的話,那麼就會基於這一個手的因素來分析,若是兩個手的話,分析動畫就會基於兩個手的因素。你也能夠爲每個手得到獨立的動畫因素,須要從Hand對象裏面得到。
幀動畫的產生是經過當前的幀與更早的幀的比較得到的。描述動畫合成的屬性包括如下:
RotationAxis — 旋轉軸的方向.
RotationAngle —順時針旋轉的角度
RotationMatrix — 描述旋轉的矩陣.
ScaleFactor — 表達碰撞或者收縮的因素
Translation — 線性移動的因素
你能夠直接添加動畫因素來操做這些物體,而不須要綁定我的的數據。
【2013-07-14 添加手模型的 信息】
3.手模型
這個 手模型 提供了被綁定的手的位置信息、特色以及運動方式。而且還包括了手指或者手上的工具的全部和手關聯的東西的信息。
LeapAPI儘量多的提供關於手的信息。可是,Leap不可以肯定每一幀全部屬性。好比當你的手忽然攥成了拳頭,這個時候,它上面的全部的手指是不能用了,手指的list就成了空。因此你的程序須要對這種狀況最一個檢測。
Leap設備不能肯定某一個手是左手仍是右手,多於兩個手出現均可以放到list裏面去,若是不止一我的將手放進來,或者有一個像手的物體。然而仍是建議最多兩個手來保證動做步驟的質量。
3.1 Hand 類屬性
Hand對象提供了幾個屬性來反映綁定後的手的物理特性:
PalmPosition — The center of the palmmeasured in millimeters from the Leap origin.
PlamPosition——手掌中心到Leap設備原點以毫米測量的距離
PalmVelocity — The speed of the palm in millimeters per second.
PalmVelocity——以 毫米每秒爲單位的手掌移動的速度。
PalmNormal——一個向量,這個向量是垂直於手掌所造成的平面的。而且向量從手掌出來指向下。
Direction——一個向量,從手掌指向手指的方向。
SphereCenter——適合手彎曲後曲率的一個球的中心(就像用手握住一個球同樣)
SphereRadius — The radius of a sphere fit to the curvature of the hand. Theradius changes with the shape of the hand.
SphereRadius——適合手彎曲後曲率的一個球的半徑,這個半徑隨着手的形狀而變化。
direction 和PalmNormal是一個單位向量,描述了手相對於Leap設備的座標系統。
PalmNormal向量指向了手掌的垂直向外的方向。Direction向量指向前。
咱們手握住的時候,就好象有一個球在手裏,SphereCenter和SphereRadius就描述了這樣一個球的中心和半徑,這個球的曲率隨着咱們的手變化。
3.2 手的動做
Hand對象也提供了一些屬性來反映綁定的手在frames中的動做。Leap設備分析手的動做就像分析手指和工具的而且表明了移動、旋轉、縮放等因素。在Leap設備的可視範圍內移動手指表示移動,旋轉、彎曲或者傾斜你的手錶示旋轉,是手指或者工具相對或者相對的移動表示縮放。
手的動做是經過比較手在當前frame的屬性和較早的frame相比較產生的,手動做的屬性包括:
RotationAxis — A direction vectorexpressing the axis of rotation.
RotationAxis——一個方向向量來表示旋轉的軸
RotationAngle — The angle of rotation clockwise around the rotation axis (usingthe right-hand rule).
RotationAngle——沿着旋轉軸順時針所轉動的角度(使用右手定則)
RotationMatrix — A transform matrix expressing the rotation.
RotationMatrix——一個表達旋轉的變化矩陣
ScaleFactor — A factor expressing expansion or contraction.
ScaleFactor——一個表達收縮或者放大的因素
Translation — A vector expressing the linear movement.
Translation——一個表達線型移動的向量
3.3 手指和工具列表
你可使用下面三個當中的一個來訪問fingers或者tools:
Pointables — Both fingers and tools asPointable objects.
Pointables——finger和 tools 都是Pointable 對象(下面兩個繼承於它)
Fingers — Just the fingers.
Fingers——僅僅是fingers
Tools — Just the tools.
Tools——僅僅是tools
你也可使用 從前一幀獲取的ID值來訪問fingers或者tools,使用 Hand.finger() ,Hand.tool()或者若是你不須要區分這二者的話但是使用 Hand.pointtable()方法。
4. 手指和工具的模型
在Leap設備可視區域裏面能夠識別並綁定手指和相似手指的工具。Leap設備將像手指的對象經過形狀歸爲tools。工具對手指來講更長、更瘦、更值。
In the Leap model, the physical characteristics offingers and tools are abstracted into a Pointable object. Fingers and tools aretypes of pointable objects. The physical characteristics of pointable objectsinclude:
在Leap模型裏面。手指或者工具的物理特性被抽象問Pointable對象。而且fingers和tools是pointable對象類型的。Pointable對象的物理特性包括:
Length — The length of the visibleportion of the object (from where it extends out of the hand to the tip).
Length——這個能夠被看見的物體的長度(從手裏陳出來到指尖)
Width — The average width of the visible portion of the object.
Width——但是物體的平均寬度
Direction — A unit direction vector pointing in the same direction as theobject (i.e. from base to tip).
Direction——一個和物體所指的方向同樣的單位方向向量
TipPosition — The position of the tip in millimeters from the Leap origin.
TipPosition——末梢的位置距離Leap設備多少毫米
TipVelocity — The speed of the tip in millimeters per second.
TipVelocity——末梢以毫米每秒的移動速度
手指的 TipPosition and Direction 向量爲咱們提供了手指末梢的位置和手指所指的方向。
Leap設備將所綁定的物體分爲手指或者工具。使用 Pointable.isTool屬性就能夠判斷這個綁定的物體是手指仍是工具了。
工具跟手比起來更長、更細、更直。
5.手勢
Leap設備做爲手勢分析某一個運動模式,這個運動模式裏面可能包含了用戶的想法或者命令。設備響應在frame中觀察到的手勢和相應手指綁定數據和手是同樣的。對於每個觀察到的手勢,設備就會在frame中放置一個Grsture對象。你能夠從 Frame gestures列表中獲取這個對象。
如下運動模式可以被Leap所識別。
Circle — A single finger tracing a circle.
Circle——單一的手指被或者旋轉一週
Swipe — A linear movement of the hand.
Swipe——一個手的直線運動
點擊
Leap設備可以分析兩種類型的點擊:向下的 KeyTap 和向前的 ScreenTap
Key Tap — A tapping movement by a finger as if tapping a keyboard key.
KeyTap—— 一種就像點擊鍵盤的點擊運動
Screen Tap — A tapping movement by the finger as if tapping a vertical computerscreen.
ScreenTap——一種點擊運動就像點擊一個虛擬的電腦屏幕
當Leap設備首先將一個運動模式分類爲手勢的時候,首先對Frame裏面添加了一個Gesture 對象。若是這個手勢持續到結束時間。Leap就對在隨後的Frame裏面更新這個Gestures對象。手勢 Circle和Swipe是連續的,設備在每一幀都更新手勢的進度。點擊是分離的手勢。設備響應點擊是使用了一個單獨的Gesture對象。
重要的是:在在你的應用程序使用手勢以前,你須要開啓每個你須要用的手勢。在Controller類中有一個方法 EnableGesture() 你可使用它來開啓你須要用到的手勢。
Circle
畫圈
設備識別一個手指頭畫一個圈做爲Circle手勢。
手指畫圈動做
你可使用手指或者工具畫圈。Cirlce 手勢是一個連續性的手勢,一旦手勢開始,設備就開始更新進度知道手勢結束。Circle手勢在畫完或者背離圓弧軌跡或者畫的太慢。
滑動
設備認爲一個手指線性移動是Swipe手勢。
一個水平滑動的手勢
你可使用任何一個手指在任何方向上作一個平滑的手勢。平滑的手勢也是連續性的手勢。一旦手勢開始,Leap設備就會一直更新這個手勢的進度直到結束。一個平滑移動的手勢的結束包括改變了移動方向或者移動的太慢。
點擊
設備識別兩種類型的點擊:向下點擊和向前點擊(KeyTap和ScreenTap)
鍵盤點擊
設備識別一種快速的向下的手指或者工具的移動做爲KeyTap。
一種KeyTap 的點擊方式
你能夠作一個鍵盤式的點擊手勢經過把手指像是彈鋼琴同樣的向下點擊。點擊是獨立的手勢,一個Gesture對象只對一次點擊手勢添加。
屏幕點擊
設備分析手指或者工具的一個快速的向前的點擊屏幕的運動爲ScreenTaps。
一種screentap的手勢點擊效果
你能夠經過使用手指或者工具向前推動就像點擊垂直的屏幕同樣作一個ScreenTap。ScreenTap也是離散的因此一個點擊手勢智慧添加一個Gesture對象。