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