摘要:介紹了虛擬現(xiàn)實技術(shù)和OpenSceneGraph(OSG)三維渲染引擎。結(jié)合虛擬現(xiàn)實技術(shù)的綜合應用,使用三維建模軟件-3DS MAX 8、開源的OSG三維渲染引擎,設計實現(xiàn)了學校校園虛擬漫游系統(tǒng)。該系統(tǒng)可以為用戶提供直觀、逼真的虛擬環(huán)境,使觀者有身臨其境之感。
關(guān)鍵詞:虛擬現(xiàn)實;OSG;校園漫游;碰撞檢測
0 引言
虛擬現(xiàn)實系統(tǒng)(Virtual Reality,簡稱VR),是一種高級的人機交互系統(tǒng),它可利用計算機產(chǎn)生一個以自然的視、聽、觸等功能感受的三維環(huán)境,人們可以方便地對生成的“虛擬世界”進行交互式的觀察、分析、操作和控制。它以仿真方式給用戶創(chuàng)造了一個實時反映實體變化與相互作用的界面,使用戶可直接參與并探索仿真對象在所處環(huán)境中的作用與變化。它具有多媒體信息的感知性、沉浸性、交互性和自主性等特點。
Open Scene Graph(OSG)是一種開源、高效、強大、新穎和可操作性強的三維渲染引擎,主要為圖形圖像應用程序的開發(fā)提供場景管理和圖形渲染優(yōu)化功能。它使用可移植的ANSIc++編寫,并使用已成為工業(yè)標準的OpenGL底層渲染API。本文所介紹的虛擬校園以河南理工大學校園作為應用實例,通過OSG及其三維仿真平臺來實現(xiàn)校園的實時漫游。
1 系統(tǒng)的總體設計
首先對河南理工大學進行信息采集,得到建筑物等數(shù)字信息,再通過三維建模的形式創(chuàng)建場景,最后實現(xiàn)虛擬場景的漫游。系統(tǒng)實現(xiàn)如下的功能:
(1)訪問者可以自由進出校園,根據(jù)個人的需要選擇任意的觀看路線,并通過鼠標和鍵盤選擇觀看角度。
(2)在漫游過程中,隨時可以調(diào)出校園地圖,查看自己所處的校園位置。
(3)系統(tǒng)具有碰撞檢測功能,以防發(fā)生“穿墻而過”的情況。
(4)為了更好的表現(xiàn)出漂亮的校園模型背景,添加了天空盒使得校園背景更加漂亮、逼真。
2 校園場景的建模
三維模型的創(chuàng)建是開發(fā)虛擬校園漫游系統(tǒng)的最重要也是最關(guān)鍵的任務,因為它是場景漫游的基礎,漫游運行的效果和場景的逼真度,直接受所建模型好壞的影響。過于精細的模型不僅會嚴重降低運行的速度,還會消耗很多時間,所以在建模過程中,要在模型的細節(jié)度和復雜性之間尋求一個平衡點,一般情況下,用紋理貼圖來代替模型細節(jié)。
2.1 數(shù)據(jù)搜集與整理
結(jié)合校園建筑平面圖,我們可以獲得完整的校園信息:建筑物、樹木綠地、道路等的地理位置和平面輪廓,以便構(gòu)建出整個校園場景。首先,我們用數(shù)碼相機收集建筑物、道路、綠地樹木等的大小、形狀、顏色等相關(guān)信息;然后根據(jù)照片分析出物體的立體輪廓形狀,為三維建模打下基礎。
2.2 建筑物模型的創(chuàng)建
(1)對于外形簡單,形狀規(guī)則的建筑物可以采用立方體和貼圖的建模方式。如教學樓、實驗樓、學生宿舍等,建立簡單的立方體,把拍攝到的照片在Photoshop cs3中進行圖片處理,如用變換工具把照斜的圖片拉正等,把修正好的圖片作為位圖貼圖賦給立方體。對于復雜的建筑物,3DS MAX8提供了布爾運算、放樣、圖形合并、可編輯多邊形等方法。
(2)對于路燈、樹木等物體,采用十字交叉法建模,這樣會節(jié)減模型面數(shù)。如果采用實體建模,不僅會大大增加場景的而數(shù),更重要的是增加了文件體積,使瀏覽速度減慢。
需要注意的是用3DS MAX8制作出的場景非常精細,存在著大量冗余信息,所以在建模時應注意對模型的優(yōu)化。對于看不到的面可以刪除,如一些模型的底面和相貼的面。系統(tǒng)中用到的立體文字,一般在Photoshop中建好并存儲為.jPg格式的圖片,用貼圖的方法貼到模型上。
2.3 材質(zhì)與貼圖
虛擬場景中需要用到大量的貼圖,這些貼圖主要是用數(shù)碼相機拍攝的圖片,由于拍攝的位置不同,照片效果不一,需要經(jīng)過處理才可以貼到模型上。我們使用PhotoShop對貼圖進行處理。在制作虛擬場景時,使用PhotoShop完成以下工作:
(1)制作簡單貼圖。如文字、標牌示語等。
(2)對拍攝的照片進行簡單的編輯處理,比如:放大縮小、亮度、對比度的調(diào)整等。
(3)對照片進行變形操作處理。如旋轉(zhuǎn)扭曲。
(4)制作帶Alpha通道的圖像文件,通過PhotoShop可以將畫面中不需要顯示的部分設置成透明的,并將透明信息保存。一般使用TGA和PNG文件來保存帶Alpha信息的圖像。
2.4 場景的合成
前期的模型制作,都是單個獨立創(chuàng)建的,創(chuàng)建完所需模型后,需要擺放這些模型,也就是對整個場景進行合成。在合成場景時,要綜合考慮,例如整體布局、模型比例的調(diào)整等諸多方面,不然就會出現(xiàn)整體布局不協(xié)調(diào)的現(xiàn)象。在場景合成的過程中,也要注意實際物體的擺放位置。虛擬校園效果圖局部截圖如圖1所示。

