• 
    

    
    

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

      紋理映射在飛行仿真系統(tǒng)中的應(yīng)用

      2018-02-25 14:27:38李靜
      電子技術(shù)與軟件工程 2018年12期

      李靜

      摘要 本文結(jié)合飛行仿真系統(tǒng)的開(kāi)發(fā)應(yīng)用,系統(tǒng)地介紹了紋理映射技術(shù)的基本概念,深入剖析了紋理映射的應(yīng)用方法和技術(shù)特點(diǎn)。紋理映射技術(shù)在虛擬現(xiàn)實(shí)( VR)場(chǎng)景模擬中有著非常重要的作用,采用OpenGL編程接口,能夠增強(qiáng)三維場(chǎng)景繪制的真實(shí)性,提高了仿真圖形的逼真度。

      【關(guān)鍵詞】飛行仿真 紋理映射 OpenGL

      飛行仿真系統(tǒng)的開(kāi)發(fā)應(yīng)用非常廣泛,其中主要用到虛擬現(xiàn)實(shí)技術(shù),它是計(jì)算機(jī)圖形學(xué)研究中最重要的內(nèi)容之,計(jì)算機(jī)圖形學(xué)一個(gè)主要目的就是利用計(jì)算機(jī)產(chǎn)生真實(shí)感圖形。在飛行仿真系統(tǒng)的開(kāi)發(fā)中,三維飛行場(chǎng)景的建立是非常重要的。紋理映射技術(shù)是OpenGL中廣泛應(yīng)用的一項(xiàng)重要技術(shù),能夠極大地提高虛擬場(chǎng)景的真實(shí)感,在三維及虛擬空間中是一項(xiàng)基本技術(shù)。它利用紋理圖像可以模擬幾何物體表面的紋理細(xì)節(jié),描述三維場(chǎng)景表面的屬性特征。為此,我們需要建立虛擬場(chǎng)景中的三維物體模型,如天空環(huán)境、地形、飛機(jī)跑道、光照環(huán)境和霧環(huán)境等場(chǎng)景。

      1 紋理映射技術(shù)

      1.1 紋理的基本概念

      OpenGL的紋理映射技術(shù)指的是把紋理圖像映射到物體表面,即在一個(gè)平面區(qū)域(紋理空間)上預(yù)定義出紋理圖案,然后建立物體表面空間和紋理圖案坐標(biāo)之間的映射關(guān)系,當(dāng)物體表面的可見(jiàn)點(diǎn)確定后,就可以根據(jù)紋理空間對(duì)應(yīng)點(diǎn)的值將紋理圖案附到物體的表面上。

      紋理映射的過(guò)程:把T中的紋素映射到幾何對(duì)象的每個(gè)點(diǎn)上,幾何對(duì)象上的每個(gè)點(diǎn)又映射到屏幕坐標(biāo)進(jìn)行顯示。

      OpenGL的基本工作流程,如圖1所示。

      1.2 紋理的映射方式

      二維紋理映射的基本方法:

      (1)線性紋理映射;

      (2)使用兩步映射:首先把紋理映射到一個(gè)簡(jiǎn)單的三維中間表面(球面、圓柱面或立方體)上,然后把帶有映射紋理的中間表面映射到需要繪制的對(duì)象表面。

      1.2.1 線性紋理映射

      大部分曲面都是用參數(shù)表示的,曲面上任一點(diǎn)P是參數(shù)u和v的函數(shù)。

      如果已知參數(shù)曲面,線性映射關(guān)系如圖2所示。

      物空間向像空間的映射由觀察和投影變換來(lái)完成,然而,從紋理空間向像素空間的映射有一個(gè)不利因素,即選中的紋理面片常常與像素邊界不匹配,通常需要計(jì)算像素的覆蓋率。因此,我們最常用的紋理映射方法是由像素空間向紋理空間映射,它避免了像素分割計(jì)算,并能簡(jiǎn)化反走樣操作。

      1.2.2 兩步紋理映射

      首先,把紋理映射到簡(jiǎn)單的中介曲面,稱為s-映射;再將它從中介曲面映射到最終幾何物體表面,稱為o-映射。其中,中介表面通常可以為任意方向的平面,圓柱面、立方體表面和球面(當(dāng)中介表面越能接近景物表面時(shí),紋理圖案的變形就越?。?。

      1.3 紋理映射的基本步驟

      1.3.1 紋理的定義

      紋理通??梢允且痪S、二維,在一些應(yīng)用上也可使用三維紋理進(jìn)行圖形繪制,但程序中常見(jiàn)的是二維紋理。OpenGL中紋理定義可用函數(shù)glTexImage2D()指定目標(biāo)紋理、紋理尺寸、邊界寬度等。

      1.3.2 紋理的濾波控制

      控制濾波可用函數(shù)glTexParameterf()來(lái)實(shí)現(xiàn)??刂茷V波是因?yàn)楫?dāng)紋理圖像是方形,而被映射物體是異型時(shí),圖像上的像素不能與屏幕上的像素一一對(duì)應(yīng),因此局部放大或縮小時(shí),就要定義合適的濾波方式,來(lái)適當(dāng)?shù)目刂茍D形。

      (1)縮小或放大濾波。通常紋理圖形為正方形或矩形,但當(dāng)映射到曲面上或變換為屏幕坐標(biāo)后,紋理的單個(gè)像素可能很難與屏幕上像素對(duì)應(yīng),這樣屏幕上的單個(gè)像素可能對(duì)應(yīng)于紋理中單個(gè)元素的一部分(放大濾波)或?qū)?yīng)于紋理中多個(gè)元素(縮小濾波)。

      (2)紋理的重復(fù)和縮限。紋理坐標(biāo)一般定義在[O,11范圍內(nèi),如果超出這個(gè)范圍,紋理映射可以在坐標(biāo)s,t方向上進(jìn)行重復(fù)(GLREPEAT)和縮限(GL_CLAMP )。

      1.3.3 紋理的映射方式

      指定紋理映射方式可用函數(shù)gITexEnv*()來(lái)實(shí)現(xiàn),紋理在像素上的應(yīng)用方式主要包括貼花方式(GL DECAL):在物體上覆蓋紋理圖像,不讓其下任何物體顏色透過(guò);調(diào)制方式(GL__ MODULATE):圖像以透明方式貼在物體表面;顏色混合模式(GL BLEND):使用一個(gè)RGBA常量來(lái)融合物體原色和紋理圖像的顏色。但是在光照下紋理處理效果必須采用調(diào)制方式。

      1.3.4 繪制場(chǎng)景,指定紋理坐標(biāo)

      確定物體和紋理坐標(biāo)以及建立兩者的對(duì)應(yīng)關(guān)系是紋理映射的關(guān)鍵,紋理坐標(biāo)(s,t)可以利用函數(shù)glTexCoord()來(lái)定義,也可以利用計(jì)算機(jī)自動(dòng)形成。對(duì)于二維紋理圖像來(lái)說(shuō),其紋理坐標(biāo)沿兩個(gè)方向的變化范圍均為0.0至1.0,物體坐標(biāo)則可以取任意值,當(dāng)紋理坐標(biāo)對(duì)應(yīng)于物體四角的幾何坐標(biāo)時(shí),紋理圖像恰好覆蓋整個(gè)物體表面。但當(dāng)物體太大時(shí),一般來(lái)說(shuō),需要在物體表面進(jìn)行紋理纏繞以覆蓋整個(gè)表面。此時(shí),需要注意的是物體紋理圖像的左右邊緣和上下邊緣應(yīng)能夠自然相接,這樣才能使物體表面的紋理表現(xiàn)比較自然。

      紋理映射的基本步驟如圖3所示。

      2 不同紋理圖片格式的加載

      2.1 加載TGA格式的紋理圖片

      TGA格式圖像一般有壓縮和非壓縮兩種格式,分別介紹:

      (1)非壓縮格式前面標(biāo)記的綠色部分(共12個(gè)字節(jié))表示對(duì)于所有的非壓縮TGA格式圖像值都是相同的,通常用于在讀取數(shù)據(jù)時(shí)鑒別是否為TGA圖像。

      例如:繪制一個(gè)立方體,并進(jìn)行紋理貼圖。

      需要注意的是:TGA圖像中數(shù)據(jù)存放的順序是BGR(A),而在OPENGL中順序是RGB(A),所以在進(jìn)行紋理生成時(shí)必須先進(jìn)行格式轉(zhuǎn)換。在OpenGL中只能加載24位或32位的TGA圖像生成紋理。

      (2)壓縮紋理。TGA的壓縮算法采用了RLE算法,RLE算法的基本思想是將數(shù)據(jù)分為兩大類:

      A:連續(xù)的不重復(fù)字節(jié)

      B:連續(xù)的重復(fù)字節(jié)

      RLE算法應(yīng)用于RGB格式的圖片壓縮中,則把數(shù)據(jù)分為:

      A:連續(xù)的不重復(fù)像素顏色值

      B:連續(xù)的重復(fù)像素顏色值

      然后將數(shù)據(jù)按這兩類數(shù)據(jù)分成若干長(zhǎng)度不相等的數(shù)據(jù)塊,每個(gè)數(shù)據(jù)塊的開(kāi)始都是一個(gè)1字節(jié)長(zhǎng)度的header(RLE在純數(shù)據(jù)壓縮中header是2個(gè)字節(jié)16位),后面緊跟著data數(shù)據(jù)塊,如下:

      Header(l個(gè)字節(jié))

      Data(變長(zhǎng))

      讀取其像素?cái)?shù)據(jù)部分需要注意一下,需要分情況討論看是A類數(shù)據(jù)還是B類數(shù)據(jù)。2.2加載BMP格式的紋理圖片

      BMP位圖文件由四部分組成:位圖文件頭結(jié)構(gòu)、位圖信息頭結(jié)構(gòu)、調(diào)色板和位圖像素?cái)?shù)據(jù),如表l所示。

      表1:BMP位圖文件結(jié)構(gòu)

      位圖文件頭信息結(jié)構(gòu)BITMAPFILEHEADER

      位圖信息頭結(jié)構(gòu)BITMAPINFOHEADER

      調(diào)色板Palette

      位圖像素?cái)?shù)據(jù)DIB Pixel

      一個(gè)完整的BMP位圖文件,可以分為文件信息頭,位圖信息頭和RGB顏色陣列三個(gè)部分。

      (1)文件信息頭主要包含“是否是BMP文件”,文件的大小等信息。

      (2)位圖信息頭則主要包括BMP文件的位圖寬度、高度、位平面、通道數(shù)等信息。

      (3) RGB顏色陣列,里面包含我們所需的BMP位圖的像素?cái)?shù)據(jù),BMP位圖的顏色陣列部分,像素?cái)?shù)據(jù)的存儲(chǔ)是以左下角為原點(diǎn)。

      3 三維視景仿真環(huán)境的紋理映射

      3.1 自然環(huán)境的建模

      方法:

      (1)盒子法:利用六個(gè)多邊形彼此相鄰構(gòu)成封閉的六面體。分別表示天空的前面、后面、左面、右面、上面、下面,然后對(duì)六邊形分別進(jìn)行貼圖,最后形成天空。通過(guò)構(gòu)建六邊形貼圖的天空盒,可看出多邊形與多邊形交界處有黑線(可以通過(guò)改變紋理環(huán)繞模式),使用OpenGL函數(shù)glTexParameteri設(shè)置,參數(shù)包括:GL_REPEAT,GL_CLAMP,GLCLAMP TO EDGE。通過(guò)比較,可知使用GL CLAMP_ TO EDGE模式可以很好解決紋理交界處的縫隙痕跡,測(cè)試可知,三種模式下情景的渲染速度沒(méi)有明顯不同。

      (2)平面天空:繪制一個(gè)足夠大的矩形,使之充滿整個(gè)屏幕,將包含天空紋理的位圖映射到該矩形,使矩形隨視點(diǎn)變化,并確保繪制的天空總是位于視點(diǎn)的前方,以保證天空始終可見(jiàn)。當(dāng)使用這種方法建立天空模型如果出現(xiàn)紋理失真現(xiàn)象時(shí),我們可利用繪制多個(gè)多邊形而不是單個(gè)多邊形來(lái)形成天空模型(使用多幅紋理圖形來(lái)完成整個(gè)天空建模,避免了紋理的拉伸變形)。

      (3)球形法:創(chuàng)建一個(gè)巨大的圓頂形半球面,將整個(gè)場(chǎng)景框進(jìn)去,然后將天空的紋理圖片映射到半球面上。這樣,我們可以看到一整片浩瀚無(wú)邊的天空,如圖4所示,天空效果圖如圖5所示。

      設(shè)球的中心在原點(diǎn),半徑為R球面方程:X2+Y2+22=R2;

      f(p)= X2+Y2+22-R2;其中,p為球面一點(diǎn)。

      F(p)=(px,py,pz)=f(R,)

      球面可通過(guò)一系列三角形來(lái)形成一個(gè)球面,當(dāng)三角形足夠多的時(shí)候,就可以得到一個(gè)理想球面。優(yōu)點(diǎn):天空模型逼真,符合人們對(duì)天空的直觀認(rèn)識(shí),并且對(duì)紋理沒(méi)有過(guò)高的要求。缺點(diǎn):建模過(guò)程較復(fù)雜,編程量大,渲染速度慢,并且隨天空?qǐng)鼍霸酱?,系統(tǒng)消耗越大,不適用于大型的天空?qǐng)鼍敖!?/p>

      3.2 地形環(huán)境的建模

      隨著計(jì)算機(jī)圖形硬件和計(jì)算機(jī)圖形學(xué)的發(fā)展,地形的顯示從二維地形圖發(fā)展到三維真實(shí)感地形環(huán)境的階段。地形的建模目前主要有兩種方法:真實(shí)地形和模擬地形。真實(shí)地形現(xiàn)實(shí)世界中地形的真實(shí)再現(xiàn),通過(guò)獲取實(shí)際數(shù)據(jù)來(lái)構(gòu)造,這種方式真實(shí)感強(qiáng),但數(shù)據(jù)結(jié)構(gòu)復(fù)雜且生成圖形速度慢。模擬地形通??梢圆捎秒S機(jī)生成地形算法和分形算法,本文中著重介紹模擬地形方法,由于飛行場(chǎng)景中地形的建模對(duì)真實(shí)感要求不高,但對(duì)實(shí)時(shí)性要求較高,此方法生成地形速度較快,在視覺(jué)上滿足真實(shí)地形的再現(xiàn)。

      本文中,地形建模的方法是通過(guò)讀取RAW文件中的地形數(shù)據(jù),然后進(jìn)行地形渲染的同時(shí)進(jìn)行紋理映射。地形數(shù)據(jù)的獲得與地形的渲染方法:首先讀出RAW文件中的數(shù)據(jù),然后根據(jù)一定的映射關(guān)系將數(shù)據(jù)映射到地形的高程上。高度圖的格式:高度圖的文件格式是RAW,這個(gè)格式不包含諸如圖像類型和大小信息的文件頭,所以易于被讀取。RAW文件只是簡(jiǎn)單的二進(jìn)制文件,只包含地形的高度數(shù)據(jù)。由于高度圖通常是一張8位灰度圖。它的高度值變化范圍是在0-255之間,其中O(黑色)表示最低高度而255(白色)表示最大高度。可以使用一個(gè)縮放值增加這個(gè)間隔,用這個(gè)縮放值乘以默認(rèn)高度值,增加其范圍,這樣可以增加高度范圍,但會(huì)使兩個(gè)高度之間的誤差變大。

      具體實(shí)現(xiàn)步驟:

      (1)首先通過(guò)函數(shù)LoadRawFile()讀出RAW文件中的數(shù)據(jù)。先將其保存到一個(gè)數(shù)組中,然后將其映射為高程數(shù)據(jù)。

      (2)根據(jù)地形的X和Y坐標(biāo),從RAW文件中讀出的數(shù)據(jù)映射到地形的高程值。

      (3)根據(jù)從RAW獲得的三維地形的每個(gè)頂點(diǎn)數(shù)據(jù),以三角形面片的形式渲染地形。

      同樣,我們也可以采取隨機(jī)生成地形算法來(lái)進(jìn)行地形場(chǎng)景建模。飛行場(chǎng)景對(duì)真實(shí)感要求不高,而對(duì)于地形實(shí)時(shí)性要求很高。所以,采用基于數(shù)據(jù)模擬方法來(lái)模擬地形,通過(guò)隨機(jī)生成地形算法來(lái)獲取的地形高程數(shù)據(jù),再采用線性差值算法對(duì)其生成的地形網(wǎng)格進(jìn)行平滑處理,并將其映射到地形高程值。

      生成的地形網(wǎng)格如圖6所示,地形紋理效果如圖7所示。

      4 結(jié)束語(yǔ)

      紋理映射技術(shù)是OpenGL中廣泛應(yīng)用的一項(xiàng)重要技術(shù),能夠極大地提高虛擬場(chǎng)景的真實(shí)感,在三維及虛擬空間中是一項(xiàng)基本技術(shù)。在虛擬仿真研究中應(yīng)用很廣泛,是計(jì)算機(jī)圖形學(xué)研究中最重要的內(nèi)容之一,主要目的就是利用計(jì)算機(jī)產(chǎn)生真實(shí)感圖形。在三維飛行仿真場(chǎng)景的開(kāi)發(fā)中,紋理技術(shù)應(yīng)用是很常見(jiàn)的,我們需要建立虛擬場(chǎng)景中的三維物體模型,如天空環(huán)境、地形、飛機(jī)跑道、光照環(huán)境和霧環(huán)境等場(chǎng)景,并使用紋理技術(shù)為三維場(chǎng)景進(jìn)行紋理貼圖,增強(qiáng)三維效果,使人身臨其境。

      參考文獻(xiàn)

      [1]郝燕玲,路輝,基于OpenGL實(shí)現(xiàn)海底地形顯示的研究[J].計(jì)算機(jī)仿真,2003 (10).

      [2]尚游,陳巖濤.OpellGL圖形程序設(shè)計(jì)指南[M].北京:中國(guó)水利水電出版社,2001.

      [3]潘李亮,基于OLD的大規(guī)模真實(shí)感場(chǎng)景室外場(chǎng)景實(shí)時(shí)渲染技術(shù)的初步研究[D].西安電子科技大學(xué)學(xué)士學(xué)位論文,2003.

      [4]游雄,基于虛擬現(xiàn)實(shí)技術(shù)的戰(zhàn)場(chǎng)環(huán)境仿真[J].測(cè)繪學(xué)報(bào),2002.

      [5]郭艷萍,婁國(guó)勝.等高線三維顯示技術(shù)的探討[J].三晉測(cè)繪,加04 (01):19-21.

      [3]姚建新,馮秀蘭,等高線的三維地形建模與實(shí)現(xiàn)[J].林業(yè)資源管理,2002 (04): 65- 69.

      [6]詹榮開(kāi)等,虛擬現(xiàn)實(shí)技術(shù)在武器對(duì)抗仿真中的應(yīng)用研究[J].計(jì)算機(jī)仿真,2001(03).

      东丰县| 安西县| 瑞昌市| 鞍山市| 兴安县| 昌宁县| 白城市| 集安市| 定南县| 克什克腾旗| 寿光市| 芒康县| 尼木县| 玉环县| 伊川县| 潍坊市| 滕州市| 大关县| 洪湖市| 沂南县| 临武县| 安福县| 崇义县| 甘德县| 天镇县| 岢岚县| 平舆县| 固安县| 云林县| 白玉县| 海口市| 依安县| 泰州市| 广安市| 福安市| 凤山市| 东光县| 荥阳市| 安吉县| 东山县| 出国|