張繼超,馬洋洋,董塞漠
(1.遼寧工程技術大學 測繪與地理科學學院,遼寧 阜新123000;2.中國伊斯蘭教協會,北京100053)
隨著虛擬現實技術的發展和“數字地球”概念的提出與廣泛實踐,對三維虛擬校園的構建研究也越來越多。三維虛擬校園可提供校園的虛擬環境,讓人足不出戶就能實現對該場景的漫游與交互,從而達到身臨其境的主觀感受。
Direct X自從1995年出現以來,己成為目前計算機領域中最廣泛的3D標準規范,在眾多3D開發領域得以應用。而C#開發語言,不僅能夠實現對Direct X自身強大的渲染功能的調用,而且能將操作者的意圖運用圖像界面流暢地表現出來[1]。3DSMax是由Autodesk旗下的公司開發的三維建模和動畫制作軟件,具有強大、完美的三維建模功能,是當今世界上最流行的三維建模、動畫制作及渲染軟件。本文利用 C#調用 Direct X[2-3],結合3DSMax建模工具,對三維虛擬校園的構建方法進行探討,并以遼寧工程技術大學(中華路校區)為例,實現了三維虛擬校園的初步構建。
三維模型是物體的三維多邊形表示,通常用計算機或者其它視頻設備進行顯示。顯示的物體可以是現實世界的實體,也可以是虛構的東西,既可以小到原子,也可以大到很大的尺寸。任何自然界存在的物體都可以用三維模型表示[4]。
三維模型廣泛用于任何使用三維圖形的地方。實際上,它們的應用早于個人電腦上三維圖形的流行。許多計算機游戲使用預先渲染的三維模型圖像作為sprite用于實時計算機渲染
近年來,隨著數字城市的發展,三維模型也在地球科學領域得到廣泛應用,如建立數字高程模型、三維地質模型、數字小區、數字校園[6]等。
三維模型本身是不可見的,為增加模型的真實效果,常采用紋理映射或其他方法(如調整曲面法線、立體渲染等)來增強模型。
為了將真實世界的對象以三維模型的形式表達出來,需要將世界空間的對象先轉換為模型自身的空間坐標系,然后利用攝像機空間展示顯示區域,其轉換過程如圖1所示。

圖1 三維坐標轉換過程
攝像機空間轉換的過程需要3個參數:即攝像機位置、目標位置以及攝像機上下方向,這3個參數又稱為攝像機矩陣,都為空間向量[7]。在Direct X中可以通過這3個向量形成一個視圖矩陣。即以攝像機位置為起點、攝像機目標位置為終點的單位向量作為攝像機空間的Z′軸坐標(相對于世界空間),然后根據左手法則或右手法則計算出攝像機空間的X′軸坐標,最后計算出攝像機空間的Y′軸坐標。所以視圖矩陣中保存攝像機空間X′,Y′,Z′軸坐標在X,Y,Z方向上的分量,以及在攝像機空間中世界坐標原點的位置,如圖2所示。

圖2 視圖矩陣
利用C#調用Direct X接口,完成場景的搭建、材質燈光的導入、場景整體渲染、攝像機導入等功能。
1)新建項目并添加新建項。新建一個Visual C??枕椖?,設置其項目名稱,在解決方案資源管理器中選擇項目名稱并添加新建項。
2)添加窗體及引用。在 “添加新項”窗體上選擇“Windows窗體”模板,完成窗體添加,并在主菜單上選擇“項目—添加引用”,在.NET中添加Direct X和 Direct X.Direct3D(X)等組件,完成 Direct X的調用。
在全局中定義頂點變量,設置貼圖圖片上的水平和垂直位置的坐標分別為Tu和Tv,其中貼圖坐標(0,0)表示圖片左上角,貼圖坐標(1,1)表示右下角。在全局中定義貼圖變量texture及材質變量material,分別用于保存貼圖圖片對象和材質對象,通過指定材質類型可以設置三角形表面的反射等方式。將場景圖片文件復制到項目目錄下作為場景的底圖,并修改渲染函數,導入貼圖和材質函數的相關代碼,進行渲染,然后以上述類似的方式繪制三角形,將兩三角形拼接到一起,構建整個場景底圖。
調整三角形頂點坐標及攝像機位置,然后修改攝像機函數Set Up Ca mera()中視圖矩陣的代碼,對攝像機進行旋轉[8]。以圍繞Y軸選擇為例,首先在全局中定義旋轉角度及攝像機位置等變量,然后修改攝像機函數,設置鍵盤輸入的Left和Right鍵來控制攝像機的左右旋轉,并通過直接添加窗體的On Key Down()重載函數來實現。
值得注意的是,上述過程實現了攝像機左右旋轉的功能,但是這個旋轉是相對于世界坐標系的Y軸,如果攝像機空間坐標系的Y軸和世界坐標系的Y軸不為同一個方向,這將導致旋轉功能無法完全實現。因此在定義旋轉軸時,應以攝像機空間坐標系的Y軸方向為旋轉軸。除了左右旋轉外,攝像機還應具有上下旋轉來調整視角的功能,此時,其旋轉軸為攝像機空間坐標系的X軸。
攝像機縮放的控制,可以通過設置攝像機位置的比例函數Scale()來實現。在窗體的 On-Key Down()重載函數中添加縮放攝像機代碼,并可設置鍵盤快捷鍵(如鍵盤加號(+ 表示放大、減號(-)表示縮?。┛刂茢z像機的放大和縮小操作。
通過Direct3D繪制的每個對象都是由三角形組成的,一個三角形由3個點組成,而每個點都定義成一個向量來指定點的X,Y,Z坐標。所有基本體,主要是由長方體和球體組成[9]。對于任意一個六面體,其各頂點坐標編號如圖3所示。

圖3 六面體頂點坐標編號
通過繪制12個三角形即可形成圖3所示的六面體,將該六面體的頂部和底部面、四周的面進行展開。值得注意的是,為了使頂面的法線向外(即頂點序號按順時針排列),對于底部的面采用序號反向使得繪制的三角形可見。其結果如圖4所示。

圖4 立方體繪制結果
在Direct X中,幾何模型對象基本上都是通過Mesh來表示,它也是組成三維場景的基本元素之一。Mesh類具有一個Clone()方法用于復制網格對象至另外一個網格對象中,修改全局變量、初始化函數及渲染函數的相關代碼,復制長方體,將之前建立的場景與幾何體結合到一起,合并相關代碼,進行整體三維場景的搭建[9]。將相關幾何體進行材質貼圖,使其變成完整樓體。
Direct X雖然可實現用戶交互功能,運用鼠標與鍵盤的輸入,多角度觀測整體場景,但該軟件的精度不高,對三維模型細節的渲染不夠完善。因此,本文應用3DSMax軟件對部分三維模型進行制作及渲染。
建模過程包括:三角網搭建、元素的對齊、線條的擠出、布爾運算、圖形的縮放、空間坐標的選定、材質編輯以及渲染參數的設定等。
下面以致遠樓為例,闡述3DSMax模型的構建過程。
1)繪制長方體,并設置其長、寬、高及材質,作為部分樓體輪廓,如圖5所示。

圖5 樓體輪廓
2)建立指定長方體,與樓體輪廓相交,運用布爾運算、復制陣列等,對樓體輪廓進行摳圖,作為門窗的位置。
3)制作門窗,運用多個尺寸不同的長方體,按固定位置進行擺放,作為窗框、門框和玻璃,然后找到相關元素的材質參數,編輯材質,如圖6所示。

