摘要:該文以Multigen Creator3.2為主的多種工具進行場景建模;在場景驅(qū)動上選擇Vega Prime 2.0,以VC.NET為平臺,并采用多線程技術(shù),結(jié)合arcgis矢量化工具,開發(fā)了一個虛擬校園漫游系統(tǒng),實現(xiàn)了自動和任意漫游、碰撞檢測、二維地圖導(dǎo)航、場景漢字顯示等功能。該研究對學(xué)校的環(huán)境規(guī)劃、資源管理可提供先進的技術(shù)手段,對其他虛擬地理環(huán)境的構(gòu)建以及功能實現(xiàn)也具有重要的參考和借鑒意義。
關(guān)鍵詞:虛擬校園;Vega Prime;Creator;多線程技術(shù);Arcgis
中圖分類號:TP391.9文獻標(biāo)識碼:A文章編號:1009-3044(2009)35-10049-03
Study on the Virtual Campus Roaming System Based on the Vega Prime
JIANG Xin, QIN Fen
(College of Environment and Planning, Henan University, Kaifeng 475004, China)
Abstract: The paper proposes a scheme of virtual campus modeling mainly based on Multigen Creator3.2, combined with other tools. Vega Prime 2.0 is chosen as the platform of campus scene driving. Based on multithreading technique and combining the vector tools such as arcgis, a three-dimensional virtual campus roaming system is developed and some functions such as automatic and random roaming, collision detection, two-dimensional map navigation as well as Chinese characters display function are eventually implemented. Such 3D system to provide advanced technology has a great application potential in the fields of the school's environmental planning and resource management, which is of reference significance to the construction of other virtual geography environment and its functional realization.
Key words: virtual campus; vega prime; creator; multithreading technique; arcgis
該文以河南大學(xué)新校區(qū)為研究對象,以VP為場景驅(qū)動平臺,Creator3.2為主要建模工具,重點研究了虛擬校園的漫游、碰撞、二維地圖導(dǎo)航、漢字顯示等功能。在總體設(shè)計中,包括場景建模和功能實現(xiàn)兩大部分。
1 虛擬校園構(gòu)建的重要技術(shù)
1.1 數(shù)據(jù)采集
1) 二維地圖數(shù)據(jù)獲取。目前校園平面圖的制作一般是利用AutoCAD繪制,這種方法繪制校園圖準(zhǔn)確度高,但工作量大,耗費大量的物力和人力,而且渲染效著色效果比較差。該系統(tǒng)主要利用Google Earth提供的免費的衛(wèi)星影像圖,利用截圖軟件Snagit截圖,然后用CorelDraw拼圖處理,最后用arcgis9.2進行幾何校正、配準(zhǔn),最終形成了精確的帶地物名的校園平面圖(圖1)。
2) 地形數(shù)據(jù)獲取。利用Creator建立地形的方式主要有兩種。一種是使用Terrain模塊,通過DEM疊加數(shù)字影像,這種方式目前主要應(yīng)用于有明顯高程變化或地形起伏較大的區(qū)域。另一種方式為手動建模,主要針對于地形平坦、建筑物密集的地區(qū)。因為這種平坦的區(qū)域即使使用了DEM數(shù)據(jù),在模型中的效果也非常不明顯,另外,由于建筑物密集,許多實體要手動創(chuàng)建,使用數(shù)字影像效果反而不好。針對該校園地形的起伏小且建筑物較多的特點,在實際操作中,采用第二種方式處理。
3) 地物數(shù)據(jù)獲取。地物數(shù)據(jù)是建模階段的重點,它主要包括場景中三維模型的外觀尺寸、結(jié)構(gòu)組成等數(shù)據(jù)信息,主要數(shù)據(jù)來源于場區(qū)平面圖、正面照片、設(shè)計規(guī)劃圖等,此外還要對仿真目標(biāo)進行實地考察,通過實地測量獲得主要實物的尺寸和位置坐標(biāo)等屬性數(shù)據(jù)。
4) 紋理數(shù)據(jù)獲取。主要是通過Sony W200 1210萬像素的高清晰數(shù)據(jù)數(shù)碼相機獲取。
1.2 紋理數(shù)據(jù)處理
普通數(shù)碼相機所拍攝的數(shù)碼像片存在變形、物體遮擋、亮度與色彩差異等問題。所以,要對紋理進行處理,首先用PhotoShopCS把用數(shù)碼相機拍攝的圖片首先轉(zhuǎn)換成RGB格式,然后再把圖像大小調(diào)整成2的冪次方。這樣才能保證在以后的Vega Prime中正確顯示。完畢后將紋理數(shù)據(jù)分類整理并存儲備用。
1.3 場景建模
1.3.1 建模工具
場景建模型主要以Multigen Creator工具為主,它擁有OpenFlight數(shù)據(jù)格式,便與后續(xù)實時仿真軟件Vega Prime緊密結(jié)合,并輔助3DsMax進行一些精細(xì)建模,如交通工具中的公交車、汽車、重要建筑物等,最終也要轉(zhuǎn)換成flt格式,通過PhotoShopCS對實拍圖像進行紋理、大小等有效處理。
1.3.2 建模原則
用Creator建模時,應(yīng)遵循以下的原則:
1) 按照建筑物的位置和重要程度確定建模順序,然后依次對每棟重要建筑進行單獨建模,完畢后再進行集成。
2) 采用統(tǒng)一的單位和比例尺,在從其他軟件導(dǎo)入模型時尤其要注意;還要注意設(shè)備底面與網(wǎng)格線關(guān)系,如動態(tài)交通工具模的車輛類底面要與網(wǎng)格重合;
3) 應(yīng)盡量減少面數(shù),能用貼圖就不要建面;貼圖宜小不宜大,邊長要為2的冪個像素[1]。
4) 設(shè)置合適的LOD和DOF,模型數(shù)據(jù)庫中節(jié)點名稱注意不能為默認(rèn)值,避免產(chǎn)生過多的Default節(jié)點;放在某一個自由度下的節(jié)點不能移動到其它的父節(jié)點。
5) 自然及人文景觀建模,它主要包括植樹、交通標(biāo)志、道路橋梁、建筑物等類型的實體。對樹木等植物實體的建模,在精確度要求不高的情況,可以采用Billboard或交叉面的方法,賦予用帶有α通道的植物貼圖;如果觀察距離較近或要求較高,也可采用其它建模軟件生成的植物樹干導(dǎo)入,然后加上樹冠的多個角度貼圖,一般來說,第一種方法就可以達到要求。樹木較多時,在合成最終文件時可采用引入外部模型的方法,以提高運行速度橋梁建筑物等由于需要從不同視角觀察,因此要建立三維模型。建模時畫出截面圖后,采用Wall或loft方法,生成三維實體;如果形狀不規(guī)則,對其主框架建模后,細(xì)節(jié)部分用貼圖來實現(xiàn)。 對道路的建模,可以采用road工具或是直接采用Strip Face實現(xiàn),或者用添加子面的方法。由于Strip Face工具比較便于使用,因此在類似于城市道路的模擬使用較多。
1.3.3 重要技術(shù)
1) 通過節(jié)點開關(guān)工具,可以控制模型的顯示與隱藏,特別是對于距離近的、密集型、復(fù)雜建模區(qū)這個工具特別有用,可以選用此開關(guān),保留當(dāng)前模型,隱藏周圍的模型,如物理學(xué)院圓錐樓在多個院系包圍中,可以把其周圍的建筑物暫時隱藏,待建完模型后,再顯示出來。
2) 利用移動工具可以實現(xiàn)模型的上、下、左、右平移,也能放大縮小。以河南大學(xué)新區(qū)正校門為例,當(dāng)鼠標(biāo)放在箭頭上,變藍(lán)時可以平移,進行上下或左右移動,對于模型的精確定位,非常有用。當(dāng)鼠標(biāo)放在箭頭上,變黃時,可以放大縮小,以滿足實際大小的需要(如圖2)。
3) 應(yīng)用紋理是Creator一大優(yōu)勢,在大面積虛擬地形時,它可以代替詳細(xì)建模,可以大大減少模型數(shù)據(jù)庫的占用內(nèi)存,提高實時運行速度, Creator支持大部分圖片格式,但最優(yōu)選擇四種INT、INTA、RGB、RGBA,這樣不會造成顏色信息的丟失,也不用格式轉(zhuǎn)換。從紋理選項板圖像文件讀入內(nèi)存的順序是從左向右、從下到上的,所以經(jīng)常使用的紋理放在第一區(qū)的最下角可以節(jié)省訪問時間。
4) External Refrence技術(shù)是指在一個模型中可以設(shè)置外部引用節(jié)點,在節(jié)點下能調(diào)用另一模型的部分或者全部,并可以重新定義被調(diào)用模型的位置方向。外部引用好處是:
① 便于場景的組織管理。對場景的構(gòu)建按照層次結(jié)構(gòu)先劃分若干區(qū)塊,然后分別在各區(qū)塊進行,各區(qū)塊中的模型大到一棟建筑,小至一棵樹木都可以獨立建,然后通過外部調(diào)用進行集成。
② 可以節(jié)省內(nèi)存空間,提高建模速度。可以通過參數(shù)設(shè)置,使德默認(rèn)情況下,外部引用節(jié)點不被顯示。既能節(jié)省了計算機內(nèi)存,又減少了模型的顯示和刷新時側(cè)。提高了建模速度。
③ 便于模型替換。只需將外部引用的路徑改變即可實現(xiàn)模型的替換,新模型自動覆蓋舊模型,方便地實現(xiàn)了模型的更新。使用外部引用缺點。
④ 外部引用的模型集成到場景中后是只讀的,不能直接被編輯,只能改變模型位置、方向和大小比例。如果要對被引用模型部分進行修改也必須打開引用的模型文件,修改后還要對調(diào)用模型進行刷新??傮w上,對于復(fù)雜場景數(shù)據(jù)庫利用外部引用能夠明顯的提高建模效率。
5) LOD(level of details)技術(shù)。它的基本思想是[2]:同一個物體與眼睛距離不同,所看到的該物體的詳細(xì)程度也不同。根據(jù)這一視覺規(guī)律,事先為同一物體構(gòu)造一組詳細(xì)程度的不同的幾種模型。計算機在生成三維圖像時,以此模擬“越近看得越清”的視覺規(guī)律。它可以通過設(shè)置每個LODs節(jié)點的轉(zhuǎn)入(Switch-in)和轉(zhuǎn)出(Switch-out)參數(shù)可以方便地控制LODs節(jié)點顯示的時機。通過對以上步驟的優(yōu)化組合,最終形成的“河南大學(xué)新校區(qū)”整體場景圖。
2 虛擬地理環(huán)境場景驅(qū)動和主要功能實現(xiàn)
2.1 場景驅(qū)動
該系統(tǒng)在場景驅(qū)動上首選Vega Prime2.0(簡稱VP2.0),它是MultiGen-Paradigm公司最主要的實時視景仿真平臺,基于opengl底層技術(shù),從Vega軟件基礎(chǔ)上發(fā)展而來,支持MetaFlight文件格式,Lynx Prime(簡稱LP)是用來定義VP中的類及其參數(shù)的人機交互界面,并且它用C++語言編寫程序使場景更加生動,它能將先進的模擬功能和易用工具相結(jié)合,能顯著地提高程序運行效率。
2.2 VP的初始化過程與多線程技術(shù)
VP是針對C++語言,在面向?qū)ο蠡A(chǔ)上設(shè)計的,它支持多線程技術(shù)編程,并嚴(yán)格區(qū)分兩種不同類型的線程:用戶界面線程和工作線程。由于本系統(tǒng)仿真程序在后臺運行到顯示需要大約20多分鐘,時間很長,為了提高效率和節(jié)約資源,故考慮采用多線程技術(shù)編程[3],框架如圖3。
假設(shè)MFC的VP項目名稱為VpMFC。其主要代碼如下:
//自定義線程控制函數(shù)
UINT vpWorkThread (LPVOID pParam)
{…
//初始化VP
vp::initialize(__argc, __argv);
//定義、 加載和解析ACF文件
vpKernel::instance()->define(\"D:\\\\Vp_Test.acf\");
//配置VP
vpKernel::instance()->configure();
//綁定窗口,實現(xiàn)vp窗口與MFC視圖窗口類的關(guān)聯(lián)
vpWindow* vpWin = *vpWindow::begin();
vpWin->setParent(pView->GetSafeHwnd());
vpWin->setBorderEnable(1);
vpWin->setFullScreenEnable(true);
// vpWin->setKeyboardFunc(keyboardHandler,pParam);
vpWin->open();
::SetFocus(vpWin->getWindow);
//仿真循環(huán)
while (vpKernel::instance()->beginFrame() != 0)
{ vpKernel::instance()->endFrame();
if (pView->m_bEndVPThread == TRUE)
{ vpKernel::instance()->unconfigure();
vp::shutdown();
…}}
…}
2.3 功能實現(xiàn)
2.3.1 帶碰撞檢測、二維導(dǎo)航的任意漫游方式的實現(xiàn)
首先,依據(jù)校園平面圖分布,確定各個模型位置,在VP中進行相關(guān)配置,最后利用MFC的單文檔視圖結(jié)構(gòu),結(jié)合vpAPI,開發(fā)了一個可以由人任意控制的以汽車為角色的自由漫游系統(tǒng)。二維導(dǎo)航圖上,該系統(tǒng)采用VP的通道(channel)模塊,創(chuàng)建orthoChannel通道,設(shè)置好曳區(qū)(Draw Area)大小以便定位二維導(dǎo)航圖的位置;通過創(chuàng)建地線夾(GroundClamp)將汽車固定在地形上,在碰撞方面,用抽像類vpIsector來描述檢測器,檢測器自中心向周圍延伸出一些線段,當(dāng)這些線段與周圍物體相交,則認(rèn)為有碰撞行為發(fā)生,并且系統(tǒng)將檢測器的mask與場景內(nèi)所有mask做與運算,結(jié)果不為O的,才進行檢測,結(jié)合C++編寫適當(dāng)?shù)姆磻?yīng)程序,如使汽車在某個建筑物前停下(圖4)。
2.3.2 帶聲效的自動導(dǎo)航功能實現(xiàn)
借助Lynx Prime的vpPath模塊和vpAudio的vpAudioSoundSpatial模塊,設(shè)置好相關(guān)參數(shù)后,再用C++調(diào)用,實現(xiàn)動態(tài)模型沿特定路線自動導(dǎo)航并帶聲音功能。
2.3.3 利用OpenGL在Vega Prime中實現(xiàn)地物漢字顯示
VP本身不支持漢字的顯示,利用OpenGL可以實現(xiàn)這一功能。OpenGL顯示漢字的原理是建立所要顯示字符的顯示列表[4],然后調(diào)用顯示列表畫出所要顯示的字符。利用OpenGL在VegaPrime中顯示漢字的方法體現(xiàn)在void notity(vsChannel::Event,const vsChannel *,vrDrawContext *context)函數(shù)中。
3 結(jié)束語
該文以creator為主要建模工具,以vega prime為場景驅(qū)動,以河南大學(xué)校園為例,開發(fā)了一個三維虛擬校園漫游系統(tǒng),實現(xiàn)了人工實時加二維地圖的漫游并碰撞檢測,人工方法雖然可以實現(xiàn)隨意漫游功能,但不好控制動態(tài)模型,為此經(jīng)過進一步研究,實現(xiàn)了動態(tài)模型沿特定路線自動導(dǎo)航功能,并加上特定的聲音效果,使漫游效果更加逼真。應(yīng)該說,這些功能都是基本的、必須的,而虛擬地理環(huán)境中的三維分析功能也是十分重要的,正是下一步研究、開發(fā)的重點。
參考文獻:
[1] 孟曉梅,劉文慶.Multigen Creator教程[M].北京:國防工業(yè)出版社,2005.
[2] 王英杰,袁勘省,余卓淵.多維動態(tài)地學(xué)信息可視化[M].北京:科學(xué)家出版社,2003.
[3] 侯俊杰.深入淺出MFC[M].2版.武漢:華中科技大學(xué)出版社,2001.
[4] 聶孝亮,王國良.Vega環(huán)境下字符顯示的實現(xiàn)方法[J].計算機系統(tǒng)應(yīng)用,2004(1):66-68,71.