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

?

基于OPENGL的三維地形的生成實(shí)現(xiàn)

2014-11-07 23:38:52馬蕾龔戈淬
科技資訊 2014年11期
關(guān)鍵詞:計(jì)算機(jī)圖形學(xué)

馬蕾 龔戈淬

摘 要:隨著計(jì)算機(jī)圖形學(xué)的發(fā)展,其在科學(xué)、工程、醫(yī)學(xué)、娛樂、廣告、圖形藝術(shù)等眾多領(lǐng)域得到了普遍應(yīng)用。我們可以通過圖形應(yīng)用程序來虛擬現(xiàn)實(shí),以及GIS領(lǐng)域方面的遙感圖像信息系統(tǒng)的應(yīng)用。為了逐步實(shí)現(xiàn)以上目標(biāo)的應(yīng)用,本文將以一個(gè)基于OPENGL的,使用高度圖(Heightmap)進(jìn)行地形(Terraain)生成及在此基礎(chǔ)上的應(yīng)用為實(shí)例,對系統(tǒng)的需求、算法、優(yōu)化進(jìn)行了詳細(xì)的介紹,并給出了可行的解決方法。

關(guān)鍵詞:計(jì)算機(jī)圖形學(xué) HeightMap OPENGL Terrain

中圖分類號:G64 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2014)04(b)-0005-02

Abstract:With Computer Graphics is that figures study developments, its at science, numerous fieldses last general application at art, etc.s figures advertisements amusements medical sciences projects. We come virtual reality, and GIS the remote sensing picture the applications of information systems of field through figure application program. At application that realize the goal of the above progressively, this text at one a piece of one that is because of OPENGLs, The topography( Terraain) is produced and the application on the basis of this is the instance to use and highly pursue( Heightmap) to carry on , Demand, algorithm, optimize and introduce detailed one in system, besides, Have carried on brief analysis to some technological questions that are met in the course of developping, Give and publish feasible solution is from realizing angle explain figure the development and use the prospects of application program.

Key Words:Computer Graphics;HeightMap;OPENGL;Terrain

今天,對許多人而言,計(jì)算機(jī)和計(jì)算機(jī)圖形學(xué)已經(jīng)成為日常生活不可分割的一部分。計(jì)算機(jī)圖形學(xué)在科學(xué)、工程、醫(yī)學(xué)、娛樂、廣告、圖形藝術(shù)、商業(yè)、教育和培訓(xùn)等眾多領(lǐng)域得到了普遍的應(yīng)用。開發(fā)高性能的圖形應(yīng)用程序,就不可避免的使用到計(jì)算機(jī)圖形學(xué)知識。計(jì)算機(jī)圖形學(xué)是一門復(fù)雜而又多樣化的技術(shù)。要想了解這項(xiàng)技術(shù),必須把它分成幾個(gè)易于操作的部分:如何在計(jì)算機(jī)中表示圖形、如何準(zhǔn)備圖形的數(shù)據(jù)、如何顯示已準(zhǔn)備好的圖形、如何實(shí)現(xiàn)人與圖形的交互。這里,圖形是一個(gè)廣義的概念,凡是可以在圖形設(shè)備上輸出的點(diǎn)、線和文本等的集合都可以稱為圖形。

盡管許多算法以多邊形或邊作為圖形的數(shù)據(jù)輸入,但多邊形或邊最終都可以用點(diǎn)來表示。因此,點(diǎn)才是圖形的基本組成元素。而曲線通常是通過段直線逼近來實(shí)現(xiàn)。至于材料紋理的表示子相當(dāng)復(fù)雜,在許多情況下要使用曲線和點(diǎn)陣。本質(zhì)上講,材料紋理還是用算法描述下的點(diǎn)、線的集合來表示的。

OPENGL實(shí)際上是一個(gè)開放的針對圖形硬件的三維圖形軟件包,它獨(dú)立如窗口系統(tǒng)和操作系統(tǒng),以它為基礎(chǔ)開發(fā)的應(yīng)用程序可以十分方便的在各種平臺(tái)間移植;從程序員的角度來看,OpenGL實(shí)際上是一些指令和函數(shù)的集合,現(xiàn)在已經(jīng)能夠在多種平臺(tái)上使用。

OpenGL自1992年出現(xiàn)以來,逐漸成為工業(yè)上應(yīng)用最廣泛的支持2D和3D圖形的應(yīng)用程序編程接口,并且出現(xiàn)了成千上萬的基于各種計(jì)算機(jī)平臺(tái)的應(yīng)用程序。OpenGL通過集成大量的渲染、紋理映射、特殊效果和其他強(qiáng)大的可視化函數(shù),使得其應(yīng)用程序更加新穎,并大幅度加速了圖形應(yīng)用程序的開發(fā)。

