劉萍萍,陸兆攀,高武奇
(西安工業大學 計算機科學與工程學院,陜西 西安 710021)
隨著虛擬現實及相關技術的不斷進步與發展,人們之間的交流也將采用新的方式、進入新的領域,實現由文字圖像到三維VR(虛擬現實)的轉變[1]。當前以信息技術為背景的現代教育,絕大部分多媒體信息系統具有明顯的局限性,例如學生只能按照時間的流程,按電腦中程序設計的流向有限制地進行瀏覽和學習,這大大降低了學生學習的參與性以及熱情。而虛擬現實技術[2]能夠創建與現實社會類似的環境,可以使人產生一種身臨其境的真實感,能夠使人與虛擬環境之間進行多維信息的交互,形象生動地表現教學內容,有效地營造一個跟隨技術發展的教學環境,提高學生掌握知識、技能的效率,優化教學過程、提高教學質量、調動學生的學習積極性、突破教學的重點、難點。在教育方面營造一個“自主學習”的環境進而取代傳統的“以教促學”的學習方式,為數字大學建設提供一個重要的校園信息化平臺。但在虛擬仿真校園的應用上也只是簡單地提供虛擬校園環境給學生及家長們瀏覽,在基于教學、教務、校園生活的交互方面還需要進一步的研究[1]。
文中以西安工業大學未央校區為虛擬空間,通過應用OpenGL編程、3D max建模技術以及SQL數據庫技術,從OpenGL基本圖形元的創建、渲染、視角的轉換等方面,創建出具有全景圖展示、固定路徑漫游、交互式漫游、碰撞檢測響應、漫游系統交互性等功能的虛擬校園漫游系統[3]。
虛擬校園漫游系統[4-5](virtual campus)屬于假想或者真實空間的仿真,漫游系統以地理、虛擬現實、多媒體、寬帶等技術作為基礎,結合了屬性和地理空間信息等方面的內容,并進行了逼真的虛擬校園環境的構建,用戶能夠通過計算機網絡對校園景觀進行訪問,并利用終端計算機在虛擬校園環境中展開漫游以及相應的搜索和查詢等[6]。
1.1.1 OpenGL技術
OpenGL(open graphics library),也被稱作是圖形程序接口技術,是一套三維圖形處理庫,一個跨編程語言、跨平臺的編程接口,一個功能強大、調用方便的底層圖形庫[7]。OpenGL具有性能高、穩定性好、工業標準、可靠度高、靈活性好、可伸縮性、可擴展性、容易使用等特點,可以被集成到Unix、Windows等窗口系統中,其功能基本上都以C函數的形式提供給外界,開發人員可利用這些函數輕松地對整個三維圖形進行光色渲染。本系統以Visual C++為平臺,利用OpenGL技術建立三維場景,調用3DS Max對建筑模型進行建模,實現虛擬漫游[8]。
1.1.2 SQL數據庫技術
SQL數據庫技術[9],即操作命令集,在使用時,不必考慮“怎么做”,只需要發出“做什么”的命令就可以,屬于一種功能齊全的數據庫語言。SQL功能強大,使用方便,成本低,性能高,已成為數據庫操作的基礎。
1.1.3 虛擬現實技術
虛擬現實技術(virtual reality)結合了多方面的應用,具有自主性、交互性以及感知性等特點,是一種高級仿真技術,其能夠對虛擬世界進行創建之后的體驗。其主要包括模擬環境、感知、自然技能和傳媒設備等方面的內容。通過計算機可以進行環境的模擬,并利用專用設備讓用戶投入到相應過程中,使用戶和環境之間的交互得以實現。
基于OpenGL的虛擬現實技術[10]是通過計算機圖形學的理論來建模實現,在這個過程中旨在實現校園的虛擬漫游與交互。本課題主要討論基于VC++開發平臺和OpenGL的虛擬校園漫游系統的設計和實現,利用3D Max建模,通過天空盒算法的Background節點技術實現天空繪制,并采用LOD算法實現地形渲染等,最終實現了虛擬校園漫游系統。系統開發流程如圖1所示。

