周小平, 呂希奎, 劉博航
(石家莊鐵道學院交通工程分院,河北 石家莊 050043)
虛擬現實中的建模與仿真是目前計算機圖形學中最熱門的技術之一,而虛擬對象的三維表現是整個虛擬現實系統建立的基礎。如何快速高效和高精度、高逼真度的建立模型是仿真建模關心的主要問題。OpenGL 雖然提供了球體、立方體和圓柱十幾個生成三維實體模型的輔助函數,但這些函數難以滿足建立復雜三維實體的需要。對于復雜的鐵路構造物三維模型,單純利用OpenGL 實例庫提供的幾何體構建方法非常困難,建立的模型在效率上、逼真度上都較低[1]。因此,需要考慮借助其它第三方建模工具建立模型,避免在程序中建立模型的復雜過程,然后將復雜模型導入三維場景中實現繪制與控制,以實現三維景觀仿真。許多文獻對第三方模型的讀取都進行了研究[2-4],但線路構造物作為線路的重要組成部分,其景觀仿真不僅僅涉及模型的簡單讀取問題,更重要的是如何在復雜線路三維場景中實現模型的精確控制和操作,以保證構造物模型與線路模型成為統一整體,使所建立的景觀成為統一的景觀,而在這方面的研究卻比較少。因此,本文從模型的建立、讀取、管理、三維場景控制到景觀仿真實現給出了完整的解決方案,實現了基于外部模型的線路造物在線路三維場景中的高逼真度的景觀仿真,并給出了實例。
目前常用三維建模工具主要AutoCAD 、3DSMAX 、XSI 、MAYA、MultiGen Creator 等。AutoCAD 是一種靈活而可靠的三維建模工具,其圖形文件格式.dwg 和.dxf己經成為國際工業標準,3DSMAX 具有強大的渲染功能。利用AutoCAD 可以得到精確的工程模型,利用3DSMAX 就可以建立復雜的渲染動畫模型。因此,通過對各建模工具的特點比較分析,本文先用AutoCAD 建立線框模型,再導入3DSMAX 中實現模型的的渲染,最后的模型文件為 3DS 文件格式。該方法集合了兩個軟件的所長,并使建模過程簡化,同時模型具有較高的逼真度。最后在OpenGL 中提取3DS 模型,實現對其控制和變換,營造出逼真的三維場景,實現與線路三維場景的無縫集成。流程圖如圖1 所示。
在3DSMAX 中建立好模型后,可以用多種文件格式存儲(.Max;.OBJ;.ASE;.3DS 等)。3DS格式以塊狀結構存儲3D 模型數據,由三角網方式保存的三維幾何圖形,即用三角面組成的網格面來近似各種曲面[4]。其中,還包含了模型的位置信息,基本材質參數和燈光等信息。考慮到OpenGL 提供了最基本的由多邊形構造三維模型的方法,故以三角形網格方式存的3DS 文件最為適合。

圖1 三維模型建模流程圖
讀取3DS 文件方法主要有兩種[5]:
方法1 通過3D exploration 或Deep explora- tion 等轉換工具將3DS 文件轉換為OpenGL 顯示列表,并在程序中調用。
方法2 讀取3DS 文件到自定義的圖形數據結構中,生成OpenGL 顯示列表。
以上兩種方法中,方法1 需要預先對每個模型建立相應的顯示列表,靈活性較差。方法2 則靈活性高,直接讀取3DS 模型,系統自動建立相應的顯示列表。因此,本文采用第二種方法來讀取3DS 模型,流程如圖2 所示。

圖2 OpenGL 與3DS 接口流程
為了更加有效地對模型進行管理和重用,加快建模速度,需要有一個數據庫管理系統來對這些模型以及建模所用到的紋理等進行管理。構建三維模型庫集中存放模型資源,并對這些資源進行有效地管理與維護是模型資源集中式管理的典型解決方案[6-7]。建立三維視景仿真模型庫是開發具有擴展性和逼真性的視景仿真系統的前提。 模型庫中的所有模型,按照各自的屬性、功能或用途等方面的不同被分為若干類型,每種類型都是一個獨立的存儲目錄,存放著所有屬于該類型的模型單元。最后所有的類型被包含于模型庫根目錄下,組成了完整的模型庫體系結構。從上面可以看出模型庫的本質就是一個樹型存儲結構,其根節點是模型庫目錄,枝干節點是模型類型,葉子節點是模型單元(見圖3)。

