周小平, 呂希奎, 劉博航
(石家莊鐵道學院交通工程分院,河北 石家莊 050043)
虛擬現(xiàn)實中的建模與仿真是目前計算機圖形學中最熱門的技術(shù)之一,而虛擬對象的三維表現(xiàn)是整個虛擬現(xiàn)實系統(tǒng)建立的基礎。如何快速高效和高精度、高逼真度的建立模型是仿真建模關(guān)心的主要問題。OpenGL 雖然提供了球體、立方體和圓柱十幾個生成三維實體模型的輔助函數(shù),但這些函數(shù)難以滿足建立復雜三維實體的需要。對于復雜的鐵路構(gòu)造物三維模型,單純利用OpenGL 實例庫提供的幾何體構(gòu)建方法非常困難,建立的模型在效率上、逼真度上都較低[1]。因此,需要考慮借助其它第三方建模工具建立模型,避免在程序中建立模型的復雜過程,然后將復雜模型導入三維場景中實現(xiàn)繪制與控制,以實現(xiàn)三維景觀仿真。許多文獻對第三方模型的讀取都進行了研究[2-4],但線路構(gòu)造物作為線路的重要組成部分,其景觀仿真不僅僅涉及模型的簡單讀取問題,更重要的是如何在復雜線路三維場景中實現(xiàn)模型的精確控制和操作,以保證構(gòu)造物模型與線路模型成為統(tǒng)一整體,使所建立的景觀成為統(tǒng)一的景觀,而在這方面的研究卻比較少。因此,本文從模型的建立、讀取、管理、三維場景控制到景觀仿真實現(xiàn)給出了完整的解決方案,實現(xiàn)了基于外部模型的線路造物在線路三維場景中的高逼真度的景觀仿真,并給出了實例。
目前常用三維建模工具主要AutoCAD 、3DSMAX 、XSI 、MAYA、MultiGen Creator 等。AutoCAD 是一種靈活而可靠的三維建模工具,其圖形文件格式.dwg 和.dxf己經(jīng)成為國際工業(yè)標準,3DSMAX 具有強大的渲染功能。利用AutoCAD 可以得到精確的工程模型,利用3DSMAX 就可以建立復雜的渲染動畫模型。因此,通過對各建模工具的特點比較分析,本文先用AutoCAD 建立線框模型,再導入3DSMAX 中實現(xiàn)模型的的渲染,最后的模型文件為 3DS 文件格式。該方法集合了兩個軟件的所長,并使建模過程簡化,同時模型具有較高的逼真度。最后在OpenGL 中提取3DS 模型,實現(xiàn)對其控制和變換,營造出逼真的三維場景,實現(xiàn)與線路三維場景的無縫集成。流程圖如圖1 所示。
在3DSMAX 中建立好模型后,可以用多種文件格式存儲(.Max;.OBJ;.ASE;.3DS 等)。3DS格式以塊狀結(jié)構(gòu)存儲3D 模型數(shù)據(jù),由三角網(wǎng)方式保存的三維幾何圖形,即用三角面組成的網(wǎng)格面來近似各種曲面[4]。其中,還包含了模型的位置信息,基本材質(zhì)參數(shù)和燈光等信息??紤]到OpenGL 提供了最基本的由多邊形構(gòu)造三維模型的方法,故以三角形網(wǎng)格方式存的3DS 文件最為適合。
圖1 三維模型建模流程圖
讀取3DS 文件方法主要有兩種[5]:
方法1 通過3D exploration 或Deep explora- tion 等轉(zhuǎn)換工具將3DS 文件轉(zhuǎn)換為OpenGL 顯示列表,并在程序中調(diào)用。
方法2 讀取3DS 文件到自定義的圖形數(shù)據(jù)結(jié)構(gòu)中,生成OpenGL 顯示列表。
以上兩種方法中,方法1 需要預先對每個模型建立相應的顯示列表,靈活性較差。方法2 則靈活性高,直接讀取3DS 模型,系統(tǒng)自動建立相應的顯示列表。因此,本文采用第二種方法來讀取3DS 模型,流程如圖2 所示。
圖2 OpenGL 與3DS 接口流程
為了更加有效地對模型進行管理和重用,加快建模速度,需要有一個數(shù)據(jù)庫管理系統(tǒng)來對這些模型以及建模所用到的紋理等進行管理。構(gòu)建三維模型庫集中存放模型資源,并對這些資源進行有效地管理與維護是模型資源集中式管理的典型解決方案[6-7]。建立三維視景仿真模型庫是開發(fā)具有擴展性和逼真性的視景仿真系統(tǒng)的前提。 模型庫中的所有模型,按照各自的屬性、功能或用途等方面的不同被分為若干類型,每種類型都是一個獨立的存儲目錄,存放著所有屬于該類型的模型單元。最后所有的類型被包含于模型庫根目錄下,組成了完整的模型庫體系結(jié)構(gòu)。從上面可以看出模型庫的本質(zhì)就是一個樹型存儲結(jié)構(gòu),其根節(jié)點是模型庫目錄,枝干節(jié)點是模型類型,葉子節(jié)點是模型單元(見圖3)。
圖3 模型庫體系結(jié)構(gòu)
為從宏觀、整體的角度管理模型庫中的模型資源,維護模型庫體系結(jié)構(gòu)的獨立性和完整性,實現(xiàn)線路三維場景中模型資源的自動配置。本文采用Oracle 數(shù)據(jù)庫,基于OCI(Oracle Call Interface,即Oracle 調(diào)用接口)實現(xiàn)所有構(gòu)造物模型的數(shù)據(jù)庫管理。具備如下功能:模型預覽及屬性查詢、添加模型、刪除模型、編輯模型、查詢和統(tǒng)計模型等功能,如圖4 所示。
建立三維模型是前提,管理三維模型是保證,而將三維模型應用到三維場景中,實現(xiàn)景觀仿真才是最終目的。
圖4 模型庫管理模塊界面
目前在三維建模研究中,主要集中在單個模型的讀取顯示問題,并不涉及到具體的三維場景環(huán)境,而在線路三維場景中構(gòu)造物模型應用,就必須解決與其它三維模型(如路基、三維線路模型等)的匹配問題。主要有以下3 個問題是必須解決的:
(1) 模型位置的匹配
構(gòu)造物類型的不同,決定了其在線路三維場景中的位置也不同。如橋墩應該在橋面的下方并且是應設置橋梁處;隧道門應該在隧道的進口和出口處等等。只有模型位置的精確匹配,才是正確的,也是三維景觀所要求的。
(2) 模型大小的匹配
在建立單元模型時,不可能將單元模型的尺寸剛好設置成與三維場景中對應的大小。以橋墩為例,其寬度是由三維道路模型設置橋梁處的寬度決定。由于地形等因素影響,該寬度是不固定的,因此,也就無法固定單元模型的尺寸。
(3) 模型方向的匹配
這涉及到模型旋轉(zhuǎn)的問題。只有三維模型的方向與其相關(guān)聯(lián)的模型方向一致時,才能實現(xiàn)模型位置的精確匹配。
為了實現(xiàn)構(gòu)造物三維模型與整體三維場景的匹配,可通過平移變換、比例變換、旋轉(zhuǎn)變換解決。其中旋轉(zhuǎn)變換又可分為繞X 軸、Y 軸、Z軸3 種變換。OpenGL 提供了平移變換、比例變換和旋轉(zhuǎn)變換3 種模型變換方法。
為了保證模型精確匹配,必須考慮模型變換的順序問題,即旋轉(zhuǎn)、縮放、平移3 種變換的先后順序。OpenGL 對于模型矩陣的變換是按照棧式進行存儲的,根據(jù)棧的原理,后進先出,因此,變換順序如下:
(1) 旋轉(zhuǎn)操作,實現(xiàn)模型方向的匹配;
(2) 縮放操作,模型大小的匹配;
(3) 平移操作,模型位置的匹配。
下面以橋墩模型為例說明,其核心程序如下:
實現(xiàn)效果如圖5 所示。
構(gòu)造物的三維景觀仿真是線路整體三維場景仿真的重要組成部分。采用Visual C++、OpenGL 和Oracle 9i 數(shù)據(jù)庫相結(jié)合,建立了構(gòu)造物三維模型數(shù)據(jù)庫,實現(xiàn)了對構(gòu)造物的有效管理。基于OpenGL 的圖形變換技術(shù),解決了構(gòu)造物模型與線路整體三維場景的精確匹配問題,實現(xiàn)了構(gòu)造物模型在三維線路場景中的景觀仿真應用,構(gòu)建了線路三維場景的統(tǒng)一景觀,提高了景觀仿真的逼真度。
圖5 構(gòu)造物三維模型的應用效果圖
[1] 蔣紅斐. 鐵路線路三維設計模型建立方法的研究[J]. 鐵道學報, 2000, 22(4): 73-76.
[2] 張正波, 牟 彥, 黃 華. OpenGL 實現(xiàn)3DS 文件中的模型自由旋轉(zhuǎn)[J]. 計算機工程與應用, 2005, 41(13): 98-100.
[3] 殷素峰, 高雪強, 楊勝強. 在OpenGL 環(huán)境下開發(fā)3DS 文件瀏覽器[J]. 工程圖學學報, 2005, 26(6): 22-24.
[4] 蔡 勇, 楊振中. 3DS模型在虛擬仿真軟件開發(fā)中的應用[J]. 西南科技大學學報, 2004, 19(2): 7-11.
[5] 呂??? 易思蓉, 何 麗. 基于OpenGL 環(huán)境的模型數(shù)據(jù)庫管理與復雜三維建模[J]. 工程圖學學報, 2007, 28(2): 12-16.
[6] 趙定海, 黃璽瑛. 三維造型庫的設計與實現(xiàn)[J]. 裝甲兵工程學院學報, 2005, (3) : 29-33.
[7] 薛文革, 周俊林. 模型庫管理的工程化[J]. 計算機應用研究, 1995, (4): 24-28.