999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于OPENGL的三維地形的生成實現

2014-11-07 23:38:52馬蕾龔戈淬
科技資訊 2014年11期

馬蕾 龔戈淬

摘 要:隨著計算機圖形學的發展,其在科學、工程、醫學、娛樂、廣告、圖形藝術等眾多領域得到了普遍應用。我們可以通過圖形應用程序來虛擬現實,以及GIS領域方面的遙感圖像信息系統的應用。為了逐步實現以上目標的應用,本文將以一個基于OPENGL的,使用高度圖(Heightmap)進行地形(Terraain)生成及在此基礎上的應用為實例,對系統的需求、算法、優化進行了詳細的介紹,并給出了可行的解決方法。

關鍵詞:計算機圖形學 HeightMap OPENGL Terrain

中圖分類號:G64 文獻標識碼: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

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

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

OPENGL實際上是一個開放的針對圖形硬件的三維圖形軟件包,它獨立如窗口系統和操作系統,以它為基礎開發的應用程序可以十分方便的在各種平臺間移植;從程序員的角度來看,OpenGL實際上是一些指令和函數的集合,現在已經能夠在多種平臺上使用。

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

1 OpenGL圖形操作步驟

在OpenGL中進行主要的圖形操作基本步驟如下:

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

在這些步驟的執行過程中,OpenGL可能執行其他的一些操作,例如自動消隱處理等。另外,景物光柵化之后被送入幀緩沖器之前還可以根據需要對象素數據進行操作。

2 地形生成實現

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

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

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

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

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

通過高和寬以及文件的位數(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文件分配內存空間

// 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形式的數據內容存入到m_data變量中,關閉文件文件操作,對獲取的數據進行紋理渲染。

3 使用高度圖進行地形渲染

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

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

第二步利用加載的高度圖,計算3D網格,即高度地形。

高度地形由一個頂點數組和一個索引數組組成,因此能夠用索引化的三角形渲染地形。頂點結構如下:

struct Vertex

{

float x,y,z;

DWORD color;

float u, v;

};

第三步把高度圖數據傳遞給負責用來生成3D地形CalculateHeightfield變量。通過為頂點分配空間并清空分配的內存。然后通過X和Z頂點進行計算紋理,獲得Y坐標,通過從高度圖得到當前像素值和比例因子的一半相乘來完成。

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

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

最后利用OpenGL的頂點數組來渲染我們的地形,渲染的代碼和效果圖如圖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 結語

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

參考文獻

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

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

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

[4] (美)OpenGL體系評審委員會,Masson Woo,等,著.OpenGL編程權威指南[M].吳斌,等,譯.機械工業出版,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圖形程序設計與 應用環境[M].國防科技大學出版社,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,日常游戲開發信息及資源網站.

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

主站蜘蛛池模板: 国产麻豆91网在线看| 内射人妻无码色AV天堂| 精品国产污污免费网站| 成人福利在线视频| 国产永久免费视频m3u8| 91区国产福利在线观看午夜| 岛国精品一区免费视频在线观看 | 国产99欧美精品久久精品久久| 亚洲成人播放| 日韩高清在线观看不卡一区二区| 97久久免费视频| 青青草原国产av福利网站| 老熟妇喷水一区二区三区| 99精品国产电影| 一本大道无码日韩精品影视| 操操操综合网| 香蕉99国内自产自拍视频| 国产成人综合亚洲欧美在| 在线观看视频一区二区| 国产在线精品人成导航| 在线精品亚洲一区二区古装| 亚洲综合色区在线播放2019| 真实国产乱子伦高清| 久久精品人人做人人爽电影蜜月| 国产v欧美v日韩v综合精品| 欧美日韩资源| 久久一本精品久久久ー99| 国产福利小视频在线播放观看| 真实国产精品vr专区| 亚洲日本在线免费观看| 精品久久综合1区2区3区激情| 日韩a在线观看免费观看| 999精品色在线观看| 二级特黄绝大片免费视频大片| 九九热在线视频| 伊人精品成人久久综合| 国产精品视频导航| 亚洲视频在线网| 国产精品区视频中文字幕| 久久夜色撩人精品国产| 麻豆国产原创视频在线播放 | 全部免费特黄特色大片视频| 久久久久青草大香线综合精品| 国产偷国产偷在线高清| 午夜欧美在线| 亚洲欧美国产视频| 免费视频在线2021入口| 国产欧美日韩va| 亚洲国产中文欧美在线人成大黄瓜| 国产屁屁影院| 美女被操黄色视频网站| 久久国产高潮流白浆免费观看| 精品91自产拍在线| 色妞永久免费视频| 国产黄色爱视频| 91色综合综合热五月激情| 91九色视频网| 欧美国产成人在线| 日本三级精品| 免费在线色| 精品国产中文一级毛片在线看| 国产91高清视频| 午夜精品影院| 日本精品视频| 国产浮力第一页永久地址| 中文成人在线视频| 国产乱人伦精品一区二区| 综合久久五月天| 欧美啪啪网| 国产精品亚洲日韩AⅤ在线观看| 久久伊人久久亚洲综合| 午夜电影在线观看国产1区| 免费一级成人毛片| 亚洲精品欧美重口| 亚洲天堂精品在线观看| 国产永久在线视频| 91区国产福利在线观看午夜| 色久综合在线| 亚洲一区二区精品无码久久久| 日本a级免费| 日本一区二区不卡视频| 国产福利在线观看精品|