王 麗,陳 杰,李 佳,陳定方
(武漢理工大學(xué)智能制造與控制研究所,湖北 武漢 430063)
虛擬漫游技術(shù)是虛擬現(xiàn)實(shí)(VR)技術(shù)的重要分支,而場(chǎng)景實(shí)時(shí)漫游是虛擬現(xiàn)實(shí)技術(shù)的一個(gè)重要應(yīng)用.由于沒有制定具體的路線,人們可以在虛擬的環(huán)境中自由行走,不受時(shí)間、空間的限制,達(dá)到真正意義上的交互,因此該技術(shù)能夠給客戶帶來企業(yè)最直觀的展示.本文對(duì)OpenSceneGraph(OSG)圖形系統(tǒng)大型場(chǎng)景進(jìn)行數(shù)字化采集數(shù)據(jù),然后通過三維建模建立大型場(chǎng)景,最終實(shí)現(xiàn)現(xiàn)實(shí)場(chǎng)景的虛擬漫游系統(tǒng)開發(fā).
利用Google Earth大型場(chǎng)景的衛(wèi)星地圖為依據(jù),收集相關(guān)實(shí)體的結(jié)構(gòu)數(shù)據(jù)以及照片,通過使用3ds Max軟件對(duì)光照、紋理、材質(zhì)等多因素進(jìn)行修理,進(jìn)行實(shí)體建模.
虛擬建筑場(chǎng)景漫游的最大難點(diǎn)在于建模逼真度和繪制實(shí)時(shí)性.由于這種漫游所看到的景象離觀察者近,要求繪制非常逼真的圖像.因此,構(gòu)造精細(xì)的建模,會(huì)消耗很多時(shí)間.同樣,由于計(jì)算機(jī)性能的制約,構(gòu)造出來的模型越復(fù)雜,在繪制時(shí)要達(dá)到實(shí)時(shí)效果就越困難,實(shí)時(shí)性太差會(huì)使觀察者無法接受.因此必須像重視建模本身一樣重視對(duì)場(chǎng)景模型的優(yōu)化[1].可以運(yùn)用多層次細(xì)節(jié)(LOD)方法為場(chǎng)景生成不同的細(xì)節(jié)層次,這樣可大大減少繪制的計(jì)算量.還可以采取一些場(chǎng)景預(yù)處理辦法,例如用輻射度方法,可在漫游時(shí)省去許多光照的計(jì)算量.
利用基于OSG技術(shù)開發(fā)的軟件——三維仿真軟件進(jìn)行編輯并導(dǎo)出三維場(chǎng)景模型.將場(chǎng)景模型導(dǎo)入3dvri軟件中進(jìn)行編輯(主要是進(jìn)行攝影機(jī)的路線校正,以及天空盒的創(chuàng)建還有鏡頭光斑的設(shè)置等),最后將場(chǎng)景文件保存為ive格式的文件[2,3].
基于 OSG技術(shù),通過在 Microsoft Visutual stdio.NET平臺(tái)下開發(fā)的一個(gè)基于MFC的演示窗口,實(shí)現(xiàn)虛擬校園的漫游功能.
正確使用安裝包安裝OSG并完成OSG的編譯后,打開VS2005,選擇“工具”※“選項(xiàng)”命令打開“選項(xiàng)”對(duì)話框,展開“項(xiàng)目和解決方案”結(jié)點(diǎn),選擇“VC++目錄”選項(xiàng),在此設(shè)置包含文件和庫(kù)文件兩項(xiàng),分別選擇OSG目錄中的include和lib文件夾所在的路徑[4].
具體設(shè)置方法如下.
1)包含文件和庫(kù)文件目錄分別設(shè)置為:
2)右擊“我的電腦”圖標(biāo),在彈出的快捷菜單中選擇“屬性命令”打開“系統(tǒng)屬性”對(duì)話框,選擇“高級(jí)”選項(xiàng)卡,單擊“環(huán)境變量”按鈕,在彈出環(huán)境變量對(duì)話框中設(shè)置下面兩個(gè)環(huán)境變量:
在瀏覽整個(gè)三維場(chǎng)景時(shí),矩陣變換非常關(guān)鍵.通過適當(dāng)?shù)木仃囎儞Q可獲得各種移動(dòng)或者渲染效果.此系統(tǒng)中自定義的漫游操作器T ravelManipulator是繼承于OSGGA::MatrixManipulator的.
編寫自定義場(chǎng)景漫游操作器的主要步驟如下.
1)編寫一個(gè)繼承自 osgGA::GUIEventHandler類的新類,class TravelManipulator:public osgGA::MatrixManipulator.
2)重載函數(shù)handle()及相關(guān)矩陣變換函數(shù),在handle()中添加合適的事件處理函數(shù),并指定執(zhí)行相關(guān)的動(dòng)作.
在此函數(shù)中執(zhí)行相關(guān)動(dòng)作如:
3)進(jìn)行碰撞檢測(cè).本系統(tǒng)中使用一種簡(jiǎn)單的碰撞檢測(cè)方法(圖1).
圖1 簡(jiǎn)單碰撞檢測(cè)
碰撞檢測(cè)實(shí)現(xiàn)代碼如下:
4)關(guān)聯(lián)該操作器到當(dāng)前視圖場(chǎng)景中,OSG不會(huì)自動(dòng)啟動(dòng).該操作器代碼為
使用該漫游系統(tǒng)操作方便,仿真度高,在實(shí)際應(yīng)用中獲得了較好的效果(圖2).
[1]丁建浩,王毅剛,潘志庚.采用大屏幕投影系統(tǒng)的虛擬河坊街漫游[J].杭州電子科技大學(xué)學(xué)報(bào),2005,25(1):56-59.
[2]申閆春,朱幼虹,曹 莉,等.基于 OSG的三維仿真平臺(tái)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)仿真,2007,24(6):207-211.
[3]Bow man DA,Kruijff E,LaViola J,et al.3D user interfaces:theory and practice[M].Boston:Addison Wesley,2004.
[4]肖 鵬,劉更代,徐明亮.Open Scene Graph三維渲染引擎編程指南[M].北京:清華大學(xué)出版社,2010:14-15,265-275.