• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于C#和Direct X的三維虛擬校園構(gòu)建探討

      2015-03-28 06:10:54張繼超馬洋洋董塞漠
      測繪工程 2015年1期
      關(guān)鍵詞:樓體窗體攝像機(jī)

      張繼超,馬洋洋,董塞漠

      (1.遼寧工程技術(shù)大學(xué) 測繪與地理科學(xué)學(xué)院,遼寧 阜新123000;2.中國伊斯蘭教協(xié)會,北京100053)

      隨著虛擬現(xiàn)實技術(shù)的發(fā)展和“數(shù)字地球”概念的提出與廣泛實踐,對三維虛擬校園的構(gòu)建研究也越來越多。三維虛擬校園可提供校園的虛擬環(huán)境,讓人足不出戶就能實現(xiàn)對該場景的漫游與交互,從而達(dá)到身臨其境的主觀感受。

      Direct X自從1995年出現(xiàn)以來,己成為目前計算機(jī)領(lǐng)域中最廣泛的3D標(biāo)準(zhǔn)規(guī)范,在眾多3D開發(fā)領(lǐng)域得以應(yīng)用。而C#開發(fā)語言,不僅能夠?qū)崿F(xiàn)對Direct X自身強(qiáng)大的渲染功能的調(diào)用,而且能將操作者的意圖運用圖像界面流暢地表現(xiàn)出來[1]。3DSMax是由Autodesk旗下的公司開發(fā)的三維建模和動畫制作軟件,具有強(qiáng)大、完美的三維建模功能,是當(dāng)今世界上最流行的三維建模、動畫制作及渲染軟件。本文利用 C#調(diào)用 Direct X[2-3],結(jié)合3DSMax建模工具,對三維虛擬校園的構(gòu)建方法進(jìn)行探討,并以遼寧工程技術(shù)大學(xué)(中華路校區(qū))為例,實現(xiàn)了三維虛擬校園的初步構(gòu)建。

      1 三維建模背景及相關(guān)理論

      1.1 三維建模理論

      三維模型是物體的三維多邊形表示,通常用計算機(jī)或者其它視頻設(shè)備進(jìn)行顯示。顯示的物體可以是現(xiàn)實世界的實體,也可以是虛構(gòu)的東西,既可以小到原子,也可以大到很大的尺寸。任何自然界存在的物體都可以用三維模型表示[4]。

      三維模型廣泛用于任何使用三維圖形的地方。實際上,它們的應(yīng)用早于個人電腦上三維圖形的流行。許多計算機(jī)游戲使用預(yù)先渲染的三維模型圖像作為sprite用于實時計算機(jī)渲染

      近年來,隨著數(shù)字城市的發(fā)展,三維模型也在地球科學(xué)領(lǐng)域得到廣泛應(yīng)用,如建立數(shù)字高程模型、三維地質(zhì)模型、數(shù)字小區(qū)、數(shù)字校園[6]等。

      三維模型本身是不可見的,為增加模型的真實效果,常采用紋理映射或其他方法(如調(diào)整曲面法線、立體渲染等)來增強(qiáng)模型。

      1.2 攝像機(jī)視圖矩陣

      為了將真實世界的對象以三維模型的形式表達(dá)出來,需要將世界空間的對象先轉(zhuǎn)換為模型自身的空間坐標(biāo)系,然后利用攝像機(jī)空間展示顯示區(qū)域,其轉(zhuǎn)換過程如圖1所示。

      圖1 三維坐標(biāo)轉(zhuǎn)換過程

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

      圖2 視圖矩陣

      2 C#調(diào)用Direct X構(gòu)建虛擬場景

      利用C#調(diào)用Direct X接口,完成場景的搭建、材質(zhì)燈光的導(dǎo)入、場景整體渲染、攝像機(jī)導(dǎo)入等功能。

      2.1 項目初步配置

      1)新建項目并添加新建項。新建一個Visual C#空項目,設(shè)置其項目名稱,在解決方案資源管理器中選擇項目名稱并添加新建項。

      2)添加窗體及引用。在 “添加新項”窗體上選擇“Windows窗體”模板,完成窗體添加,并在主菜單上選擇“項目—添加引用”,在.NET中添加Direct X和 Direct X.Direct3D(X)等組件,完成 Direct X的調(diào)用。

      2.2 3D場景底圖構(gòu)建

      在全局中定義頂點變量,設(shè)置貼圖圖片上的水平和垂直位置的坐標(biāo)分別為Tu和Tv,其中貼圖坐標(biāo)(0,0)表示圖片左上角,貼圖坐標(biāo)(1,1)表示右下角。在全局中定義貼圖變量texture及材質(zhì)變量material,分別用于保存貼圖圖片對象和材質(zhì)對象,通過指定材質(zhì)類型可以設(shè)置三角形表面的反射等方式。將場景圖片文件復(fù)制到項目目錄下作為場景的底圖,并修改渲染函數(shù),導(dǎo)入貼圖和材質(zhì)函數(shù)的相關(guān)代碼,進(jìn)行渲染,然后以上述類似的方式繪制三角形,將兩三角形拼接到一起,構(gòu)建整個場景底圖。

      2.3 攝像機(jī)導(dǎo)入及設(shè)置

      調(diào)整三角形頂點坐標(biāo)及攝像機(jī)位置,然后修改攝像機(jī)函數(shù)Set Up Ca mera()中視圖矩陣的代碼,對攝像機(jī)進(jìn)行旋轉(zhuǎn)[8]。以圍繞Y軸選擇為例,首先在全局中定義旋轉(zhuǎn)角度及攝像機(jī)位置等變量,然后修改攝像機(jī)函數(shù),設(shè)置鍵盤輸入的Left和Right鍵來控制攝像機(jī)的左右旋轉(zhuǎn),并通過直接添加窗體的On Key Down()重載函數(shù)來實現(xiàn)。

      值得注意的是,上述過程實現(xiàn)了攝像機(jī)左右旋轉(zhuǎn)的功能,但是這個旋轉(zhuǎn)是相對于世界坐標(biāo)系的Y軸,如果攝像機(jī)空間坐標(biāo)系的Y軸和世界坐標(biāo)系的Y軸不為同一個方向,這將導(dǎo)致旋轉(zhuǎn)功能無法完全實現(xiàn)。因此在定義旋轉(zhuǎn)軸時,應(yīng)以攝像機(jī)空間坐標(biāo)系的Y軸方向為旋轉(zhuǎn)軸。除了左右旋轉(zhuǎn)外,攝像機(jī)還應(yīng)具有上下旋轉(zhuǎn)來調(diào)整視角的功能,此時,其旋轉(zhuǎn)軸為攝像機(jī)空間坐標(biāo)系的X軸。

      攝像機(jī)縮放的控制,可以通過設(shè)置攝像機(jī)位置的比例函數(shù)Scale()來實現(xiàn)。在窗體的 On-Key Down()重載函數(shù)中添加縮放攝像機(jī)代碼,并可設(shè)置鍵盤快捷鍵(如鍵盤加號(+ 表示放大、減號(-)表示縮?。┛刂茢z像機(jī)的放大和縮小操作。

      2.4 繪制基本幾何體

      通過Direct3D繪制的每個對象都是由三角形組成的,一個三角形由3個點組成,而每個點都定義成一個向量來指定點的X,Y,Z坐標(biāo)。所有基本體,主要是由長方體和球體組成[9]。對于任意一個六面體,其各頂點坐標(biāo)編號如圖3所示。

      圖3 六面體頂點坐標(biāo)編號

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

      圖4 立方體繪制結(jié)果

      2.5 幾何體的復(fù)制、貼圖及場景搭建

      在Direct X中,幾何模型對象基本上都是通過Mesh來表示,它也是組成三維場景的基本元素之一。Mesh類具有一個Clone()方法用于復(fù)制網(wǎng)格對象至另外一個網(wǎng)格對象中,修改全局變量、初始化函數(shù)及渲染函數(shù)的相關(guān)代碼,復(fù)制長方體,將之前建立的場景與幾何體結(jié)合到一起,合并相關(guān)代碼,進(jìn)行整體三維場景的搭建[9]。將相關(guān)幾何體進(jìn)行材質(zhì)貼圖,使其變成完整樓體。

      3 3DSMax模型構(gòu)建

      Direct X雖然可實現(xiàn)用戶交互功能,運用鼠標(biāo)與鍵盤的輸入,多角度觀測整體場景,但該軟件的精度不高,對三維模型細(xì)節(jié)的渲染不夠完善。因此,本文應(yīng)用3DSMax軟件對部分三維模型進(jìn)行制作及渲染。

      建模過程包括:三角網(wǎng)搭建、元素的對齊、線條的擠出、布爾運算、圖形的縮放、空間坐標(biāo)的選定、材質(zhì)編輯以及渲染參數(shù)的設(shè)定等。

      下面以致遠(yuǎn)樓為例,闡述3DSMax模型的構(gòu)建過程。

      1)繪制長方體,并設(shè)置其長、寬、高及材質(zhì),作為部分樓體輪廓,如圖5所示。

      圖5 樓體輪廓

      2)建立指定長方體,與樓體輪廓相交,運用布爾運算、復(fù)制陣列等,對樓體輪廓進(jìn)行摳圖,作為門窗的位置。

      3)制作門窗,運用多個尺寸不同的長方體,按固定位置進(jìn)行擺放,作為窗框、門框和玻璃,然后找到相關(guān)元素的材質(zhì)參數(shù),編輯材質(zhì),如圖6所示。

      圖6 窗戶制作

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

      圖7 鏡像后模型

      5)將所有制作完成的模型進(jìn)行拼接,增加天光,設(shè)置高級照明參數(shù)并進(jìn)行映射紋理,對模型進(jìn)行渲染,如圖8所示。

      圖8 渲染后“致遠(yuǎn)樓”模型

      4 三維虛擬校園的構(gòu)建

      本文以遼寧工程技術(shù)大學(xué)(中華路校區(qū))為例,結(jié)合校園遙感影像圖和建筑物側(cè)面照片紋理數(shù)據(jù),進(jìn)行了三維虛擬校園的構(gòu)建。

      4.1 3D場景互動平臺構(gòu)建

      將校園遙感影像文件復(fù)制到項目目錄下作為場景底圖,修改渲染函數(shù),導(dǎo)入貼圖和材質(zhì)函數(shù)的相關(guān)代碼,進(jìn)行渲染。然后,修改鼠標(biāo)控制相關(guān)代碼,得到校園3 D場景互動平臺,如圖9所示。

      圖9 校園3D場景互動平臺

      4.2 校園三維模型導(dǎo)入

      在3DSMax下,選擇具有普遍性、代表性以及真實場景的特殊性地物,完成典型地物要素的三維精確建模。主要包括:編輯地形、水泥地面及主要建筑物的導(dǎo)入、花壇的設(shè)計、草坪的渲染,并增加樹木、垃圾箱、路燈等地物,提高虛擬校園的視覺效果。部分效果如圖10所示。

      5 結(jié)束語

      本文基于C#調(diào)用Direct X,輔以3DSMax實現(xiàn)了三維虛擬校園的構(gòu)建,包括三維場景的搭建;樓體元素的構(gòu)建及導(dǎo)入;樓體貼圖函數(shù)的運用及場景圖的渲染;其他實體模型構(gòu)建與導(dǎo)入;燈光及材質(zhì)代碼的編寫;攝像機(jī)位置設(shè)置等。用戶能夠通過鼠標(biāo)鍵盤等設(shè)備輸入相關(guān)消息,并可以對三維場景進(jìn)行多角度操作,真正實現(xiàn)了系統(tǒng)的用戶交互功能。此外,通過3DMAX軟件制作的模型場景,補(bǔ)償了Direct X的表現(xiàn)效果,完善了三維虛擬校園的元素細(xì)節(jié),增加了真實感。

      [1] 肖澤云.基于Visual C#的Direct X開發(fā)實例[M].宜昌:三峽大學(xué)出版社,2010.

      [2] 吳昊.關(guān)于C++BUILDER語言的Direct X開發(fā)問題的研究[J].軟件導(dǎo)刊,2006,5(6):67-69.

      [3] 李震宇.游戲開發(fā)之路——在C++Builder中進(jìn)行Direct X編程[J].電腦編程技巧與維護(hù),2000,6(3):72-86.

      [4] 馬萍.三維虛擬校園立體場景的設(shè)計與實現(xiàn)[D].濟(jì)南:山東師范大學(xué),2013.

      [5] 孫明杰,韓超.用C++6.0和Direct X實現(xiàn)太空射擊游戲引擎[J].科技廣場,2006,18(5):77-79.

      [6] 王建敏,王凱,孟凡帥.校園三維景觀設(shè)計與實現(xiàn)[J],測繪工程,2011,20(3):62-64.

      [7] 徐黎明.Visual C++下Direct3D坐標(biāo)變換的實現(xiàn) [J].軟件導(dǎo)刊,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.

      猜你喜歡
      樓體窗體攝像機(jī)
      搭建我們的“幼兒園”
      紅磚厝裝飾元素在近現(xiàn)代建筑中的運用——以廈門高崎國際機(jī)場樓體及嘉庚建筑為例
      河北畫報(2020年8期)2020-10-27 02:54:40
      試談Access 2007數(shù)據(jù)庫在林業(yè)檔案管理中的應(yīng)用
      檔案天地(2019年5期)2019-06-12 05:12:02
      看監(jiān)控攝像機(jī)的4K之道
      攝像機(jī)低照成像的前世今生
      新安訊士Q6155-E PTZ攝像機(jī)
      山上一群猴
      框架結(jié)構(gòu)樓梯的震害分析與設(shè)計對策
      如何消除和緩解“攝像機(jī)恐懼癥”
      新聞前哨(2015年2期)2015-03-11 19:29:25
      基于LayeredWindow的異形窗體局部刷新
      中文信息(2014年2期)2014-03-06 23:49:14
      黑龙江省| 孟津县| 思南县| 台前县| 广丰县| 龙里县| 泸定县| 赣州市| 德保县| 崇信县| 邵东县| 门头沟区| 汝南县| 钦州市| 诸城市| 分宜县| 桐庐县| 柳林县| 合山市| 麻栗坡县| 察哈| 屏边| 资源县| 钟祥市| 瓦房店市| 武陟县| 宣城市| 洛宁县| 阜阳市| 邓州市| 千阳县| 庆云县| 乐平市| 庆安县| 肃宁县| 乐山市| 华坪县| 莱西市| 铁岭县| 盈江县| 丰台区|