国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

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

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

李靜

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

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

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

1 紋理映射技術(shù)

1.1 紋理的基本概念

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

紋理映射的過程:把T中的紋素映射到幾何對象的每個點上,幾何對象上的每個點又映射到屏幕坐標進行顯示。

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

1.2 紋理的映射方式

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

(1)線性紋理映射;

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

1.2.1 線性紋理映射

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

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

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

1.2.2 兩步紋理映射

首先,把紋理映射到簡單的中介曲面,稱為s-映射;再將它從中介曲面映射到最終幾何物體表面,稱為o-映射。其中,中介表面通??梢詾槿我夥较虻钠矫?,圓柱面、立方體表面和球面(當中介表面越能接近景物表面時,紋理圖案的變形就越小)。

1.3 紋理映射的基本步驟

1.3.1 紋理的定義

紋理通常可以是一維、二維,在一些應用上也可使用三維紋理進行圖形繪制,但程序中常見的是二維紋理。OpenGL中紋理定義可用函數(shù)glTexImage2D()指定目標紋理、紋理尺寸、邊界寬度等。

1.3.2 紋理的濾波控制

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

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

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

1.3.3 紋理的映射方式

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

1.3.4 繪制場景,指定紋理坐標

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

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

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

2.1 加載TGA格式的紋理圖片

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

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

例如:繪制一個立方體,并進行紋理貼圖。

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

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

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

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

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

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

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

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

Header(l個字節(jié))

Data(變長)

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

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

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

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

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

調(diào)色板Palette

位圖像素數(shù)據(jù)DIB Pixel

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

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

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

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

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

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

方法:

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

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

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

設球的中心在原點,半徑為R球面方程:X2+Y2+22=R2;

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

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

球面可通過一系列三角形來形成一個球面,當三角形足夠多的時候,就可以得到一個理想球面。優(yōu)點:天空模型逼真,符合人們對天空的直觀認識,并且對紋理沒有過高的要求。缺點:建模過程較復雜,編程量大,渲染速度慢,并且隨天空場景越大,系統(tǒng)消耗越大,不適用于大型的天空場景建模。

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

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

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

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

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

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

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

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

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

4 結(jié)束語

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

參考文獻

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

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

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

[4]游雄,基于虛擬現(xiàn)實技術(shù)的戰(zhàn)場環(huán)境仿真[J].測繪學報,2002.

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

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

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