3 漫游功能的實現(xiàn)
3.1 場景漫游
在OSG中,通過對攝像機運動的控制,可以實現(xiàn)漫游,攝像機通過變換它的矩陣來實現(xiàn)運動:
(1)根據(jù)需要要對攝像機的位置和方向進行計算和設置,它們由矩陣構(gòu)成,通過矩陣變換,來改變攝像機的位置和方向。
(2)計算攝像機的初始位置,使場景出現(xiàn)在視口內(nèi)。
(3)漫游時,鼠標的使用是最常見的,因此,添加鼠標事件,以方便地使用鼠標。
(4)確定攝像機的高度。
3.2 路徑漫游
首先設置好一個路徑,再進行漫游,這是常用的方法。在osgViewer中,按下小寫字母“z”時,動畫路徑就開始錄制;當要結(jié)束動畫制作時,按下大寫字母“z”,即可保存動畫路徑文件;用osgViewer讀取該動畫文件時,會重現(xiàn)所錄的路徑動畫內(nèi)容。
3.3 碰撞檢測
漫游虛擬場境時,需要及時進行一些碰撞檢測,否則可能出現(xiàn)“穿墻而過”等現(xiàn)象,會降低虛擬場境的真實性。本系統(tǒng)使用基于視點向前的線段探測的碰撞檢測算法。
OSG中提供了osg::LineSegment,它表示由一個起點和一個終點構(gòu)成的線段類。osgUtil::IntersectVisiotr是接受線段的類,可判別與節(jié)點的交集,通過函數(shù)iv,addLineSegment(1ineget())在列表中添加一條線段。Node->accept(iv)把線體段隊列,加入到場景中,使用,v hits()來判斷是否有碰撞。有碰撞則返回TRUE,無碰撞則返回FALSE。osgUtil::IntersectVisitor::HitList hlist可以得到相交點的具體位置,從而計算出距離。
3.4 天空盒的實現(xiàn)
為了使校園虛擬場景具有高逼真性,對天空的模擬是必不可少的。天空背景的真實感能給人的視覺帶來很大沖擊。球體天空盒的創(chuàng)建可參考一下步驟m;
①創(chuàng)建立方體紋理對象并讀取紋理貼圖;②設置自動生成紋理坐標;③設置紋理矩陣;④設置立方圖紋理;⑤設置矩陣變換節(jié)點;⑥關(guān)閉關(guān)照并關(guān)閉背面剔除,設置渲染順序,加入到葉節(jié)點中繪制。
3.5 導航器的實現(xiàn)
導航器的作用就像一個地圖,在用戶漫游時,經(jīng)常需要查看自己所處的位置。這就要用到HUD技術(shù),不需要時把它隱藏起來。實現(xiàn)步驟如下:
(1)創(chuàng)建一個osg::Camera對象,設置視圖、投影矩陣及渲染順序,以保證場景圖形全部渲染完成后才進行渲染;
(2)創(chuàng)建一個osg::Geode對象和osg::DrawPixels對象,并設置導航圖片;
(3)把葉節(jié)點Geode關(guān)聯(lián)到步驟(1)所創(chuàng)建的相機上。
4 結(jié)束語
本文介紹了基于OSG的虛擬校園漫游系統(tǒng)的設計與實現(xiàn)技術(shù)。重點介紹了場景的三維建模和漫游系統(tǒng)的實現(xiàn)。在教育應用方面,虛擬現(xiàn)實技術(shù)有著巨大的優(yōu)勢和潛能。隨著虛擬現(xiàn)實技術(shù)的進步和完善,虛擬校園的建設必將再上一個新的臺階。目前我們開發(fā)的系統(tǒng)的功能相對簡單,只提供了用戶在三維空間中的漫游功能,還不能滿足虛擬場景中人與人之間的關(guān)系互動需求。如何在三維虛擬校園漫游基礎上,開拓新功能,開發(fā)更有深度的應用,是我們下一步需要做的工作。