亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,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í)例,對(duì)系統(tǒng)的需求、算法、優(yōu)化進(jìn)行了詳細(xì)的介紹,并給出了可行的解決方法。

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

        中圖分類號(hào):G64 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):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

        今天,對(duì)許多人而言,計(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é)知識(shí)。計(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è)開放的針對(duì)圖形硬件的三維圖形軟件包,它獨(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)了成千上萬(wàn)的基于各種計(jì)算機(jī)平臺(tái)的應(yīng)用程序。OpenGL通過集成大量的渲染、紋理映射、特殊效果和其他強(qiáng)大的可視化函數(shù),使得其應(yīng)用程序更加新穎,并大幅度加速了圖形應(yīng)用程序的開發(fā)。

        1 OpenGL圖形操作步驟

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

        首先根據(jù)基本圖形單元建立景物模型,并且對(duì)所建立的模型進(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ù)需要對(duì)象素?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)閉文件文件操作,對(duì)獲取的數(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é)語(yǔ)

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

        參考文獻(xiàn)

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

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

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

        [4] (美)OpenGL體系評(píng)審委員會(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超級(jí)寶典[M].2版.瀟湘工作室,譯.人民郵電出版社, 2001.

        [7] 吳海平.OpenGL圖形程序設(shè)計(jì)與 應(yīng)用環(huán)境[M].國(guó)防科技大學(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,中國(guó)游戲開發(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)生長(zhǎ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
        亚洲国产精品无码av| 亚洲日本一区二区在线观看| 中文字幕东京热一区二区人妻少妇| 欧美最猛性xxxx| 日本女优中文字幕四季视频网站| 日韩国产一区二区三区在线观看| 亚洲成人一区二区av| 亚洲熟妇色自偷自拍另类| 越南女子杂交内射bbwbbw| 欧美一级欧美一级在线播放| 精品久久免费一区二区三区四区| 色av色婷婷18人妻久久久| 97精品一区二区三区| 亚洲av中文无码乱人伦下载| 妓院一钑片免看黄大片| 国产在线欧美日韩精品一区二区| av资源在线播放网站| 文字幕精品一区二区三区老狼| 久久久久亚洲av片无码下载蜜桃| 超薄肉色丝袜一区二区| 国产成人户外露出视频在线| 无码熟妇人妻AV不卡| 手机在线观看成年人视频| 国产三级不卡视频在线观看| 免费a级毛片18禁网站app| 无码人妻一区二区三区在线视频 | 无码三级在线看中文字幕完整版 | 成人性生交c片免费看| 日韩av在线不卡一区二区| 少女韩国电视剧在线观看完整| 欧洲成人午夜精品无码区久久| 午夜一级韩国欧美日本国产| 日本最新一区二区三区视频| 一区二区三区精品免费| 亚洲中文字幕无码天然素人在线| 精品久久综合亚洲伊人| 日本一区二区三区一级免费| 亚洲av免费手机在线观看| 久久久精品人妻一区二区三区| 国产日韩久久久精品影院首页| 亚洲伊人伊成久久人综合|