圖1 系統開發流程
虛擬場景的建設可分為三步:第一步,根據校園內各建筑物以及各環境物體的分布圖和具體平面圖,建立一個真實的虛擬校園;第二步,對校園內各單個實體對象分別建模,以場為基礎,在空間上連續分布諸如地形、天空等景觀對象,以離散的實體為特征,以獨立的個體為存在的地形對象,如建筑物、樹木、路燈等;第三步,構建好各個單獨的實體場景后,再把這些場景整合在一起,合成完整的虛擬校園場景。
該設計利用OpenGL進行建模,采用3D紋理貼圖的方式繪制場景,借助照相機、Photoshop等圖像采集與處理的離散圖像通過計算及處理進行了全景圖的生成,最后在VC++6.0環境中進行交互控制,從而實現虛擬校園全景漫游系統。
系統基本功能模塊如圖2所示。

圖2 系統基本功能模塊
在虛擬校園的實現過程中,完整的三維空間數據和影像數據是構建虛擬校園必不可少的。在建立地形模型的過程中,通常采取的方法是數字攝影測量。基于攝影測量的基本原理,以相片作為原始資料,通過影像處理、影像匹配等方法生成模擬模型和數字模型,然后轉化成DEM格式,將形成的DEM與數字地圖輸入到相應的數據庫。數據處理流程如圖3所示。

