吳學毅
?
OSG多點觸控自然用戶接口框架①
吳學毅
(西安理工大學印刷包裝與數(shù)字媒體學院, 西安 710048)
OSG多點觸控自然用戶接口框架是在Windows多點觸控技術基礎上, 將觸控事件的管理和處理與OSG的事件處理機制相結(jié)合, 形成了OSG的多點觸控運行框架. 在與用戶交互過程中產(chǎn)生手指觸屏的原始數(shù)據(jù), 根據(jù)這些原始數(shù)據(jù)定義所需的手勢, 并將其與OSG中交互事件處理機制相結(jié)合, 完成利用多點觸控對三維場景的交互操作. 基于以上原理, 分析了三維用戶交互中主要的操作任務, 定義了符合三維空間操作認知的多點觸控交互手勢, 設計了相關手勢的識別算法, 并通過實例應用的開發(fā)驗證了這一原理和設計成果的正確性和可行性.
多點觸控; OSG; 自然用戶接口; 三維應用; 手勢識別
自然用戶接口(Natural User Interface, NUI)是一種允許用戶使用來自于其他系統(tǒng)的知識、方法與系統(tǒng)進行交互的用戶接口[1]. 多點觸控技術使得人與機器的交互變得更加便捷、自然, 已被廣泛作為平板電腦、智能手機等移動設備很普遍的用戶接口[2], 近年來也被應用于三維應用的交互控制與操作. OSG(OpenSceneGraph, 簡稱OSG)作為一種先進的開源三維圖形引擎, 因其具有優(yōu)異的場景圖組織、支持主流三維技術、移植性好、開發(fā)快速等特點而被廣泛地應用于三維圖形開發(fā)領域[3].
多點觸控的研究主要集中在相關硬件設備的研制、手勢的定義、識別以及支持多點觸控軟件框架3個方面. 目前三個最流行的多點觸控軟件框架包括:開源框架TUIO(Tangible User Interface Objects), Microsoft的 Windows7 SDK和PQ labs多點觸控SDK[4]. TUIO為多點觸摸設備和軟件定義了一個通用的協(xié)議和API, 允許傳輸抽象的交互表面描述, 包括觸摸事件和物體狀態(tài). TUIO不提供手勢分析. Windows7的SDK和PQ labs僅提供了原始觸控數(shù)據(jù)或者基本的手勢支持, 不足以應對非常復雜的應用. 人們在多點觸控手勢識別上進行了大量研究, 如使用圖像處理進行手勢識別[5]等, 在二維空間取得了較好成果, 但針對三維空間圖形應用的技術尚不成熟[6]. 2011年OSG發(fā)布3.0版本開始支持多點觸控軟件框架,僅提供了窗口多點觸控功能注冊、多點觸控事件處理、多點觸控原始數(shù)據(jù)的相關類. 對于滿足復雜三維空間交互操作的多點觸控手勢定義和實現(xiàn)至今仍無完整支持.
本文主要研究了OSG中多點觸控自然用戶接口的應用框架, 根據(jù)三維交互任務的需要分析了三維交互中所需的操作手勢, 結(jié)合對OSG中有關多點觸控原始數(shù)據(jù)的研究, 擴展了OSG中的手勢識別類型, 利用OSG中事件處理機制和漫游器操作類, 實現(xiàn)了基于多點觸控的三維交互操作, 并結(jié)合應用實例驗證了上述框架的可行性、有效性和可擴展性.
OSG是在Windows 7 SDK多點觸控框架的基礎上構(gòu)建了自己的多點觸控技術框架, 并完全繼承了Windows 7 SDK中WM_TOUCH消息處理機制和主要的函數(shù)[6,7]. 在此基礎上將多點觸控事件和原始觸控數(shù)據(jù)引入OSG的事件隊列中進行管理和處理, 并將多點觸控手勢轉(zhuǎn)變?yōu)槭髽耸录愋? 在OSG刷新每一幀時使用事件適配器處理相應的事件, 完成三維場景對多點觸控事件的響應. 其多點觸控的框架如圖1所示, 完成了從交互事件觸發(fā)到交互結(jié)果顯示的封閉處理.
圖1 OSG多點觸控結(jié)構(gòu)框架
交互設備是支持多點觸控功能的觸控屏, 作為觸控事件的發(fā)起者, 同時也作為向用戶展示觸控操作結(jié)果的介質(zhì). 交互事件首先被Windows捕獲, 并傳遞給OSG的事件隊列[5]. 事件隊列再將觸控數(shù)據(jù)分發(fā)給GUI事件適配器. GUI事件適配器是OSG中處理不同 事件的主要類, 在提供給程序員的多點觸控派生類事件處理函數(shù)handle()中可以針對不同多點觸控事件進行不同處理, 同時可以獲取原始的多點觸控數(shù)據(jù). 然后根據(jù)手勢與交互任務的映射關系, 調(diào)用三維漫游器類和設計好的三維交互操作, 即可完成三維空間的漫游和其他交互操作.
1.1 OSG中多點觸控事件處理
OSG中對多點觸控事件處理涉及Graphics WindowWin32、EventQueue、GUIEventAdapter等類, 其多點觸控事件處理流程如圖2所示.
Windows采用消息機制來完成事件的捕捉或處理, 而OSG則是在GraphicsWindowWin32類的handleNativeWindowingEvent()函數(shù)中實現(xiàn)消息處理機制, 其中多點觸控事件是通過對WM_TOUCH的捕獲來處理的. 從wParam和lParam中獲得觸控數(shù)據(jù), 并將觸控事件類型分為TOUCHEVENTF_DOWN、TOUCHEVENTF_MOVE和TOUCHEVENTF_UP3種類型分別處理, 繼而將事件和數(shù)據(jù)傳入到OSG事件隊列處理類. EventQueue類可以理解為對交互事件進行添加和分發(fā)處理的集合, 它保存了一個GUIEventAdapter的隊列, 并通過touchBegan、touchMoved、touchEnded方法向隊列中新增觸控事件和數(shù)據(jù), 從而使得用戶可以在自己的派生類中進行事件處理. 這一隊列會在場景渲染的每一幀被遍歷、執(zhí)行和清理, 從而確保用戶交互動作的順利進行[6]. 在客戶端, 通常由用戶自定義一個派生自GUIEventAdapter的類, 并通過重載handle函數(shù)來處理各種事件的響應, 并將觸控事件轉(zhuǎn)化為鼠標的PUSH、DRAG、RELEASE事件類型進行不同處理, 而觸控點原始數(shù)據(jù)也可傳入其中, 為手勢的識別和定義提供了數(shù)據(jù)基礎.
1.2 多點觸控數(shù)據(jù)流
在OSG中多點觸控數(shù)據(jù)流是伴隨著事件處理流程在不同階段進行傳遞, 如圖2所示, 并在不同階段使用不同的數(shù)據(jù)結(jié)構(gòu)進行存儲.
在GraphicsWindowWin32中使用Windows SDK中通用多點觸控數(shù)據(jù)結(jié)構(gòu)體TOUCHINPUT來存儲數(shù)據(jù), 涉及觸控點ID(dwID)、觸控狀態(tài)(dwFlags)、觸控點坐標(x, y)和時間等數(shù)據(jù). 這些數(shù)據(jù)隨事件處理流程被帶入到EventQueue類中, 又隨著不同事件的處理被傳遞到GUIEventAdapter類中. 在該類中使用TouchData類存儲觸控數(shù)據(jù), 并提供了訪問、遍歷觸控數(shù)據(jù)的函數(shù). 其中存儲的主要觸控數(shù)據(jù)有觸控點ID(id)、觸控狀態(tài)(phase)、觸控點坐標(x, y)和點擊計數(shù)(tapCount)等. 每一觸控事件發(fā)生時, OSG均可獲得這些數(shù)據(jù), 在隨后的事件發(fā)生時, 結(jié)構(gòu)體中前一次事件的數(shù)據(jù)會丟失. 這些原始數(shù)據(jù)會被傳遞到用戶自定義交互事件處理類中被用來處理多點觸控事件. 在OSG中僅提供了一個多點觸控軌跡球類MultiTouchTrackballManipulator, 目前可以提供對2個手指的縮放、平移, 3個手指同時點擊回到家位置的簡單多點觸控操作支持, 尚不能滿足三維空間復雜交互 操作需求.
OSG在底層提供了較為完善的多點觸控交互功能框架, 但是在針對三維空間操作中的手勢定義和功能實現(xiàn)上尚不完善. OSG對多點觸控手勢的定義只有平移、縮放, 不能滿足復雜應用三維空間人機交互的需要. OSG未提供在原始數(shù)據(jù)基礎上的手勢識別算法, 另外由于三維交互任務復雜至今仍未對三維空間交互手勢與任務間映射關系形成公認的結(jié)論, 因此, 解決三維空間的多點觸控操作仍須進行大量研究.
由于三維空間交互操作的復雜性和需求的多樣性, 目前對三維空間交互操作任務尚無明確的劃分[8], 加之二維平面觸控操作向三維空間進行映射存在操作性和縱深空間缺失問題, 因此對三維空間交互操作的二維觸控手勢尚無明確定義.
對于三維交互任務, Bowman[9]認為在3D/VR 交互系統(tǒng)存在4種普遍的交互任: Navigation, Manipulation, Selection/Pick, System Control. 而田豐等將其進一步劃分為場景瀏覽、實體選擇、實體釋放、實體操作、場景數(shù)據(jù)訪問和實體數(shù)據(jù)訪問6種操作[10]. 作者認為以上對交互任務的劃分可看作是三維交互操作的元操作任務, 除此之外, 由于應用目的不同還存在大量更為復雜的交互操作任務, 如三維地理空間中的距離丈量、通視、地圖線路規(guī)劃等. 當然, 這些復雜交互操作任務, 最終仍可分解為多個元操作任務的組合. 本文參考Microsoft觸控手勢定義[11], 結(jié)合對三維空間交互操作任務的分析和人們使用手勢操作習慣的認識, 總結(jié)了表1中三維操作任務和對應的多點觸控手勢定義. 所有操作總體上可分為針對場景對象和被關注實體對象, 對于場景的操作是通過改變視點來實現(xiàn), 而對于實體的操作前提是已有實體被拾取, 繼而對其進行幾何變換操作. 這種手勢及操作方式繼承了使用鼠標進行三維空間交互操作的一般過程.
表1給出了在通用三維交互應用中的主要操作任務和手勢定義, 在一些更為專業(yè)化的交互中還會存在更多復雜操作. 一方面可以通過將一些簡單手勢組合為符合交互操作語義的復雜手勢集合來實現(xiàn)復雜操作[12,13], 另一方面可以定義其他未使用手勢來表達復雜操作.
表1 三維操作任務及對應的多點觸控手勢定義
OSG在每一幀處理多點觸控事件時均會向用戶自定義多點觸控事件處理類的handle()函數(shù)中傳遞多點觸控數(shù)據(jù), 包括觸控點ID(id)、觸控狀態(tài)(phase)、觸控點坐標(x, y)和點擊計數(shù)(tapCount)等數(shù)據(jù). 每個接觸觸控屏的手指都會被賦以唯一的ID, 每個手指在按下觸控屏時, 其phase為TOUCH_BEGAN, 隨后會變成TOUCH_MOVED, 在手指離開觸控屏時會變?yōu)門OUCH_ENDED. 由于觸控屏的靈敏性, 會出現(xiàn)多個手指的phase不同步的現(xiàn)象. 同時, 對于觸控坐標點的位置不能按絕對坐標值進行判斷, 可以設置坐標靈敏度閾值(coTh)和角度靈敏度閾值(anTh). 這樣只要2次敲擊屏幕坐標位置在閾值范圍內(nèi), 即可認為是點擊了的同一位置[12].
為了完成表1中設計的多點觸控手勢識別, 結(jié)合OSG中獲得的觸控數(shù)據(jù)及對觸控數(shù)據(jù)生命周期的分析, 在已有觸控數(shù)據(jù)存儲結(jié)構(gòu)體基礎上增加了手指旋轉(zhuǎn)角度(angle), 同時為了識別單指雙擊操作還增加了P(x,y)、time用于存儲單指點擊結(jié)束時手指單擊的位置和時間[13]. 則相應的識別算法如下:
設data為存儲當前幀多點觸控數(shù)據(jù)的結(jié)構(gòu)體,last為存儲上一幀多點觸控數(shù)據(jù)的結(jié)構(gòu)體.為當前幀觸點i的坐標,為前一幀觸點i的坐標, i=1, 2, …為觸控點個數(shù)., 為前后兩幀同一手指在x方向的坐標差., 為前后兩幀同一手指在y方向的坐標差.為第i個觸點前后2幀距離差.為當前幀第一和第二個觸點間距離,為前一幀第一和第二個觸點間距離. θ為單指觸點到坐標原點形成線段與Y軸間的夾角. Num為phase等于TOUCH_ENDED的觸控點計數(shù).
(1) 獲取系統(tǒng)當前時間T, 獲得當前幀多點觸控數(shù)據(jù)data.
(2) 若當前幀data的觸控點數(shù)為1且上一幀last的觸控點數(shù)為1, 則觸控類型為單指觸控. ①若, 則當前手勢為左/右平移操作; ②相反, 則當前手勢為升/將操作; ③若有對象處于被拾取狀態(tài)且 (3) 若當前幀data的觸控點數(shù)為2且上一幀last的觸控點數(shù)為2,則觸控類型為雙指觸控. ①若 (4) 若當前幀data的觸控點數(shù)為3且上一幀last的觸控點數(shù)為3, 則觸控類型為三指觸控, 則場景視點回到家位置. (5) last=data. 若phase等于TOUCH_ENDED, 則Num++. (6) 若Num=data的觸控點個數(shù), 則一次完整的觸控過程完成, last=NULL. 通過對OSG多點觸控解決框架和三維空間交互任務的分析, 利用所設計的多點觸控手勢識別算法, 在VC++的Win32控制臺框架下使用OSG3.1版本作為三維交互引擎和多點觸控操作平臺, 開發(fā)了如圖3所示的三維多點觸控交互平臺, (a)圖是三個手指同時點擊使三維地圖場景視點回到家位置, (b)、(c)圖是2個手指的操作三維地圖場景縮小、放大, (d)圖是對三維地圖場景進行了平移的操作. 實踐表明, 對OSG多點觸控框架的認識是正確的, 所設計的三維空間多點觸控手勢識別算法是有效的, 可滿足較為通用的三維空間多點觸控交互操作的需要, 體現(xiàn)了多點觸控人機交互技術更加簡單、方便、高效、直觀的特點. (a) 回到家位置 (b) 兩指縮小 (c) 兩指放大 (d) 一指平移 圖3 多點觸控手勢對三維地圖對象操作 目前在OSG中常見的人機交互方式仍是鼠標、鍵盤, 操作方式不夠人性化, 多點觸控交互方式向現(xiàn)實中的雙手操作方式實現(xiàn)了有效靠攏, 尤其是向自然用戶接口提供了底層支持[14]. 但仍有很多問題亟待進一步深入研究: (1)由于多點觸控操作是在二維平面上進行, 而三維空間操作本質(zhì)上存在6個自由度, 如何解決二者之間的差異, 設計出規(guī)范、為大家公認的交互手勢; (2)由于二維平面操作需要向三維空間操作映射, 二者存在操作粒度不統(tǒng)一的問題[15]. 如何使二者的操作能夠協(xié)調(diào)一致值得研究; (3)由于存在多種多點觸控解決方案, 用戶對手勢的認知不統(tǒng)一, 急需研究一種中間件技術來解決二者的差異問題. 1 Norman DA. Natural user interfaces are not natural. Interactions, 2010, (17): 6–10. 2 Olafsdottir H, Appert C. Multi-touch gestures for discrete and continuous control. International Working Conference on Advanced Visual Interfaces (AVI). Como, Italy. May 2014. 3 王銳,錢學雷.OpenSceneGraph三維渲染引擎設計與實踐.北京:清華大學出版社,2009. 4 Yao JL, Fernando T, et al. A multi-touch natural user interface framework. 2012 International Conference on Systems and Information (ICSAI 2012). 2012. 499–504. 5 Pal P, Vikas S, Raju P. Design and implementation of low-cost multi-touch surface computing using image processing. IOSR Journal of Computer Engineering, 2014, 16(2): 48–56. 6 Hlavacek F, Kovarova A. Multi-touch interaction techniques to control 3D objects on a smartphone screen. Proc. of the 16th International Conference on Computer Systems and Technologies (CompSysTech ’15). NY, USA. 2015. 350–357. 7 Kiriaty Y. MultiTouch capabilities in Windows 7, MSDN Magazine. 2009. http://msdn.microsoft.com/en-us/magazine/ ee336016.aspx. 8 姚垚.基于多點觸控平臺的的三維可視化系統(tǒng)交互設計與評價研究[碩士學位論文].鄭州:解放軍信息工程大學,2012. 9 Bowman DA, Kruijff E, LaViola JJ, et al. Mine, Ivan Poupyrev. 3D user interface design: Fundamental techniques, theory, and practice. In: Akeley K, ed. SIGGRAPH 2000 Course Notes 36. Addison Wesley, 2000. http://www. siggraph.org. 10 田豐,戴國忠.三維交互任務的描述和結(jié)構(gòu)設計.軟件學報,2002,13(11):2099–2105. 11 Windows Touch Gestures Overview. https://msdn.microsoft. com/en-us/library/dd940543(VS.85).aspx. 12 遲健男,等.多點觸摸人機交互技術綜述.智能系統(tǒng)學報, 2011,6(1):28–37. 13 張國華,等.基于多點觸摸的交互手勢分析與設計.計算機應用研究,2010,27(5):1737–1739,1752. 14 Wang CB, Dai JQ. 3D multi-touch recognition based virtual interaction. 2010 3rd International Congress on Image and Signal Processing (CISP2010). 2010. 1478–1481. 15 Ohnishi T, Lindeman R. Multiple multi-touch touchpads for 3D selection. IEEE Symposium on 3D User Interfaces 2011. 2011. 115–116. Multi-Touch Natural User Interface Framework in OSG WU Xue-Yi (Faculty of Printing Packaging Engineering and Digital Media Technology, Xi’an University of Technology, Xi’an 710048, China) OSG multi-touch natural user interface framework is based on the Windows multi-touch technology, in which the management and processing of touch event combines with OSG event processing mechanism, and forms the OSG multi-touch operation framework. According to the raw data that is produced by user’s finger through touching screen, it defines the gestures needed, and combines it with interactive event processing in OSG to complete multi-touch for interactive operation in 3d scene. Based on the above framework, this paper analyzes the major operation tasks in 3D user interaction, defines the interactive gestures that conform to cognition of the 3D spatial operations, and designs the recognition algorithm of the related gestures. Finally, through developing an application example, the correctness and feasibility of design and cognition of multi-touch natural user interface framework in OSG are verified. multi-touch; OSG; natural user interface; 3D application; gestures recognition 陜西省教育廳科研計劃(2013JK1155) 2016-06-27; 2016-08-18 [10.15888/j.cnki.csa.005687]4 基于多點觸控的OSG三維交互應用
5 結(jié)語