1 OpenGL圖形操作步驟

在OpenGL中進(jìn)行主要的圖形操作基本步驟如下:

首先根據(jù)基本圖形單元建立景物模型,并且對所建立的模型進(jìn)行數(shù)學(xué)描述(OpenGL中把:點(diǎn)、線、多邊形、圖像和位圖都作為基本圖形單元)。然后把景物模型放在三維空間中的合適的位置,并且設(shè)置視點(diǎn)(viewpoint)以觀察所感興趣的景觀。接著,計(jì)算模型中所有物體的色彩,其中的色彩根據(jù)應(yīng)用要求來確定,同時(shí)確定光照條件、紋理粘貼方式等。最后把景物模型的數(shù)學(xué)描述及其色彩信息轉(zhuǎn)換至計(jì)算機(jī)屏幕上的象素,這個(gè)過程也就是光柵化(rasterization)。

在這些步驟的執(zhí)行過程中,OpenGL可能執(zhí)行其他的一些操作,例如自動(dòng)消隱處理等。另外,景物光柵化之后被送入幀緩沖器之前還可以根據(jù)需要對象素?cái)?shù)據(jù)進(jìn)行操作。

2 地形生成實(shí)現(xiàn)

在進(jìn)行三維圖形編程的過程中,會(huì)遇到各種各樣的圖形格式,下面以TGA格式為例進(jìn)行分析其處理過程:

首先需要處理TGA圖形文件頭信息,這其中包括從文件讀取12字節(jié)的頭、判斷該TGA文件是否是壓縮類型、最后通過fread(header, sizeof(header),1, file)函數(shù)將文件頭信息讀取header變量中。

接著通過獲取的頭文件信息來得到TGA文件的寬和高。

m_width=header[1]*256+header[0];

m_height=header[3]*256+header[2];

通過高和寬以及文件的位數(shù)(24位和32位)來判斷該TGA文件是否是正確的文件格式。

// Is the width less than or equal to zero?

// Is the height less than or equal to zero?

// Is the TGA 24 or 32 bits?

if (m_width<=0 || m_height<=0 || (header[4]!=24 && header[4]!=32))

為TGA文件分配內(nèi)存空間

// Divide by 8 to get the bytes per pixel

BytesPerPixel = m_bpp / 8;

// Calculate the memory required for the TGA data

ImageSize = m_width * m_height * BytesPerPixel;

// Allocate memory to hold the TGA data

m_data = new GLubyte [ImageSize];

最后讀取不同TGA形式的數(shù)據(jù)內(nèi)容存入到m_data變量中,關(guān)閉文件文件操作,對獲取的數(shù)據(jù)進(jìn)行紋理渲染。

3 使用高度圖進(jìn)行地形渲染

高度圖,即一個(gè)給定大小的位圖,已知點(diǎn)像素的顏色表明地形的高度。一般情況黑色可能是最低的高度,白色表明高度圖中最高的點(diǎn)。

第一步加載高度圖,將高度圖數(shù)據(jù)被存入變量heightmap,從而使用heigthmap中的數(shù)據(jù)計(jì)算高度地形。

第二步利用加載的高度圖,計(jì)算3D網(wǎng)格,即高度地形。

高度地形由一個(gè)頂點(diǎn)數(shù)組和一個(gè)索引數(shù)組組成,因此能夠用索引化的三角形渲染地形。頂點(diǎn)結(jié)構(gòu)如下:

struct Vertex

{

float x,y,z;

DWORD color;

float u, v;

};

第三步把高度圖數(shù)據(jù)傳遞給負(fù)責(zé)用來生成3D地形CalculateHeightfield變量。通過為頂點(diǎn)分配空間并清空分配的內(nèi)存。然后通過X和Z頂點(diǎn)進(jìn)行計(jì)算紋理,獲得Y坐標(biāo),通過從高度圖得到當(dāng)前像素值和比例因子的一半相乘來完成。

計(jì)算索引可以提高渲染期間性能,具體公式如圖1所示。

首先沿著X軸(列)然后沿著Z軸(行)。計(jì)算兩個(gè)連在一起生成一個(gè)方塊的三角形的索引,如圖1。第一個(gè)三角形是由cy,cv+1,cy+size構(gòu)成,從而cv,triangle的值。當(dāng)前的頂點(diǎn)(cy)是2因?yàn)閦=0和x=2,然后(0*size+2)=2。因此第一個(gè)三角形看上去就像這:(cy,cv+1,cy+size)就是(2,2+1,128+2)或者(2,3,130)。