圖3 模型庫體系結構
為從宏觀、整體的角度管理模型庫中的模型資源,維護模型庫體系結構的獨立性和完整性,實現線路三維場景中模型資源的自動配置。本文采用Oracle 數據庫,基于OCI(Oracle Call Interface,即Oracle 調用接口)實現所有構造物模型的數據庫管理。具備如下功能:模型預覽及屬性查詢、添加模型、刪除模型、編輯模型、查詢和統計模型等功能,如圖4 所示。
建立三維模型是前提,管理三維模型是保證,而將三維模型應用到三維場景中,實現景觀仿真才是最終目的。

圖4 模型庫管理模塊界面
目前在三維建模研究中,主要集中在單個模型的讀取顯示問題,并不涉及到具體的三維場景環境,而在線路三維場景中構造物模型應用,就必須解決與其它三維模型(如路基、三維線路模型等)的匹配問題。主要有以下3 個問題是必須解決的:
(1) 模型位置的匹配
構造物類型的不同,決定了其在線路三維場景中的位置也不同。如橋墩應該在橋面的下方并且是應設置橋梁處;隧道門應該在隧道的進口和出口處等等。只有模型位置的精確匹配,才是正確的,也是三維景觀所要求的。
(2) 模型大小的匹配
在建立單元模型時,不可能將單元模型的尺寸剛好設置成與三維場景中對應的大小。以橋墩為例,其寬度是由三維道路模型設置橋梁處的寬度決定。由于地形等因素影響,該寬度是不固定的,因此,也就無法固定單元模型的尺寸。
(3) 模型方向的匹配
這涉及到模型旋轉的問題。只有三維模型的方向與其相關聯的模型方向一致時,才能實現模型位置的精確匹配。
為了實現構造物三維模型與整體三維場景的匹配,可通過平移變換、比例變換、旋轉變換解決。其中旋轉變換又可分為繞X 軸、Y 軸、Z軸3 種變換。OpenGL 提供了平移變換、比例變換和旋轉變換3 種模型變換方法。
為了保證模型精確匹配,必須考慮模型變換的順序問題,即旋轉、縮放、平移3 種變換的先后順序。OpenGL 對于模型矩陣的變換是按照棧式進行存儲的,根據棧的原理,后進先出,因此,變換順序如下:
(1) 旋轉操作,實現模型方向的匹配;
(2) 縮放操作,模型大小的匹配;
(3) 平移操作,模型位置的匹配。
下面以橋墩模型為例說明,其核心程序如下:

實現效果如圖5 所示。
構造物的三維景觀仿真是線路整體三維場景仿真的重要組成部分。采用Visual C++、OpenGL 和Oracle 9i 數據庫相結合,建立了構造物三維模型數據庫,實現了對構造物的有效管理。基于OpenGL 的圖形變換技術,解決了構造物模型與線路整體三維場景的精確匹配問題,實現了構造物模型在三維線路場景中的景觀仿真應用,構建了線路三維場景的統一景觀,提高了景觀仿真的逼真度。

圖5 構造物三維模型的應用效果圖
[1] 蔣紅斐. 鐵路線路三維設計模型建立方法的研究[J]. 鐵道學報, 2000, 22(4): 73-76.
[2] 張正波, 牟 彥, 黃 華. OpenGL 實現3DS 文件中的模型自由旋轉[J]. 計算機工程與應用, 2005, 41(13): 98-100.
[3] 殷素峰, 高雪強, 楊勝強. 在OpenGL 環境下開發3DS 文件瀏覽器[J]. 工程圖學學報, 2005, 26(6): 22-24.
[4] 蔡 勇, 楊振中. 3DS模型在虛擬仿真軟件開發中的應用[J]. 西南科技大學學報, 2004, 19(2): 7-11.
[5] 呂希奎, 易思蓉, 何 麗. 基于OpenGL 環境的模型數據庫管理與復雜三維建模[J]. 工程圖學學報, 2007, 28(2): 12-16.
[6] 趙定海, 黃璽瑛. 三維造型庫的設計與實現[J]. 裝甲兵工程學院學報, 2005, (3) : 29-33.
[7] 薛文革, 周俊林. 模型庫管理的工程化[J]. 計算機應用研究, 1995, (4): 24-28.