圖6 窗戶制作
4)以同樣的方式制作樓體輪廓的中心部分。運用鏡像功能將樓體輪廓的右側部分鏡像并作為樓體的左側部分,最后運用3DS的“倒角”和“擠出”功能,制作樓體的頂部及側面元素并設置材質,如圖7所示。

圖7 鏡像后模型
5)將所有制作完成的模型進行拼接,增加天光,設置高級照明參數并進行映射紋理,對模型進行渲染,如圖8所示。

圖8 渲染后“致遠樓”模型
本文以遼寧工程技術大學(中華路校區)為例,結合校園遙感影像圖和建筑物側面照片紋理數據,進行了三維虛擬校園的構建。
將校園遙感影像文件復制到項目目錄下作為場景底圖,修改渲染函數,導入貼圖和材質函數的相關代碼,進行渲染。然后,修改鼠標控制相關代碼,得到校園3 D場景互動平臺,如圖9所示。

圖9 校園3D場景互動平臺
在3DSMax下,選擇具有普遍性、代表性以及真實場景的特殊性地物,完成典型地物要素的三維精確建模。主要包括:編輯地形、水泥地面及主要建筑物的導入、花壇的設計、草坪的渲染,并增加樹木、垃圾箱、路燈等地物,提高虛擬校園的視覺效果。部分效果如圖10所示。
本文基于C#調用Direct X,輔以3DSMax實現了三維虛擬校園的構建,包括三維場景的搭建;樓體元素的構建及導入;樓體貼圖函數的運用及場景圖的渲染;其他實體模型構建與導入;燈光及材質代碼的編寫;攝像機位置設置等。用戶能夠通過鼠標鍵盤等設備輸入相關消息,并可以對三維場景進行多角度操作,真正實現了系統的用戶交互功能。此外,通過3DMAX軟件制作的模型場景,補償了Direct X的表現效果,完善了三維虛擬校園的元素細節,增加了真實感。
[1] 肖澤云.基于Visual C#的Direct X開發實例[M].宜昌:三峽大學出版社,2010.
[2] 吳昊.關于C++BUILDER語言的Direct X開發問題的研究[J].軟件導刊,2006,5(6):67-69.
[3] 李震宇.游戲開發之路——在C++Builder中進行Direct X編程[J].電腦編程技巧與維護,2000,6(3):72-86.
[4] 馬萍.三維虛擬校園立體場景的設計與實現[D].濟南:山東師范大學,2013.
[5] 孫明杰,韓超.用C++6.0和Direct X實現太空射擊游戲引擎[J].科技廣場,2006,18(5):77-79.
[6] 王建敏,王凱,孟凡帥.校園三維景觀設計與實現[J],測繪工程,2011,20(3):62-64.
[7] 徐黎明.Visual C++下Direct3D坐標變換的實現 [J].軟件導刊,2008,7(2):77-79.
[8] LAH SAU MENG,KELVIN.Design and Development of a Peer-to-Peer Online Multiplayer Game Using Direct X and C#[A].TENCON 2004 IEEE Region 10 Conference,Singapore,2004:278-281.
[9] FENGHUA SHI.Visualization Modeling of Mine Road way based on Visual C#[J].Co mputer Society,2008,18(5):271-275.