最后利用OpenGL的頂點(diǎn)數(shù)組來渲染我們的地形,渲染的代碼和效果圖如圖2所示。

void __fastcall Terrain::Render()

{

// Enable using Vertex Arrays

glEnableClientState(GL_VERTEX_ARRAY);

glEnableClientState(GL_TEXTURE_COORD_ARRAY);

// Set the Vertex Array to the start of our vertex data

glVertexPointer(3, GL_FLOAT, sizeof(Vertex), &Vertices[0].posx);

glTexCoordPointer(2, GL_FLOAT, sizeof(Vertex), &Vertices[0].u);

// Render the Terrain

glDrawElements(GL_TRIANGLES, NumIndices, GL_UNSIGNED_SHORT, Indices);

// Disable Vertex Arrays

glDisableClientState(GL_VERTEX_ARRAY);

glDisableClientState(GL_TEXTURE_COORD_ARRAY);

}

4 結(jié)語

基于OpenGL的計(jì)算機(jī)三維圖形應(yīng)用程序的開發(fā),是一項(xiàng)細(xì)致而又復(fù)雜的技術(shù)。本文首先對圖像進(jìn)行建模,從而生成各種類型圖形文件,并以TGA格式為例進(jìn)行渲染,然后使用高度圖進(jìn)行地形渲染,生成漂亮的地形圖。

參考文獻(xiàn)

[1] 尚游,陳巖濤.OpenGL圖形程序設(shè)計(jì)指南[M].中國水利水電出版社,2001.

[2] OpenGL Architecture Review Board, 著,(美)Dave Shreiner,主編.OpenGL參考手冊[M].機(jī)械工業(yè)出版,2001.

[3] (美)David F. Rogers,著.計(jì)算機(jī)圖形學(xué)的算法基礎(chǔ)[M].石教英,彭群生,等,譯.機(jī)械工業(yè)出版,2002.

[4] (美)OpenGL體系評審委員會(huì),Masson Woo,等,著.OpenGL編程權(quán)威指南[M].吳斌,等,譯.機(jī)械工業(yè)出版,2001.

[5] Stefan R¨ottger Wolfgang Heidrich, Philipp Slusallek, Hans-Peter Seidel《Real-Time Generation of Continuous Levels of Detail for Height Fields》

[6] (美)Richard,S.著OpenGL超級寶典[M].2版.瀟湘工作室,譯.人民郵電出版社, 2001.

[7] 吳海平.OpenGL圖形程序設(shè)計(jì)與 應(yīng)用環(huán)境[M].國防科技大學(xué)出版社,1999.

[8] www.opengl.org OpenGL[EB/OL]. http://www.opengl.org/developers/about/overview.html.

[9] http://www.opengl.org/developers/documentation/glut.html SGI OpenGL Extension Registry - http://oss.sgi.com/projects/ogl-sample/registry/.

[10] www.flipCode.com,日常游戲開發(fā)信息及資源網(wǎng)站.

[11] mays.6to23.com,中國游戲開發(fā)者.

猜你喜歡
計(jì)算機(jī)圖形學(xué)
邊標(biāo)志算法中常見問題及解決方法
計(jì)算機(jī)圖形學(xué)教學(xué)中的“差別”培養(yǎng)
計(jì)算機(jī)圖形學(xué)與圖形圖像處理技術(shù)
用面向科學(xué)思維的教學(xué)方法改進(jìn)計(jì)算機(jī)圖形學(xué)課程教學(xué)
三維投影變換的MATLAB實(shí)現(xiàn)
BRDF模型研究綜述
二維離散點(diǎn)集Delaunay三角網(wǎng)生長算法的改進(jìn)
論數(shù)字媒體藝術(shù)教育中專業(yè)方向細(xì)分的必要性
基于計(jì)算思維的計(jì)算機(jī)圖形學(xué)教學(xué)改革與實(shí)踐
考試周刊(2016年64期)2016-09-22 14:17:14
計(jì)算機(jī)圖形學(xué)教學(xué)改革淺論
考試周刊(2016年65期)2016-09-22 14:11:34
浙江省| 仁怀市| 颍上县| 黄冈市| 咸宁市| 上虞市| 宜兴市| 盐山县| 绵阳市| 上犹县| 桑日县| 牡丹江市| 平利县| 洪湖市| 乃东县| 呼伦贝尔市| 凭祥市| 洛浦县| 新河县| 桐城市| 固始县| 新干县| 张家界市| 日土县| 大关县| 尉氏县| 通山县| 涿鹿县| 开阳县| 南漳县| 金山区| 黔南| 景洪市| 四川省| 鹰潭市| 日土县| 响水县| 武胜县| 久治县| 临漳县| 临城县|