圖3 數據處理流程
在建筑物當中,不同內容的高度確定往往是依照建筑設計圖紙來進行的,在獲得建筑物幾何特征三維模型的過程中,能夠利用建筑設計圖紙展開進一步的提取。可利用已有地圖掃描數字化的矢量數據應對屋頂的三維建筑技術要求不高的建筑物。假如僅僅是得到了二維矢量數據內容,那么應當依照樓層層數進行高度的推斷。
對于紋理數據,通過紋理圖像能夠對景物表面所具有的不一樣的反射特性進行表示。在這個過程中所表示的紋理映射也就是把已經制定圖像當中的部分內容進行映射,使之映射到紋理映射的圖像片段當中,這種映射與圖像顏色到圖像坐標位置有密切關系,并且在這個過程中可以進行圖段RGBA顏色的進一步修改。要使用當前的紋理繪制圖元,必須在繪制每個頂點之前為該頂點制定紋理坐標。只需調用glTexCoord2d(s:Double;t:Double)函數即可。其中,s、t是相對2D紋理產生的s、t坐標。對所有紋理,無論其具有怎樣的大小,在左上角也就是頂端的紋理坐標都是(0,0),右下角則是(1,1)。在這個過程中表示的是,紋理坐標應當是一個在0到1之間所具有的數字。
紋理貼圖實現代碼如下:
namespace OGL
{class CCylinder
{float m_Radia;//圓柱半徑
floatm_Height;
int m_Slice;//圓柱由m_Slice個劃分
CGLTexture *m_pTexture;
Public;
CCylinder():m_pTexture(NULL)
{m_Radia=1 280-128;
m_Height=1 024+1 024;
m_Slice=12;
CharCylinderTex[255]=“Scene1.JPG”;
LoadCylinderTexture(CylinderTex);}
void LoadCylinderTexture(char*CylinderTex)
{If(m_pTexture!=NULL)delete m_pTexture;
m_pTexture=new CGLTexture(Cylinder Tex);}
~CCylinder()
{ deletem_pTexture;}}
在該系統開發中,通過3D Max軟件與OpenGL的結合使用,降低了系統構建的復雜程度。構建虛擬校園模型的關鍵是要分析場景的形態特點,根據場景模型存在的狀態特性,可劃分為動態實體模型和靜態實體模型。
在獲得相應的紋理圖片及信息數據之后,根據虛擬校園系統組成情況進行場景模型的建模。系統三維模型如圖4所示。

圖4 系統三維模型
(1)虛擬校園的靜態實體模型構建。
校園靜態實體[11]包括教學樓、圖書館、操場、道路及綠化等。靜態建模主要是以實體自身特性的幾何模型建模和以實體因外部環境引起的物理模型建模組成。靜態實體模型的物理建模,主要是對因外在環境引起的不同實體紋理。而靜態實體模型的幾何模型,主要是自身外形的實體模型。在靜態實體模型的幾何建模過程中,根據采集的實體模型數據的復雜程度不同,對于規則靜態實體模型可以使用3D Max來建立模型。而對于不規則實體模型,先使用AutoCAD對模型輪廓進行修改[12],再通過3D Max建立模型。
(2)虛擬校園的動態實體模型構建。
在構建校園系統模型過程中,構建運動部分時有可能會改變原來模型組織的內部結構,所以應在建模形成的模型文件中增加與運動部分鏈接的自由度節點,設置相應的定位坐標,并在自由度基礎上對模型的運動部分進行分析,從而確定運動關系。
動態實體模型作為虛擬校園系統模型的重要組成部分,其建模過程是:用建模工具3D Max構建校園系統模型中動態模型的靜態、動態兩個部分,在構建動態模型過程中將自由度增大;增強動態實體模型的動畫展示效果;在虛擬校園系統的模型中呈現動態模型的flash效果。
(3)天空場景的設計。
本系統中天空的實現使用了天空盒算法的Background節點,為虛擬校園場景的天空增加藍天白云效果,以提高三維虛擬校園場景的真實性。在Background節點中,分別用skyColor和skyAngle域值來控制天空的顏色。skyColor域指定立體空間背景天空的顏色,域值是由一系列的紅色、綠色和藍色組合而成。skyAngle域是指定立體空間背景上需著色的位置的天空角。在這個過程中對所有天空的顏色進行設定,從而產生相應的過渡,產生漸變作用,從而使天空看起來更加逼真。
天空盒的實現是通過矩形方盒作為天空遠景貼圖,產生相應的立方體。首先生成一個足夠大的立方體,然后將表現天氣效果的不同天空紋理貼在立方體盒子的各個不同面上,避免出現太平面化、粗糙的情況,采用一種淺藍色的天空使背景進一步得以消除,以此來表達模擬效果的逼真程度。作為天空背景的圖片需滿足的條件是:圖形格式應當為BMP,即位圖;根據size參數設置圖片尺寸,尺寸有嚴格的要求,最好是2的倍數;設置好保存路徑和名稱,渲染時必須保證四邊應與相關圖像的位置相互連接。
(1)建筑物幾何模型優化。
在虛擬校園系統中,依據學校中建筑物的外觀以及結構展開分類,之后進行模型構建,對外觀或者結構相同的建筑物采取同樣的模型進行建造,對較為復雜的模型則通過拆分方法進行簡化,之后展開建模。
在建筑物建模方面,幾何模型包含頂部和墻面兩方面的內容。墻面可以利用畫面或者線段的手段得以實現。頂部包含一切頂點坐標,因為在建模過程中不同建筑物具有不同的頂部形狀,不能采取通用模型對建筑物頂部的狀況進行表達,需要依照相關規則排列的坐標數據對不同的信息進行推進,對所有建筑物都需要依照頂部外形特征展開分類,對于不同建筑物采取的幾何模型數據也是完全不同的。
(2)三維虛擬校園建筑物的紋理映射。
“在影響翻譯實踐的諸多因素中,最活躍且起著決定性作用的,是翻譯的主體因素。”[3]許鈞總結了國內有關翻譯的主體的討論,得出翻譯主體可以是:“譯者,原作者與譯者,譯者與讀者,原作者、譯者與讀者,”[4]雖然他沒有具體的指出翻譯主體的具體概念,但總的來看,由于譯員在翻譯活動中擁有獨特地位、創造性和能動性,造成其在翻譯主中的不可或缺性。許鈞在《翻譯的主體間性與視界融合》一文中提出:“翻譯活動中作者、譯者和讀者之間關系的和諧是保證翻譯成功的重要條件。”[5]
對建筑物窗戶進行建模通常利用線段展開構造,對窗戶的框架進行描述并展開渲染。由于校內建筑物體眾多,若要一一進行建模,需要消耗太多的時間,且會影響系統運行速度。所以不同建筑物表面的窗戶都能利用紋理映射的方法展開建模。具體的實現手段在于:將學校中所有建筑物的數據紋理展開加工并轉換成對應格式,對所有面展開相應的映射。
(3)消隱處理。
在真實感圖形生成中,為了提高模型的加載效率,需要對場景模型進行消隱處理。場景的消隱就是給定視點以及視線,進一步決定場景當中物體表面的可見性以及被遮擋之后不可見的特性。消隱可看成是一個排序問題,排序的效率可影響到消隱算法的效率。
在某個視點當中對三維物體進行觀察,能夠看到物體表面分布的點線面,而其他部分可能被這些部分進行遮擋,如果想要使三維物體得以展現,應當在確定相應的視線之后,對表面不可見的點線面進行消除,這種方法也就是消隱算法。
目前的消隱算法中,背面消除、Z緩沖器算法、畫家算法以及掃描線算法等比較常見。
Z緩沖器算法主要是對投影平面上每個像素所對應的表面深度進行比較。不需要整個場景的幾何數據,是所有圖像空間算法當中較為簡單的消隱內容。面對同樣的像素,Z緩沖器往往是進行表面的保存,假如新的表面深度相對緩沖器表面深度與視點更加接近,那也就保存了新的內容。
Z緩沖器算法實現代碼如下:
{for(x=0;x for(y=0;y 置Z緩存的第(x,y)單元的顏色為背景色;} for(每一個多邊形平面) for(投影平面上的每一個像素) {計算多邊形在該像素(x,y)處的深度值d; If(d>Z緩存在(x,y)處的值) {置Z緩存的第(x,y)單元的深度值為d; 置Z緩存的第(x,y)單元的顏色值為當前多邊形顏色值;}}} 虛擬現實技術最主要的特征之一是實時交互性,是虛擬校園建設的核心。三維場景構建好后,需進行交互性的調試。系統可以通過實時交互控制,借助鼠標、鍵盤等外部輸入設備,在電腦上實現校園的漫游虛擬。 系統交互漫游時主要通過NavigationInfo(導航)節點和Viewpoint(視點)節點進行控制。瀏覽速度和方式通過NavigationInfo節點設置,瀏覽校園中相應場景時,其位置和朝向通過Viewpoint節點設置。用戶借助鍵盤、鼠標等外部設備對校園場景直接交互功能的實現如圖5所示。 圖5 直接交互功能 在系統實現的進程中,當用戶站立角度發生改變時,場景內的物體就應當重新展開繪制。具體方法包括:利用場景中三維物體的改變得以完成,或者通過視點變換使交互場景畫面得以改變。 gluLookAt()函數是OpenGL中提出的視點變換的方法,這種函數對旋轉和平移的命令進行了封裝,其通過眼睛位置、參考和矢量進行矩陣的改變,并將目標點映射到相應z軸當中,原點屬于其觀察點。在投影矩陣的過程中,場景映射到相關視區中心,而向上矢量則映射到y軸當中,不過在這個過程中向上矢量并不一定與視線到參考線之間進行平衡。 交互漫游控制實現的主要代碼如下: (1)初始化模型。 static t3DMode1 g_3DMode1[2]; CLoad3DS* m_3DS=new CLoad3DS; m_3DS->Init(“neicum2 3DS”,0); gLoadName(0); m_3DS>show3DS(0,g_3DModel[0].Position x,g_3DModel[0].Position y,g_3DModel[0].Position z,0. 6,g_3DModel[0].bngitude,g_3DModel[0].latitude); (2)選擇函數。 hits=glRendeMode(GL_RENDER); if(hits<=0) return -1; returnselectBuf[(hits-1)*4+3]; (3)平移函數。 g_3DModel[hits].Position x+=m_xTranslation; g_3DModel[hits].Position y+=m_yTranslation; (4)旋轉函數。 g_3DMode[hits].longitude-=theta; g_3DMode[hits].latitude+=phi; 碰撞檢測技術[13]主要是對場景內部的物體進行,隨著在場景內部全局Camera的移動,相當于觀察者在場景中進行漫游。當觀察者移動到一些場景內部時,如果沒有碰撞檢測,就會直接穿過物體,不符合實際情況,所以需要引入碰撞檢測技術。 本模塊主要利用包裝盒算法[14]對三維場景中的物體區域進行判斷,建立包裝盒,判斷場景中哪些物體應當展開碰撞檢測。在發生包裝盒級別碰撞的過程中,對三角形級別碰撞是否發生進行進一步的判斷。這種包裝盒級別分區域級別[15],最后進行的往往是三角形級別過程中的檢測,相對于普通檢測算法,精確度往往較高,而且避免了碰撞檢測過程中導致的性能損失。在具體實現過程中有如下方面的手段:首先依照物體運動規律或者用戶輸入在每一幀的位置進行計算,這時不用對碰撞檢測問題進行考慮,然后再對場景中的三角形進行循環檢測。在循環的過程中進行如下操作: (1)找到當前三角形所在的平面,暫且稱之為平面S; (2)對物體在上一幀以及當前位置進行判斷,并判斷其與平面S之間存在的關系。假如上一幀在平面之前,而這一幀已經達到了平面之后,那么進行第1步的計算。 (3)因為在平面兩側屬于前后兩幀物體的移動,也就表示物體已經穿過了平面當中。但是由于平面沒有邊界,這時不能表示物體與三角形之間產生了碰撞,還需要對物體在三角形三條邊范圍當中的界限進行判斷。在通過了三條邊之后進行平面PS1,PS2,PS3的垂直設置。并令其法線指向內部當中,對物體位置進行判斷,判斷其是否處于相應的平面當中,是則轉步驟4,否則轉步驟5。 (4)當確定物體與三角形產生碰撞之后進行位置的修正,使其能夠依照S進行運動。 (5)當確定物體沒有產生碰撞時,將下一個三角形作為相應的三角形,并重新返回步驟1。 攝像機虛擬漫游效果如圖6所示。 圖6 虛擬漫游效果 以虛擬現實技術為基礎,介紹了基于OpenGL虛擬校園漫游系統的開發情況,對開發虛擬校園漫游系統的基本算法進行進一步研究,并對場景模型的建模和漫游交互功能等內容進行介紹和實現。完成了三維虛擬校園漫游系統的開發設計。通過測試,該虛擬校園漫游系統運行流暢。虛擬校園全景漫游系統真實地進行了三維景觀的表述,用戶可以借助鼠標和鍵盤等外部設備在三維虛擬校園場景中漫游,使校園真實感的交互操作得以實現。 參考文獻: [1] 李建榮,孔素真.虛擬現實技術在教育中的應用研究[J].實驗室科學,2014,17(3):98-100. [2] 趙 蔚,段 紅.虛擬現實軟件研究[J].計算機技術與發展,2012,22(2):229-233. [3] 王文韜,謝陽群,李 力.虛擬現實技術在圖書館中的應用前景分析[J].圖書館,2016(5):10-14. [4] 馬利亞.基于虛擬現實的漫游系統關鍵技術的研究[D].哈爾濱:哈爾濱工程大學,2010. [5] 劉小英,張 健.三維校園虛擬現實平臺的設計與實現[J].湖北農業科學,2014,53(12):2909-2912. [6] 李清艷,傅自鋼.基于OpenGL的三維時鐘設計[J].電腦與信息技術,2016,24(3):52-54. [7] 肖 健,魏 雄,王仁波.基于OpenGL的大型建筑三維場景模擬的實現與意義[J].電子質量,2016(11):88-92. [8] 馬 萍.三維虛擬校園立體場景的設計與實現[D].濟南:山東師范大學,2013. [9] 王琰萍.山東信息職業技術學院虛擬校園的設計與實現[D].青島:中國海洋大學,2011. [10] 婁啟業,程效軍,譚 凱.基于AutoCAD和3DMax的建筑物三維建模[J].工程勘察,2013(11):71-74. [11] 田文波.成都理工大學虛擬校園建設的研究[D].成都:成都理工大學,2013. [12] ZHOU Z,FENG Y,GANG R,et al.Virtual reality based process integrated simulation platform in refinery:virtual refinery and its application[J].China Petroleum Processing & Petrochemical Technology,2011,13(3):74-84. [13] NOVAKMARCINCIN J.Selected applications of virtual reality in manufacturing[J].Journal for Technology of Plasticity,2011,36(1):25-34. [14] KAMARAJ D C,DICIANNO B E,MAHAJAN H P,et al.Stability and workload of the virtual reality-based simulator-2[J].Archives of Physical Medicine & Rehabilitation,2016,97(7):1085-1092. [15] BAMODU O,YE X M.Virtual reality and virtual reality system components[J].Advanced Materials Research, 2013,765-767:1169-1172.3 虛擬校園漫游系統交互性的實現
3.1 交互漫游的實現

3.2 交互漫游的控制
3.3 碰撞檢測功能的實現

4 結束語