曹丹丹,朱彩英,劉曉春
(蘇州市數(shù)字城市工程研究中心,江蘇蘇州 215021)
虛擬現(xiàn)實(shí)應(yīng)用最基本的功能之一就是虛擬環(huán)境的漫游功能。為了獲取構(gòu)思中的環(huán)境信息,并在一個(gè)虛擬的環(huán)境中獲取知識(shí)、形成概念,可使用高性能的計(jì)算機(jī)軟硬件構(gòu)造一個(gè)虛擬環(huán)境漫游器,它使參與者具有身臨其境的沉浸感,并具有良好的人機(jī)交互能力。隨著虛擬現(xiàn)實(shí)技術(shù)的廣泛應(yīng)用,單一的漫游方式無(wú)法滿足千變?nèi)f化的三維虛擬場(chǎng)景,并且不同漫游系統(tǒng)對(duì)漫游方式的要求也不相同,如對(duì)飛機(jī)或汽車的模擬。因此,為了適應(yīng)不同三維場(chǎng)景及實(shí)現(xiàn)不同的漫游方式,本文研究了多種漫游器,可根據(jù)三維場(chǎng)景和漫游要求對(duì)它們進(jìn)行切換,完成了對(duì)虛擬三維場(chǎng)景的交互漫游。
虛擬環(huán)境漫游具有身臨其境的沉浸感和良好的人機(jī)交互能力,可使參與者在虛擬環(huán)境中獲取有用信息[1]。虛擬現(xiàn)實(shí)技術(shù)帶來(lái)的變革產(chǎn)生了巨大的社會(huì)、經(jīng)濟(jì)效益,因此近年來(lái),針對(duì)虛擬環(huán)境漫游的研究非?;钴S。ATC(Advanced Technology Center)、Atlandia Design、UNC、Paradigm Inc等機(jī)構(gòu)在理論和實(shí)踐上都進(jìn)行了研究并取得了較好的成果。
較早進(jìn)行幾何式建筑漫游研究的是UC Berkeley建筑漫游工作室。1996年,他們對(duì)Berkeley大學(xué)新計(jì)算機(jī)信息大樓進(jìn)行了實(shí)時(shí)漫游,檢查了建筑設(shè)計(jì)中存在的缺陷并進(jìn)行了及時(shí)修正[2]。
在國(guó)內(nèi),也存在著一些從事虛擬環(huán)境漫游的機(jī)構(gòu),如杭州大學(xué)工業(yè)心理學(xué)研究室。1996年,他們使用腳踏車作為交互工具對(duì)虛擬故宮進(jìn)行漫游,參與者原地不動(dòng)卻實(shí)現(xiàn)了在故宮里騎行;華西師范大學(xué)將本校作為虛擬對(duì)象,使用WTK和MFC工具,開(kāi)發(fā)了一個(gè)桌面式虛擬實(shí)時(shí)漫游系統(tǒng)[3];虛擬北郵校園漫游系統(tǒng)應(yīng)用Java及VRML實(shí)現(xiàn)了多用戶漫游,構(gòu)建的三維交互環(huán)境允許多人漫游,各個(gè)用戶之間還實(shí)現(xiàn)了相互感知及交互功能[4];哈爾濱工程大學(xué)校園環(huán)境虛擬漫游系統(tǒng)是在Unix環(huán)境下實(shí)現(xiàn)的具有一定人機(jī)交互能力的室內(nèi)外結(jié)合的社區(qū)漫游系統(tǒng)[5];地學(xué)虛擬博物館漫游系統(tǒng)是基于VRML實(shí)現(xiàn)的,它通過(guò)網(wǎng)絡(luò)向人們展示了中國(guó)地質(zhì)大學(xué)(武漢)地學(xué)博物館的地理信息和概貌[6]。四川科技館中的“虛擬世界”、“汽車模型駕駛”,北京航空航天大學(xué)設(shè)計(jì)的“數(shù)字朝陽(yáng)”、“數(shù)字奧運(yùn)博物館”,浙江大學(xué)設(shè)計(jì)的“虛擬紫禁城”也都是通過(guò)虛擬現(xiàn)實(shí)技術(shù)完成的高品質(zhì)模擬產(chǎn)品[7]。
本文技術(shù)路線如圖1所示。交互漫游是指用戶可通過(guò)輸入設(shè)備鼠標(biāo)和鍵盤[8],控制漫游時(shí)的速度、方向、視角等。本文針對(duì)不同的場(chǎng)景和要求設(shè)計(jì)了幾種漫游器,每個(gè)漫游器都包括鍵盤漫游和路徑漫游兩部分,并構(gòu)建了藍(lán)天白云的天空模型以增強(qiáng)虛擬三維場(chǎng)景的真實(shí)感。漫游器中加入了碰撞檢測(cè)功能避免觀察者飛入地下或穿墻而過(guò)等不真實(shí)情況的發(fā)生。路徑漫游時(shí),利用鍵盤獲取控制點(diǎn),并由控制點(diǎn)進(jìn)行貝塞爾曲線插值來(lái)獲取漫游路徑。
圖1 交互漫游技術(shù)路線
進(jìn)行漫游操作時(shí),視點(diǎn)類似于人眼,有著攝像機(jī)的功能。漫游過(guò)程本質(zhì)上是在不斷移動(dòng)視點(diǎn)或改變視線方向而產(chǎn)生三維動(dòng)畫(huà)的過(guò)程[9]。其中,視線的方向由觀察點(diǎn)與視點(diǎn)的位置確定,如圖2所示,觀察點(diǎn)與視點(diǎn)形成的向量為視線方向向量,因此系統(tǒng)不斷改變視點(diǎn)和觀察點(diǎn)的位置來(lái)實(shí)現(xiàn)漫游操作[10]。
圖2 漫游參數(shù)
(1)漫游器設(shè)計(jì)
本文研究設(shè)計(jì)了3種不同的漫游器,針對(duì)不同場(chǎng)景、不同漫游方式可選擇漫游器,如一般漫游可使用基于軌跡球原理的漫游器;當(dāng)處在大規(guī)模的地形場(chǎng)景中時(shí),可使用地形漫游器;若想模擬真實(shí)的交通工具,如汽車、飛機(jī)等,此時(shí)需要考慮駕駛現(xiàn)實(shí)的情景,可使用駕駛漫游器。這些漫游器采用實(shí)時(shí)修正場(chǎng)景相機(jī)觀察矩陣(即觀察者的觀察位置和姿態(tài))的方式來(lái)實(shí)現(xiàn)平滑的漫游。
在進(jìn)行漫游器設(shè)計(jì)時(shí),主要關(guān)注了視覺(jué)運(yùn)動(dòng)的正確性和適宜性,即怎樣平滑并準(zhǔn)確地把觀察者移動(dòng)到指定位置和姿態(tài)。漫游操作主要由3個(gè)參數(shù)控制,分別是視點(diǎn)、觀察點(diǎn)和向上方向。如圖2所示,視點(diǎn)相當(dāng)于人眼,視點(diǎn)位置表示觀察者的位置,觀察點(diǎn)為眼睛看到的物體位置,而向上方向?yàn)轭^的朝向,它決定了是倒著、橫著或其他方式觀察物體。漫游器的交互主要通過(guò)鼠標(biāo)運(yùn)動(dòng)或鍵盤來(lái)完成對(duì)這些參數(shù)的修改。
常用的漫游器為軌跡球漫游器,其交互是通過(guò)鼠標(biāo)運(yùn)動(dòng)和軌跡球的定位來(lái)實(shí)現(xiàn)的。本文基于軌跡球原理實(shí)現(xiàn)了漫游器的旋轉(zhuǎn)功能,如圖3所示。鼠標(biāo)左鍵實(shí)現(xiàn)旋轉(zhuǎn),鼠標(biāo)中鍵實(shí)現(xiàn)平移,而鼠標(biāo)移動(dòng)方向?yàn)槠揭品较?,鼠?biāo)的滾輪和右鍵實(shí)現(xiàn)場(chǎng)景縮放功能。它是在模型周圍環(huán)繞觀察模型,因此適合漫游小場(chǎng)景或模擬太空漫游。
圖3 使用軌跡球來(lái)實(shí)現(xiàn)三維旋轉(zhuǎn)的控制
當(dāng)觀察者對(duì)大規(guī)模的地形場(chǎng)景進(jìn)行漫游時(shí),在現(xiàn)實(shí)情況中,不會(huì)出現(xiàn)頭朝下的情況。此時(shí),可使用地形漫游器進(jìn)行漫游。在地形漫游器中,當(dāng)向上方向轉(zhuǎn)換角度的絕對(duì)值大于90°時(shí),向上方向不發(fā)生任何改變,以保證觀察者是正向觀察物體。它還加入了相交測(cè)試的功能,將觀察點(diǎn)的位置始終定位在視線射線與模型的交點(diǎn)上,增強(qiáng)了漫游操作的逼真感。
當(dāng)需要模擬汽車運(yùn)動(dòng)時(shí),上文所述兩種漫游器不合適,可使用驅(qū)動(dòng)漫游器實(shí)現(xiàn)該功能。駕駛漫游器中沒(méi)有場(chǎng)景縮放、平移功能,并拉近了視點(diǎn)與觀察點(diǎn)之間的距離,跟現(xiàn)實(shí)中駕車相似,鼠標(biāo)左右移動(dòng)代替了鼠標(biāo)左鍵的旋轉(zhuǎn)功能,鼠標(biāo)移動(dòng)的Y值設(shè)定前進(jìn)的速度。
為了能夠根據(jù)不同場(chǎng)景或不同要求來(lái)選擇漫游器,使用按鍵切換操作器實(shí)現(xiàn)了對(duì)多種漫游器的切換,并且保持場(chǎng)景的狀態(tài)不變。
(2)鍵盤命令
鍵盤漫游命令包括:左轉(zhuǎn)、右轉(zhuǎn)、前進(jìn)、后退、上升、下降、仰視、俯視、左移、右移、移動(dòng)加速、移動(dòng)減速、旋轉(zhuǎn)加速、旋轉(zhuǎn)減速、放大、縮小。
OpenGL中函數(shù)gluLookAt()是一個(gè)快速的視點(diǎn)轉(zhuǎn)換變換函數(shù),它使用視點(diǎn)、觀察點(diǎn)位置及上方向來(lái)表達(dá)相機(jī)的位置和姿態(tài),并且使用glTranslate()、glRotate()函數(shù)來(lái)實(shí)現(xiàn)平移和旋轉(zhuǎn)。
假設(shè)系統(tǒng)使用的坐標(biāo)中,Z值表示場(chǎng)景的高度。左轉(zhuǎn)、右轉(zhuǎn)是視線繞著Z軸逆、順時(shí)針旋轉(zhuǎn)一定角度;仰視、俯視是增加、減小視線與XY平面的夾角;前進(jìn)、后退則是將視點(diǎn)沿著平行于XY平面的方向移動(dòng);左移、右移按照當(dāng)前視點(diǎn)的左右方向水平移動(dòng)一定的距離;上升、下降,則增、減視點(diǎn)位置的高度值(Z軸坐標(biāo)值),視線方向不變;放大、縮小,是減小、增加視點(diǎn)與觀察點(diǎn)之間的距離,視線方向保持不變;移動(dòng)加減速、旋轉(zhuǎn)加減速則是相應(yīng)地增加或減小速度、旋轉(zhuǎn)角度值。
(3)實(shí)時(shí)碰撞檢測(cè)
虛擬環(huán)境自身的復(fù)雜性和實(shí)時(shí)性不斷要求使用碰撞檢測(cè)技術(shù)[11],當(dāng)觀察者漫游時(shí),觀察者不能嵌入物體中,也不能穿過(guò)物體[12],因此本文在多個(gè)漫游器中加入了碰撞檢測(cè)功能。
本文利用直線段對(duì)復(fù)雜場(chǎng)景進(jìn)行檢測(cè)。首先,利用層次包圍體將多數(shù)不相交的物體進(jìn)行初步排除;然后,對(duì)那些可能相交的物體作進(jìn)一步的檢測(cè)。在進(jìn)一步檢測(cè)過(guò)程中,首先遍歷場(chǎng)景的層次樹(shù),用線段測(cè)試與層次樹(shù)節(jié)點(diǎn)相交情況,一直遍歷到層次葉子節(jié)點(diǎn),進(jìn)而精確檢測(cè)與葉子節(jié)點(diǎn)所包圍的多邊形面片的相交。將多邊形轉(zhuǎn)化成三角形,并與線段進(jìn)行相交測(cè)試。精確求交點(diǎn)算法的基本思路是:首先判斷線段是否跨越三角形其中的兩條邊,若跨越了,則繼續(xù)判斷線段的兩個(gè)點(diǎn)是否在三角形所在面的同側(cè);否則,確定不相交,檢測(cè)兩個(gè)點(diǎn)是否在三角形面的同側(cè)時(shí),若不在同側(cè),則線段和三角形相交,否則不相交。
進(jìn)行漫游時(shí),觀察者的位置不斷變化,需要不斷地進(jìn)行檢測(cè),從而實(shí)現(xiàn)實(shí)時(shí)碰撞檢測(cè)。為此,本文提出一種新的檢測(cè)線段確定方法:在還未發(fā)生碰撞檢測(cè)的情況下,根據(jù)用戶操作,獲取視點(diǎn)下一幀的位置,并將該位置作為檢測(cè)線段的起點(diǎn),選取當(dāng)前幀的位置作為檢測(cè)線段的終點(diǎn)。若沒(méi)有碰撞,則移動(dòng)視點(diǎn),并更新檢測(cè)線段,否則視點(diǎn)不發(fā)生改變。
路徑漫游是播放預(yù)先設(shè)置好的漫游路徑來(lái)漫游三維場(chǎng)景。漫游路徑是由控制點(diǎn)按一定的插值方式確定的一條三維空間曲線[13],常見(jiàn)的有貝塞爾曲線、B樣條曲線及非均勻有理B樣條曲線。本文使用兩條貝塞爾曲線來(lái)獲取路徑曲線,貝塞爾曲線的4個(gè)端點(diǎn)坐標(biāo)由鍵盤事件確定。
貝塞爾曲線依據(jù)4個(gè)位置任意的點(diǎn)坐標(biāo)P0、P1、P2、P3繪制出一條光滑曲線,曲線的參數(shù)形式為
在路徑不平滑的情況下,當(dāng)播放時(shí),在轉(zhuǎn)角處視線會(huì)按轉(zhuǎn)角的大小發(fā)生突然偏轉(zhuǎn)現(xiàn)象,從而出現(xiàn)在轉(zhuǎn)角處相鄰兩幀不連續(xù)的現(xiàn)象,使觀察者明顯感覺(jué)到畫(huà)面的抖動(dòng)。使用貝塞爾插值方法可以獲取一條平滑路徑曲線,從而消除轉(zhuǎn)角抖動(dòng)問(wèn)題,路徑曲線如圖4所示。
圖4 路徑漫游的路徑曲線
鍵盤和路徑漫游方式的切換使用鍵盤來(lái)控制,并且在進(jìn)行路徑播放時(shí)加入了鍵盤事件,用鍵盤控制播放的開(kāi)始、暫停和重新開(kāi)始。
為三維場(chǎng)景添加藍(lán)天白云能夠?yàn)槿S虛擬場(chǎng)景增加逼真感。本文利用天空盒方法構(gòu)建了一個(gè)天空模型[14],如圖5所示。天空盒使用一個(gè)矩形方盒作為天空的遠(yuǎn)景貼圖的載體,并將該矩形方盒繪制為一個(gè)球形。用于天空盒的背景圖片中,頂上圖片的四邊必須和前、后、左、右圖的上邊相連,而底圖必須和前、后、左、右圖的下邊相連,并且前、后、左、右4幅圖片必須首尾相連。
圖5 球形天空盒構(gòu)建的天空模型
本文采用OpenGL實(shí)現(xiàn)了基于碰撞檢測(cè)的交互漫游操作,并應(yīng)用于近海三維場(chǎng)景中。使用天空盒構(gòu)建天空模型后的三維虛擬近海場(chǎng)景如圖6所示。
圖6 近海領(lǐng)域虛擬場(chǎng)景
默認(rèn)狀態(tài)下使用了軌跡球漫游器進(jìn)行鍵盤漫游,數(shù)字鍵2切換成地形漫游器,數(shù)字鍵1切換回軌跡球漫游,數(shù)字鍵3為駕駛漫游器來(lái)模擬駕駛汽車,數(shù)字鍵4則切換成路徑漫游。在進(jìn)行鍵盤漫游時(shí),鍵盤的方向鍵上下左右分別實(shí)現(xiàn)前進(jìn)、后退、左移和右移的功能,Home鍵上升,End鍵下降,PageUp加速,PageDown減速,A鍵向左旋轉(zhuǎn),D鍵向右旋轉(zhuǎn),W鍵俯視,S鍵仰視,P鍵加角速度,L鍵減角速度,G鍵獲取路徑漫游的控制點(diǎn)。路徑漫游時(shí),R鍵控制著漫游的重新開(kāi)始,H鍵暫停,J鍵繼續(xù)。
本文對(duì)虛擬交互漫游中的關(guān)鍵技術(shù)進(jìn)行了研究,為了適應(yīng)不同場(chǎng)景、不同方式的漫游,設(shè)計(jì)了多種不同的漫游器,并加入了碰撞檢測(cè)技術(shù),以增強(qiáng)漫游的真實(shí)感,可使用切換操作器對(duì)它們進(jìn)行實(shí)時(shí)切換;使用鍵盤選取路徑的控制點(diǎn),使用貝塞爾插值得到平滑的漫游路徑,使路徑漫游消除了轉(zhuǎn)角處的抖動(dòng);采用球形的天空盒構(gòu)建了一個(gè)真實(shí)的天空,增加了場(chǎng)景的逼真感。系統(tǒng)可通過(guò)鍵盤或設(shè)置漫游路徑的方式對(duì)場(chǎng)景進(jìn)行實(shí)時(shí)交互式漫游,漫游時(shí),畫(huà)面流暢,可滿足人們需求。
[1] 郝愛(ài)民,趙沁平.虛擬環(huán)境漫游引擎設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2000(12):86-88.
[2] 黃瑩瑩.虛擬校園漫游及其人機(jī)交互技術(shù)的研究與實(shí)現(xiàn)[D].哈爾濱:哈爾濱工程大學(xué),2004.
[3] 吳鳳娟,刁永鋒.虛擬校園漫游系統(tǒng)的設(shè)計(jì)及實(shí)現(xiàn)[J].蘇州科技學(xué)院學(xué)報(bào):工程技術(shù)版,2005,18(2):78-80.
[4] 侯文君,吳宇飛,王穎,等.多用戶虛擬北郵校園漫游系統(tǒng)的設(shè)計(jì)開(kāi)發(fā)[J].系統(tǒng)仿真學(xué)報(bào),2006,18(8):2203-2205.
[5] 黃瑩瑩,彭敏俊,許岷.基于虛擬現(xiàn)實(shí)的數(shù)字校園漫游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].應(yīng)用技術(shù),2005,32(5):40-42.
[6] 宋慧玲,鄧洪.基于VRML的地學(xué)虛擬博物館漫游系統(tǒng)的實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2006,32(17):239-241.
[7] 蔣子龍.三維虛擬場(chǎng)景人機(jī)交互與漫游技術(shù)研究[D].沈陽(yáng):沈陽(yáng)工業(yè)大學(xué),2010:2-3.
[8] 劉詩(shī)儒,馮秀芳.基于桌面的虛擬漫游系統(tǒng)的構(gòu)造與實(shí)現(xiàn)[J].太原理工大學(xué)學(xué)報(bào),2003,34(4):478-480.
[9] 宮勇,蒲小瓊,張翔.虛擬場(chǎng)景漫游技術(shù)及其系統(tǒng)實(shí)現(xiàn)[J].計(jì)算機(jī)工程與應(yīng)用,2007,43(15):89-91.
[10] 尚建嘎,劉修國(guó),鄭坤.三維場(chǎng)景交互漫游的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2003,29(2):61-62.
[11] 李敏.基于OpenGL的虛擬校園漫游系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].濟(jì)南:山東大學(xué),2008.
[12] 王兆其,趙沁平,汪成為.面向?qū)ο笈鲎矙z測(cè)方法及其在分布式虛擬環(huán)境中的應(yīng)用[J].計(jì)算機(jī)學(xué)報(bào),1998,21(11):991-994.
[13] 姜雪偉,孫曉鵬,王鵬杰.虛擬交互漫游系統(tǒng)關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[J].大連民族學(xué)院學(xué)報(bào),2009,11(3):272-276.
[14] 婁淵勝,朱躍龍,黃河,等.基于虛擬現(xiàn)實(shí)技術(shù)的實(shí)時(shí)漫游系統(tǒng)研究及實(shí)現(xiàn)[J].計(jì)算機(jī)工程,2001,27(6):98-99.