前言:
一直想做一個簡單的教程關於如何使用flash客戶端(exe或swf)的TUIO模擬器。如果你不知道TUIO協議是什么,請先閱讀本文TUIO介紹的部分.
需求環境:
1、flash player 9++(一般瀏覽器都會帶的),沒有的請下載。
2、Java Runtime 6+,沒有的請下載。
說明:
1>、下載附件並解壓到你的桌面;
2>、打開Flosc.jar,點擊start;
3>、打開Simulator.jar
4>、打開Test.exe;
5>、返回Simulator.jar並且在里面用鼠標畫圓,你會在Test.exe里看到相應的效果。可以使用shift+鼠標來模擬多個點觸摸(更多信息請參照Simulator里面的幫助文件)。
原理:
基本步驟:
1、TUIO(OSC)數據是從Simulator或者觸摸庫中的“osc.exe”;
2、FLOSC通道將OSC數據(UDP)轉換為XMP(TCP);
3、flash客戶端通過XML串口來接收和識別XML數據,並在你的應用程序中渲染鼠標的事件。
注意:
• 主機:localhost -----端口:3000/3333
• TUIO和OSC的數據必須一致
• 需要步驟2的原因是flash不能識別UDP數據,所以我們要轉換為TCP
• 直接二值化的方法沒有在本教程中涉及,要了解請移步到Binary Socket Connection in flash.
TUIO是什么?
TUIO(Table-Top User Interfaces Objects)是一種簡單通用的協議,被設計於特定要求的觸摸屏設備人機界面。靈感來自於互連的想法存在於各種表面互動的接口如reacTab或AudioTouch。TUIO協議已經在OpenSound Control上實施,並且可以在支持這種協議任何平台中使用。
簡單的說:TUIO是一種格式化OSC數據的標准方法。
了解更多請閱讀文章《TUIO Documentation》.
消息語法:
當TUIO應用OSC會使用它的基本語法:
/tuio/[profileName] set sessionID [parameterList]
/tuio/[profileName] alive [list of active sessionIDs]
/tuio/[profileName] fseq int32
參數:
我們在表面互動界面非常重視的對象屬性在這部分的參數定義中反映了出來。每一個對象都會分配一個session ID,非常必要的唯一標識未加標簽在連續幀的對象,在這種情況下,多個對象標記為相同的classID同時出現在表面。
其中的一些參數(id、position和angle)直接由傳感器獲取。其他的(速度、加速度)派生從這些主要參數使用定時信息。計算這些參數在低水平側的觸摸用戶接口系統允許一個更高效的計算,因為必要的計時信息不需要被轉移到客戶端。
參數允許使用下面一組信息:
s sessionID, temporary ob ject ID, int32 i classID, fiducial ID number, int32 x, y, z position, float32, range 0...1 a, b, c angle, float32, range 0..2PI X, Y ,Z movement vector (motion speed & direction), float32 A, B, C rotation vector (rotation speed & direction), float32 m motion acceleration, float32 r rotation acceleration, float32 P free parameter, type defined by OSC packet header
配置文件:
我們定義一組配置文件,它適用於大多數桌面可觸摸的用戶界面。這使得物體跟蹤和鼠標在在二維表面,在特殊情況下也在桌面上方三維空間表面。如果其中一個預定義的配置文件不滿足系統的要求我們還允許所謂的原始資料,發送原始傳感器數據,以及自由形式配置文件,它允許一個用戶定義的一組參數傳送。
2D的互動表面:
/tuio/2Dobj set s i x y a X Y A m r
/tuio/2Dcur set s x y m r
3D的互動表面:
/tuio/3Dobj set s i x y z a X Y Z A m r
/tuio/3Dcur set s x y z m r
自定義的配置文件:
/tuio/_[formatString]
/tuio/_ixyP set s i x y 0.57