楊海關(guān),楊忠祥,冷順綠,安劍英,鄭朝治
(1.云南省測(cè)繪產(chǎn)品檢測(cè)站,云南 昆明 650034;2.云南旅游職業(yè)學(xué)院,云南 昆明 650221;3.云南省地圖院,云南 昆明 650034)
傾斜攝影測(cè)量較傳統(tǒng)手工建模具有真實(shí)性、快捷高效、全自動(dòng)的優(yōu)勢(shì),該技術(shù)改變了以往航空攝影測(cè)量只能使用單一相機(jī)從垂直角度拍攝地物的局限,通過在同一飛行平臺(tái)上搭載多角度傳感器,同時(shí)從垂直、4個(gè)傾斜5個(gè)角度采集遙感影像,再利用三維建模軟件全自動(dòng)化處理后可獲取完整、真實(shí)、高精度的三維景觀模型[1-2]。在旅游景區(qū)中,傳統(tǒng)的手工建模難以還原出大范圍真實(shí)的自然風(fēng)景,利用地形與影像更是時(shí)效性、精細(xì)度都達(dá)不到風(fēng)景的美觀程度,而傾斜攝影技術(shù)由于其高分辨率和高真實(shí)感,能真實(shí)立體地還原自然風(fēng)景的狀況,有利于景區(qū)特別是地質(zhì)遺跡的保護(hù)、科普知識(shí)的宣傳和直觀展示自然風(fēng)光,從而吸引游客前往觀賞,為用戶提供一種虛擬的旅游方式,為景區(qū)提供一種展示自身形象和資源的新方法。
OSG(OpenSceneGraph簡(jiǎn)稱OSG)作為開源三維圖形渲染引擎,為圖形圖像應(yīng)用程序的開發(fā)提供場(chǎng)景管理和圖形渲染優(yōu)化功能,具有移植性好、開發(fā)速度快等特點(diǎn)被廣泛應(yīng)用于虛擬仿真、虛擬現(xiàn)實(shí)、科學(xué)和工程可視化領(lǐng)域[3-4],其支持多點(diǎn)觸控事件處理、多點(diǎn)觸控原始數(shù)據(jù)獲取,但對(duì)交互操作的手勢(shì)定義和實(shí)現(xiàn)仍無(wú)完整支持[5]。
本文研發(fā)基于OpenSceneGraph渲染引擎,用Qt框架下C++編程語(yǔ)言開發(fā)三維模型的展示平臺(tái),并將觸控技術(shù)引入三維場(chǎng)景可視化中,根據(jù)觸控原數(shù)據(jù)設(shè)計(jì)手勢(shì)識(shí)別類型,利用OSG中事件處理機(jī)制與漫游器操作實(shí)現(xiàn)多點(diǎn)觸控,發(fā)揮該技術(shù)在交互上自然、高效的特點(diǎn),增加三維可視化的可操作性和可用性。
用Qt框架制作平臺(tái)界面,可捕捉用戶手勢(shì)操作,將多點(diǎn)觸控原數(shù)據(jù)傳遞給OSG框架下消息處理機(jī)制。在此基礎(chǔ)上對(duì)事件隊(duì)列進(jìn)行管理和分發(fā),場(chǎng)景中每一幀刷新時(shí),事件處理器完成相應(yīng)的漫游操作,其框架如圖1所示。
圖1 觸控用戶接口框架
用戶滑動(dòng)觸控顯示屏,交互事件首先被Qt捕捉,并傳遞給OSG的事件適配器,加入消息處理隊(duì)列之中。場(chǎng)景中每一幀的渲染會(huì)觸發(fā)相應(yīng)的事件處理器,提供給開發(fā)者事件處理函數(shù)handle(),并可獲得觸控事件的類型和多點(diǎn)觸控?cái)?shù)據(jù),然后根據(jù)設(shè)定的交互映射,觸發(fā)設(shè)計(jì)的漫游器類來完成三維空間的漫游操作,從而完成從事件觸發(fā)到場(chǎng)景漫游顯示的處理,事件處理流程如圖2所示。
Qt捕獲用戶輸入Pressed、Moved、Stationary、Released 4種狀態(tài),構(gòu)造4種類型事件適配器后加入OSG消息機(jī)制中消息隊(duì)列,在開發(fā)者事件處理函數(shù)中可獲得touchBegan、touchMoved、touchEnded 3種類型的事件,對(duì)觸控?cái)?shù)據(jù)解析后,觸發(fā)平移、旋轉(zhuǎn)、縮放3種預(yù)定義的漫游操作來更新三維場(chǎng)景。
圖2 觸控事件處理流程
為滿足旅游景區(qū)場(chǎng)景漫游交互需求,應(yīng)盡可能簡(jiǎn)化用戶操作的復(fù)雜性,并結(jié)合手勢(shì)操作習(xí)慣,設(shè)計(jì)出三維景區(qū)場(chǎng)景的平移、旋轉(zhuǎn)、縮放3種手勢(shì)。具體操作任務(wù)對(duì)應(yīng)的手勢(shì)定義如表1所示。
表1 觸控手勢(shì)定義
OSG在每幀渲染中會(huì)觸發(fā)事件處理函數(shù)handle(),并可獲取觸控點(diǎn)數(shù)據(jù),包括坐標(biāo)、狀態(tài)、ID。為實(shí)現(xiàn)表1手勢(shì),相應(yīng)的識(shí)別算法如下:
1)觸控點(diǎn)個(gè)數(shù)為1則為單指觸控。狀態(tài)為Pressed時(shí)停止漫游,記錄開始平移;狀態(tài)為Moved時(shí)判斷與上一次之間偏移量fltDelta,若fltDelta過大或過小表示是無(wú)意中的操作,反之,調(diào)用TouchPan函數(shù)進(jìn)行平移;狀態(tài)為Released時(shí)停止平移。
2)觸控點(diǎn)個(gè)數(shù)初始為2時(shí),計(jì)算兩觸控點(diǎn)移動(dòng)向量,判斷兩個(gè)向量夾角,若角度小于50°認(rèn)為兩點(diǎn)為同向移動(dòng),記錄狀態(tài)為旋轉(zhuǎn);反之為反向移動(dòng),記錄狀態(tài)為縮放。
3)觸控點(diǎn)個(gè)數(shù)為2時(shí),狀態(tài)為旋轉(zhuǎn),調(diào)用TouchRotate函數(shù)進(jìn)行旋轉(zhuǎn);狀態(tài)為縮放時(shí),調(diào)用TouchScroll函數(shù)進(jìn)行縮放。
其中,TouchPan、TouchRotate、TouchScroll是為場(chǎng)景漫游設(shè)計(jì)的漫游器類,通過實(shí)時(shí)修正相機(jī)觀察矩陣的方式來實(shí)現(xiàn)平滑的導(dǎo)航瀏覽。
通過多OSG多點(diǎn)觸控框架的分析,在Qt框架下用C++編程語(yǔ)言實(shí)現(xiàn)三維交互觸控操作平臺(tái),再用傾斜攝影測(cè)量技術(shù)獲取昆明市世博園的實(shí)景三維景區(qū)模型,在平臺(tái)中進(jìn)行交互展示。在28英寸SurfaceStudio一體機(jī)中展示,通過觸控實(shí)現(xiàn)單指平移、雙指縮放、雙指旋轉(zhuǎn),多方位進(jìn)行交互式操作,對(duì)場(chǎng)景放大、縮小、任意改變視角,從不同角度全方位觀看景區(qū)效果,帶給觀賞者強(qiáng)烈的真實(shí)感、立體感,使其身臨其境、觸手可及,從而實(shí)現(xiàn)高度沉浸感的交互展示效果。
通過這種交互式的體驗(yàn)還可以加深旅游者對(duì)景區(qū)的印象,消除旅游消費(fèi)中可能存在的不確定性因素,使游覽者在游覽之前對(duì)景區(qū)的質(zhì)量和花費(fèi)有明確的價(jià)值認(rèn)知。
實(shí)踐表明,多點(diǎn)觸控手勢(shì)算法是有效的,可滿足旅游景區(qū)三維場(chǎng)景交互的需要。
圖3 旅游景區(qū)三維場(chǎng)景展示
為實(shí)現(xiàn)對(duì)旅游區(qū)三維場(chǎng)景的展示,用傾斜攝影技術(shù)可快速、高效地獲得高分辨率、高真實(shí)性的三維景觀,并基于OSG多點(diǎn)觸控用戶接口框架設(shè)計(jì)與景區(qū)展示相對(duì)應(yīng)的觸控瀏覽平臺(tái)。既展示出景區(qū)逼真的視覺效果,又發(fā)揮了多點(diǎn)觸控人機(jī)交互簡(jiǎn)單、高效、直觀的特點(diǎn)[6-7],增強(qiáng)三維數(shù)據(jù)帶來的高沉浸感,為用戶提供一種虛擬旅游的方式。