欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于gpu的渲染地形的方法

文檔序號:6436252閱讀:323來源:國知局
專利名稱:一種基于gpu的渲染地形的方法
技術(shù)領(lǐng)域
本發(fā)明涉及計算機圖形學(xué)領(lǐng)域,特別是涉及一種基于GPU的GeometryClipmap渲染地形的方法。
背景技術(shù)
隨著信息技術(shù)的快速發(fā)展,大規(guī)模復(fù)雜場景的實時漫游技術(shù)變得日趨重要。利用計算機技術(shù),以三維可視化的形式將海量場景數(shù)據(jù)表現(xiàn)出來是一個發(fā)展的必然趨勢,但相對于凌亂的文字?jǐn)?shù)據(jù),采用三維場景形式展示給用戶的信息量非常巨大。傳統(tǒng)大規(guī)模場景渲染算法的實現(xiàn)通常要在CPU上進行復(fù)雜的數(shù)據(jù)分塊、復(fù)雜的數(shù)據(jù)結(jié)構(gòu)維護以及復(fù)雜的精細層次篩選計算等操作,導(dǎo)致了計算負(fù)擔(dān)比較重。而龐大的數(shù)據(jù)存取和龐大數(shù)據(jù)的渲染是導(dǎo)致計算負(fù)擔(dān)較重的兩個因素。I)龐大的數(shù)據(jù)存取 無限大的場景模擬需要海量的場景數(shù)據(jù)。一個典型的大規(guī)模場景渲染實例就是室外地形的渲染,地形數(shù)據(jù)的大小又決定了場景的大小,因此如何保存這些地下數(shù)據(jù)成了首要的問題。由于數(shù)據(jù)量龐大,這些數(shù)據(jù)還不能全部存放在計算機內(nèi)存中,為了降低渲染計算機硬件的要求,數(shù)據(jù)平時要放在硬盤中。因此,在算法上就需要一種預(yù)取和釋放的策略,盡量減少系統(tǒng)內(nèi)存性能的受影響程度。2)龐大數(shù)據(jù)的渲染當(dāng)實時漫游大區(qū)域地形時,視野很多情況下都是無限的,而無限的視野就意味著要渲染無限的圖元,對于現(xiàn)有的計算機資源是不可能實現(xiàn)的。圖元數(shù)量是以場景大小平方的速度增長,只考慮地形數(shù)據(jù),一個2048x2048地形圖,如果不考慮減低細節(jié)程度和裁剪的話,它將要渲染8M的三角形,目前計算機配置很難實現(xiàn)交互式幀率。因此,減少要渲染地形的圖元數(shù)目是該領(lǐng)域解決的核心問題,在質(zhì)量誤差范圍內(nèi),一切工作都是為了減少渲染數(shù)據(jù)量。為了解決海量數(shù)據(jù)存取和渲染的問題,常用的方法是將地形數(shù)據(jù)按照不同精細層次進行分塊,在內(nèi)存中維護一個復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(通常是kd樹),然后當(dāng)視點移動的時候,根據(jù)屏幕像素級別的誤差要求,在這棵樹中選取不同精細層次的數(shù)據(jù),最后將不同精細層的地形塊拼接在一起。這種傳統(tǒng)的算法會造成CPU運算負(fù)荷過大,導(dǎo)致三維圖像顯示不連續(xù)。總之,現(xiàn)有的進行渲染地形的方法存在渲染地形的過程中運算復(fù)雜,速度慢的缺陷。因而,目前需要本領(lǐng)域技術(shù)人員迫切解決的一個技術(shù)問題就是如何找到一種新型的快速的渲染地形的方法。

發(fā)明內(nèi)容
本發(fā)明所要解決的一個技術(shù)問題是提供一種基于GPU的GeometryClipmap渲染地形的方法,該方法是一種快速的渲染地形的方法,得到的三維圖像顯示連續(xù)。為了解決上述問題,本發(fā)明公開了一種基于GPU的GeometryClipmap渲染地形的方法,包括對高程紋理數(shù)據(jù)進行組織,逐級排列的不同分辨率的高程紋理數(shù)據(jù);根據(jù)頂點位置從相應(yīng)層獲取高程紋理組織數(shù)據(jù)的高程值,獲得高程紋理組織數(shù)據(jù)的高程值;對過渡帶進行頂點高程數(shù)據(jù)的混合,獲得多過渡帶的高程混合數(shù)據(jù);在像素著色器中計算法向量及細節(jié)紋理,獲得法向量及細節(jié)紋理;將圖像渲染到屏幕上,獲得在屏幕上顯示的圖像渲染效果;
檢測視點是否更新,作出相應(yīng)的操作。優(yōu)選的,所述對高程紋理數(shù)據(jù)進行組織,逐級排列的不同分辨率的高程紋理數(shù)據(jù)的步驟,包括獲取當(dāng)前視點范圍內(nèi)的高程紋理數(shù)據(jù),得到當(dāng)前視點范圍內(nèi)的高程紋理數(shù)據(jù);獲取不同分辨率的高程紋理數(shù)據(jù),得到不同分辨率的高程紋理數(shù)據(jù);將不同分辨率的高程紋理數(shù)據(jù)按照Clipmap的方式進行排列,獲得逐級排列的不同分辨率的高程紋理數(shù)據(jù)。優(yōu)選的,所述對高程紋理數(shù)據(jù)進行組織的步驟,包括對高程紋理數(shù)據(jù)的高度數(shù)據(jù)進行組織,獲得合成后的高程紋理數(shù)據(jù)的高度數(shù)據(jù);對高程紋理數(shù)據(jù)的水平數(shù)據(jù)進行組織,獲得高程紋理數(shù)據(jù)的水平數(shù)據(jù);對高程紋理數(shù)據(jù)的地形數(shù)據(jù)進行合并,獲得高程紋理數(shù)據(jù)的地形數(shù)據(jù)。優(yōu)選的,所述對高程紋理數(shù)據(jù)的高度數(shù)據(jù)進行組織,獲得合成后的高程紋理數(shù)據(jù)的高度數(shù)據(jù)的步驟,包括將高度紋理數(shù)據(jù)的高度數(shù)據(jù)進行創(chuàng)建,獲得32位float精度的紋理高度數(shù)據(jù);將兩層紋理高度數(shù)據(jù)保存到一張紋理內(nèi)并傳輸給GPU ;將當(dāng)前層的紋理高度數(shù)據(jù)保存為32位float精度的紋理高度數(shù)據(jù)的整數(shù)部分;將相鄰的下一層紋理高度數(shù)據(jù)保存為32位float精度的紋理高度數(shù)據(jù)的小數(shù)部分; 對兩層紋理高度數(shù)據(jù)進行合成;采用公式I來對兩層紋理高度數(shù)據(jù)進行計算,獲得合成后的高程紋理數(shù)據(jù)的高度數(shù)據(jù);Vdest (U,V) = VLevelN (u,V) +VLevelN+1 (u,v) *0. 001(I)其中,Vdest (u,v)是合成后的紋理高度數(shù)據(jù),VLevelN(u,v)是相對精細層的紋理高度數(shù)據(jù),VLevelN+1 (U,v)是相對粗糙層的紋理高度數(shù)據(jù)。優(yōu)選的,所述對高程紋理數(shù)據(jù)的地形數(shù)據(jù)進行合并,獲得高程紋理數(shù)據(jù)的地形數(shù)據(jù)的步驟,包括利用高度數(shù)據(jù)創(chuàng)建創(chuàng)建FMT_R32紋理,獲得紋理數(shù)據(jù);將紋理數(shù)據(jù)傳入Vertex Shader的常量表;把高度Z數(shù)據(jù)傳進GPU,獲得GPU內(nèi)的一維高度Z數(shù)據(jù);X、y 二維數(shù)據(jù)通過頂點緩沖方式傳輸進GPU,獲得GPU內(nèi)的x、y 二維數(shù)據(jù);
將上述GPU內(nèi)的一維高度Z數(shù)據(jù)及GPU內(nèi)的x、y 二維數(shù)據(jù)合成,獲得高程紋理數(shù)據(jù)的地形數(shù)據(jù)。優(yōu)選的,所述檢測視點是否更新,作出相應(yīng)的操作的步驟,包括檢測視點是否更新,獲得視點是否更新的分析結(jié)果;若分析結(jié)果是視點已經(jīng)進行了更新,則執(zhí)行視點更新的相應(yīng)操作;若分析結(jié)果是視點沒有進行更新,則接收算法結(jié)束請求指令,完成對地形進行渲染的全過程。優(yōu)選的,所述若分析結(jié)果是視點已經(jīng)進行了更新,則執(zhí)行視點更新的相應(yīng)操作的步驟,包括 若分析結(jié)果是視點已經(jīng)進行了更新,獲得視點更新的數(shù)據(jù);依據(jù)視點更新的數(shù)據(jù)來計算視點移動的數(shù)值變化,獲得視點移動值;依據(jù)視點移動值來對高程紋理數(shù)據(jù)進行更新,獲得更新后的高程紋理數(shù)據(jù);根據(jù)頂點位置從相應(yīng)層獲取高程紋理組織數(shù)據(jù)的高程值,獲得高程紋理組織數(shù)據(jù)的高程值;對過渡帶進行頂點高程數(shù)據(jù)的混合,獲得過渡帶的高程混合數(shù)據(jù);在像素著色器中計算法向量及細節(jié)紋理,獲得法向量及細節(jié)紋理;將圖像渲染到屏幕上,獲得在屏幕上顯示的圖像渲染效果;完成上述操作,執(zhí)行一輪視點更新的相應(yīng)操作;執(zhí)行多輪視點更新的相應(yīng)操作;檢測視點是否更新的結(jié)果為視點沒有進行更新,則接收算法結(jié)束請求指令,完成對地形進行渲染的全過程。優(yōu)選的,所述裂縫消除的方式為通過在兩個地形塊之間添加一個過渡帶,使得在過渡帶的邊緣高度數(shù)據(jù)和下一層采集的高度數(shù)據(jù)是同一個精細度,則使得裂縫消除。優(yōu)選的,所述通過GeometryClipmap的方式對地形進行渲染,獲得地形渲染的效果圖。優(yōu)選的,所述通過GeometryClipmap的方式對地形進行渲染,獲得地形渲染的效果圖的步驟,包括把地形數(shù)據(jù)緩存在一組嵌套的規(guī)格網(wǎng)格內(nèi);當(dāng)觀察點移動時,通過更新地形數(shù)據(jù),獲得更新后的地形數(shù)據(jù);規(guī)整的網(wǎng)格在GPU中利用vertex Texture技術(shù)對高度數(shù)據(jù)進行采樣,獲得高度數(shù)據(jù);將高度數(shù)據(jù)和二維平面數(shù)據(jù)進行組合,獲得三維空間數(shù)據(jù);依據(jù)三維空間數(shù)據(jù)對地形進行渲染,獲得地形渲染的效果圖。本發(fā)明顯著優(yōu)點在于最大限度減少地形渲染時的CPU負(fù)荷。大規(guī)模地形渲染不僅僅是地形網(wǎng)格的渲染,還需要對某些地表物體進行特殊處理,比如野外的地表衍生物如樹木、雜草、地貌等,模擬這些效果同樣需要很高的代價。所以,為了提高室外大規(guī)模地形的渲染質(zhì)量,在基本網(wǎng)格上需要盡可能減少計算量,以降低CPU的負(fù)荷,在有限的計算資源上實現(xiàn)地表渲染的其它特殊效果。
總之,本發(fā)明提供了一種基于GPU的GeometryClipmap渲染地形的方法,該方法是一種快速的渲染地形的方法,得到的三維圖像顯示連續(xù)。


圖I是本發(fā)明一種基于GPU的GeometryClipmap渲染地形的方法的實施例的步驟流程圖;圖2是本發(fā)明中的三維地形數(shù)據(jù)的生成步驟流程圖;圖3是本發(fā)明中的一種基于GPU的GeometryClipmap渲染地形的方法的步驟流程圖。
具體實施例方式為使本發(fā)明的上述目的、特征和優(yōu)點能夠更加明顯易懂,下面結(jié)合附圖和具體實施方式
對本發(fā)明作進一步詳細的說明。本發(fā)明的核心思想之一是提供一種基于GPU (Graphic Processing Unit中文翻譯為“GPU”,GPU是相對于CPU的一個概念,由于在現(xiàn)代的計算機中,特別是家用系統(tǒng),游戲的發(fā)燒友,圖形的處理變得越來越重要,需要一個專門的圖形的核心處理器)的GeometryCl ipmap渲染地形的方法,包括對高程紋理數(shù)據(jù)進行組織,逐級排列的不同分辨率的高程紋理數(shù)據(jù);根據(jù)頂點位置從相應(yīng)層獲取高程紋理組織數(shù)據(jù)的高程值,獲得高程紋理組織數(shù)據(jù)的高程值;對過渡帶進行頂點高程數(shù)據(jù)的混合,獲得多過渡帶的高程混合數(shù)據(jù);在像素著色器中計算法向量及細節(jié)紋理,獲得法向量及細節(jié)紋理;將圖像渲染到屏幕上,獲得在屏幕上顯示的圖像渲染效果;檢測視點是否更新,作出相應(yīng)的操作;該方法是一種快速的渲染地形的方法,得到的三維圖像顯示連續(xù)。Clipmap采用金字塔層次方式組織數(shù)據(jù),每一層數(shù)據(jù)的分辨率是前一精細層的一半。GPU處理紋理數(shù)據(jù)速度很快,可以先將高度數(shù)據(jù)存儲在紋理中,在創(chuàng)建mipmap后傳給GPU ;然后利用 Shader model3. O 支持的 Vertex Texture 技術(shù),在 Vertex Shader 里米樣高度紋理數(shù)據(jù)。隨著視點距離越來越遠,在紋理采樣時,選取精細層度比較低的紋理層進行采樣。每次只需向GPU導(dǎo)入相同的數(shù)據(jù)小塊就可以構(gòu)建出整個地表網(wǎng)格數(shù)據(jù),大大降低了 GPU數(shù)據(jù)存取的負(fù)擔(dān)。當(dāng)視點移動的時候,數(shù)據(jù)會逐層更新,始終保持視點在數(shù)據(jù)的中心位置,逐層變粗糙。參照圖I,示出了本發(fā)明一種基于GPU的GeometryClipmap渲染地形的方法的實施例的步驟流程圖,具體可以包括步驟101、對高程紋理數(shù)據(jù)進行組織,逐級排列的不同分辨率的高程紋理數(shù)據(jù)。分割的地形網(wǎng)格是規(guī)整的,因此地形塊的分割具有高度一致性(如圖I)。如圖所示每一個Clipmap都是由若干個帶狀數(shù)據(jù)組成,每一個環(huán)都由相同數(shù)目的塊組成,所不同的僅僅是每一個塊的位置和縮放不一樣。由于2D(x,y)數(shù)據(jù)和高度數(shù)據(jù)的特點有所不同,因此這兩類數(shù)據(jù)的處理方式也不同。本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明,在本發(fā)明的優(yōu)選實施例中,所述步驟101,具體可以包括子步驟Al、獲取當(dāng)前視點范圍內(nèi)的高程紋理數(shù)據(jù),得到當(dāng)前視點范圍內(nèi)的高程紋理數(shù)據(jù)。子步驟A2、獲取不同分辨率的高程紋理數(shù)據(jù),得到不同分辨率的高程紋理數(shù)據(jù)。子步驟A3、將不同分辨率的高程紋理數(shù)據(jù)按照Clipmap的方式進行排列,獲得逐級排列的不同分辨率的高程紋理數(shù)據(jù)。其中,所述對高程紋理數(shù)據(jù)進行組織的步驟,包括子步驟BI、對高程紋理數(shù)據(jù)的高度數(shù)據(jù)進行組織,獲得合成后的高程紋理數(shù)據(jù)的高度數(shù)據(jù)。其中,所述子步驟BI具體可以包括子步驟Cl、將高度紋理數(shù)據(jù)的高度數(shù)據(jù)進行創(chuàng)建,獲得32位float精度的紋理高度數(shù)據(jù)。 子步驟C2、將兩層紋理高度數(shù)據(jù)保存到一張紋理內(nèi)并傳輸給GPU。子步驟C3、將當(dāng)前層的紋理高度數(shù)據(jù)保存為32位float精度的紋理高度數(shù)據(jù)的整數(shù)部分。子步驟C4、將相鄰的下一層紋理高度數(shù)據(jù)保存為32位float精度的紋理高度數(shù)據(jù)的小數(shù)部分。子步驟C5、對兩層紋理高度數(shù)據(jù)進行合成。子步驟C6、采用公式I來對兩層紋理高度數(shù)據(jù)進行計算,獲得合成后的高程紋理數(shù)據(jù)的高度數(shù)據(jù);Vdest (u, V) = VLevelN(u, v) +VLevelN+1 (u, v) *0. 001(I)其中,Vdest (u,V)是合成后的紋理高度數(shù)據(jù),VLevelN(u,V)是相對精細層的紋理高度數(shù)據(jù),VLevelN+1 (U,v)是相對粗糙層的紋理高度數(shù)據(jù)。為了使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明,下面詳細介紹高度紋理數(shù)據(jù)的高度數(shù)據(jù)的組織,具體如下所述傳統(tǒng)的方法是把數(shù)據(jù)組織成頂點緩沖或者索引緩沖,再傳給GPU,但由于Shadermode13. O的GPU不支持在GPU里面修改頂點緩沖和索引緩沖,這些操作都是在CPU中進行的,代價是很大的。為了克服上述缺點,本發(fā)明采用頂點紋理技術(shù)存儲這些數(shù)據(jù)。Vertex Texture (頂點紋理米樣)是Shader model3.0支持的一個GPU特性,它允許VertexShader像PixelShader —樣從紋理中讀取數(shù)據(jù)。發(fā)展中的GPU技術(shù)其實也是將計算數(shù)據(jù)組織成紋理的形式輸入到GPU中。6800支持使用D3DFMT_R32F和D3DFMT_A32B32G32R32F的紋理格式實現(xiàn)Vertex Texture。由于本研究工作用的顯卡是nVidiaGeForce7400Go,只支持D3DFMT_R32F格式,所以實現(xiàn)時采用這個格式存儲數(shù)據(jù)。首先將高度數(shù)據(jù)創(chuàng)建成32位float精度的紋理,在實現(xiàn)時候,為了加快速度,可以將兩層數(shù)據(jù)存在一張紋理里面?zhèn)鬟MGPU中。然后把當(dāng)前層的高度數(shù)據(jù)存在float數(shù)據(jù)的整數(shù)部分,把相鄰的下一層高度數(shù)據(jù)存儲在小數(shù)部分,這樣一次就可以將兩層數(shù)據(jù)傳進GPU中,這在解決地形裂縫問題的時候非常重要。Vdest (u, V) = VLevelN(u, v) +VLevelN+1 (u, v) *0. 001(I)其中Vdest(u,v)是合成好之后的紋理數(shù)據(jù),VLevelN(U,V)是相對精細層的數(shù)據(jù),VLevelN+1 (u, V)是相對粗糙一些的數(shù)據(jù)層。將數(shù)據(jù)導(dǎo)入GPU的時候需要一些時間代價,經(jīng)過上述處理后就可以減少GPU的傳輸負(fù)擔(dān),提高性能。高度數(shù)據(jù)到了 GPU之后,在Vertex Shader里面會被采樣出來,然后每一個采樣點就可以分離出相對應(yīng)兩層的數(shù)據(jù)值。子步驟B2、對高程紋理數(shù)據(jù)的水平數(shù)據(jù)進行組織,獲得高程紋理數(shù)據(jù)的水平數(shù)據(jù)。為了使普通技術(shù)人員更好地理解本發(fā)明,下面詳細介紹本發(fā)明中的高程紋理數(shù)據(jù)的水平數(shù)據(jù)組織的結(jié)構(gòu)。DClipmap地形的分割數(shù)據(jù)是以視點為中心一圈一圈的環(huán)狀數(shù)據(jù),每一個圈代表了一塊地形區(qū)域,除了最中間的那塊是完整的矩形,其他都是環(huán)狀的。2)每一個環(huán)狀的數(shù)據(jù)采樣點是一樣的,但是所代表的區(qū)域是不一樣。外圈矩形的面積是相鄰里層的兩倍。隨著視點距離越來越遠,每一圈地形的精細度按1/2比例下降。由于深度的原因,每個三角面片屏幕空間的大小差別不大,因此基于此比較規(guī)整數(shù)據(jù)的組織減少了不必要的三角面片。最終,整個地形塊都是按照上述方式拼接,每一個圈又由12個子塊拼成,地表的最基本組成單元就是這些小塊。
子步驟B3、對高程紋理數(shù)據(jù)的地形數(shù)據(jù)進行合并,獲得高程紋理數(shù)據(jù)的地形數(shù)據(jù)。其中,所述子步驟B3具體可以包括子步驟D1、利用高度數(shù)據(jù)創(chuàng)建創(chuàng)建FMT_R32紋理,獲得紋理數(shù)據(jù)。子步驟D2、將紋理數(shù)據(jù)傳入Vertex Shader的常量表。子步驟D3、把高度Z數(shù)據(jù)傳進GPU,獲得GPU內(nèi)的一維高度Z數(shù)據(jù)。子步驟D4、x、y 二維數(shù)據(jù)通過頂點緩沖方式傳輸進GPU,獲得GPU內(nèi)的x、y 二維數(shù)據(jù)。子步驟D5、將上述GPU內(nèi)的一維高度Z數(shù)據(jù)及GPU內(nèi)的X、y 二維數(shù)據(jù)合成,獲得高程紋理數(shù)據(jù)的地形數(shù)據(jù)。為了使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明,下面詳細介紹地形數(shù)據(jù)的合并過程,具體如下所述利用高度數(shù)據(jù)創(chuàng)建FMT_R32紋理后,將紋理傳入Vertex Shader的常量表,把高度Z數(shù)據(jù)傳進GPU。(X,y) 二維數(shù)據(jù)通過頂點緩沖形式傳輸進GPU。由于這兩部分?jǐn)?shù)據(jù)是分開存儲,需要將高度一維數(shù)據(jù)和二維水平數(shù)據(jù)合成。參照圖2,示出了本發(fā)明中的三維地形數(shù)據(jù)的生成步驟流程圖。從圖2中可以看出本發(fā)明中的三維地形數(shù)據(jù)的生成的全過程。為了使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明,下面詳細介紹本發(fā)明中的小塊頂點坐標(biāo)計算的結(jié)構(gòu),具體如下所述每一個小塊代表一個地表區(qū)域,設(shè)定小塊代表的區(qū)域大小為S,小塊的采樣數(shù)為對M*N,以小塊中心為坐標(biāo)原點。那么對于小塊中的每一個采樣點來說它的坐標(biāo)值可以采用公式2計算Px, y (row, col) = (_S/2, S/2) + (col/(M_l))*S,-row/(M_l)*S) (2)其中Px, y (row, col)為小塊中row行、col對應(yīng)采樣點的(x,y)坐標(biāo)值;S為采樣坐標(biāo)塊的大小…為行數(shù),N為列數(shù)。最中心那塊以及緊接著的第一個環(huán)形塊不需要縮放外,接下來的每一個塊都要進行按照Zn-2的倍數(shù)放大,其實中η是一個以中心為O層開始的層序數(shù)。數(shù)據(jù)塊被送到GPU之后先進行縮放,再平移到合適層的相應(yīng)位置。接下來根據(jù)最后得到的平面(x,y)數(shù)據(jù),轉(zhuǎn)換為(U,V)坐標(biāo),如式3所示
(U, V) = (x, y)/S (3)其中S是當(dāng)前采樣坐標(biāo)塊所在地形塊的尺寸大小。接著再用U,V坐標(biāo)在精細層和粗糙層分別采樣出高度數(shù)據(jù),進行混合,這樣做的目的是是使得精細變化切換邊緣變化地平緩一些同時也消除裂縫,這部分內(nèi)容的細節(jié)在裂縫的消除這節(jié)里面的仔細描述。步驟102、根據(jù)頂點位置從相應(yīng)層獲取高程紋理組織數(shù)據(jù)的高程值,獲得高程紋理組織數(shù)據(jù)的高程值。步驟103、對過渡帶進行頂點高程數(shù)據(jù)的混合,獲得多過渡帶的高程混合數(shù)據(jù)。步驟104、在像素著色器中計算法向量及細節(jié)紋理,獲得法向量及細節(jié)紋理。步驟105、將圖像渲染到屏幕上,獲得在屏幕上顯示的圖像渲染效果。步驟106、檢測視點是否更新,作出相應(yīng)的操作。
為了使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明,在本發(fā)明的另一優(yōu)選實施例中,所述步驟106,具體可以包括子步驟E1、檢測視點是否更新,獲得視點是否更新的分析結(jié)果。子步驟E2、若分析結(jié)果是視點已經(jīng)進行了更新,則執(zhí)行視點更新的相應(yīng)操作。其中,所述子步驟E2具體可以包括子步驟F1、若分析結(jié)果是視點已經(jīng)進行了更新,獲得視點更新的數(shù)據(jù)。子步驟F2、依據(jù)視點更新的數(shù)據(jù)來計算視點移動的數(shù)值變化,獲得視點移動值。子步驟F3、依據(jù)視點移動值來對高程紋理數(shù)據(jù)進行更新,獲得更新后的高程紋理數(shù)據(jù)。子步驟F4、根據(jù)頂點位置從相應(yīng)層獲取高程紋理組織數(shù)據(jù)的高程值,獲得高程紋理組織數(shù)據(jù)的高程值。子步驟F5、對過渡帶進行頂點高程數(shù)據(jù)的混合,獲得過渡帶的高程混合數(shù)據(jù)。子步驟F6、在像素著色器中計算法向量及細節(jié)紋理,獲得法向量及細節(jié)紋理。子步驟F7、將圖像渲染到屏幕上,獲得在屏幕上顯示的圖像渲染效果。子步驟F8、完成上述操作,執(zhí)行一輪視點更新的相應(yīng)操作。子步驟F9、執(zhí)行多輪視點更新的相應(yīng)操作。子步驟F10、檢測視點是否更新的結(jié)果為視點沒有進行更新,則接收算法結(jié)束請求指令,完成對地形進行渲染的全過程。子步驟E3、若分析結(jié)果是視點沒有進行更新,則接收算法結(jié)束請求指令,完成對地形進行渲染的全過程。其中,在一種基于GPU的GeometryClipmap渲染地形的方法中,所述裂縫消除的方式為通過在兩個地形塊之間添加一個過渡帶,使得在過渡帶的邊緣高度數(shù)據(jù)和下一層采集的高度數(shù)據(jù)是同一個精細度,則使得裂縫消除。所述通過GeometryClipmap的方式對地形進行渲染,獲得地形渲染的效果圖。所述通過GeometryClipmap的方式對地形進行渲染,獲得地形渲染的效果圖的步驟,包括子步驟Gl、把地形數(shù)據(jù)緩存在一組嵌套的規(guī)格網(wǎng)格內(nèi)。子步驟G2、當(dāng)觀察點移動時,通過更新地形數(shù)據(jù),獲得更新后的地形數(shù)據(jù)。子步驟G3、規(guī)整的網(wǎng)格在GPU中利用vertex Texture技術(shù)對高度數(shù)據(jù)進行采樣,獲得高度數(shù)據(jù)。子步驟G4、將高度數(shù)據(jù)和二維平面數(shù)據(jù)進行組合,獲得三維空間數(shù)據(jù)。子步驟G5、依據(jù)三維空間數(shù)據(jù)對地形進行渲染,獲得地形渲染的效果圖。在本發(fā)明中涉及到數(shù)據(jù)的更新,為了使本領(lǐng)域的普通技術(shù)人員能夠更好地理解本發(fā)明,下面詳細介紹數(shù)據(jù)的更新的相關(guān)內(nèi)容,具體如下所述當(dāng)漫游場景時候,在內(nèi)存中保留的那個金字塔堆棧就需要根據(jù)視點的位置,在相應(yīng)的內(nèi)存緩沖中去讀取需要的數(shù)據(jù)。每一個Clipmap都需要保持視點在中心位置,一般當(dāng)視點移動的時候都有一個很小的L形狀的窗口區(qū)域需要更新。由于相對運動在用戶窗口中是以e的指數(shù)次下降,所以更新的時候外圍的粗糙層次很少需要更新。為了使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明,下面詳細介紹本發(fā)明中的數(shù)據(jù)塊更 新的過程,具體如下所述數(shù)據(jù)塊更新的全過程按照從粗糙到精細激活Clipmap的層次更新數(shù)據(jù),更新的時候使用環(huán)繞尋址的方式采樣高度紋理數(shù)據(jù),紋理數(shù)據(jù)會按照形狀數(shù)據(jù)塊方式存儲,這樣僅僅通過改變尋址模式,從而避免了搬移大量的有效數(shù)據(jù),提高數(shù)據(jù)處理效率。當(dāng)視點朝一個方向移動的時候,背向視點的矩形區(qū)域就會被填充進新的數(shù)據(jù)。為了使本領(lǐng)域的技術(shù)人員更好地理解本發(fā)明,下面詳細介紹本發(fā)明中的Clipmap和緩沖帶,具體如下所述每一張Clipmap相鄰兩層之間的過渡區(qū)都會有一個數(shù)據(jù)緩沖帶。實際操作中,每一張Clipmap相鄰兩層之間的過渡區(qū)都會有一個數(shù)據(jù)緩沖帶。視點在漫游時候,數(shù)據(jù)需要做分頁調(diào)度,預(yù)取的數(shù)據(jù)會放在Clipmap每一層過度的邊緣圈,也稱為無效區(qū)域,在渲染中,該區(qū)域的數(shù)據(jù)是不能被直接訪問的,當(dāng)視點移動到有效區(qū)域,系統(tǒng)會從有效區(qū)提取數(shù)據(jù)加以渲染,無效區(qū)域就是一個存放數(shù)據(jù)緩沖的地帶。在本發(fā)明中涉及到裂縫消除,為了使本領(lǐng)域的普通技術(shù)人員能夠更好地理解本發(fā)明,下面詳細介紹數(shù)據(jù)的更新的相關(guān)內(nèi)容,具體如下所述裂縫消除的方法是在兩個地形塊之間添加一個過渡帶。本發(fā)明中的地形塊過渡的過程如下所述在地形塊的精細層級變化的邊緣地帶采用一個過渡帶。在這個過渡帶中,當(dāng)前點的高度值是本層次高度圖采集高度和下一個粗糙層次高度數(shù)據(jù)的混合值,隨著越來越靠近邊緣點,下一個層次的高度數(shù)值占的比重逐漸增加,這樣做可以使在過渡帶的邊緣高度數(shù)據(jù)和下一層采集的高度數(shù)據(jù)是同一個精細度,裂縫即可消除。具體采用的方案如下在Vertex Shader里面的采樣邏輯為if非邊緣采樣點Height =直接采樣當(dāng)前精細高度數(shù)據(jù)Else if偶數(shù)采樣點Heigt =直接采樣下一粗糙層相應(yīng)位置高度數(shù)據(jù)elseHeigtl =用他前一個偶數(shù)采樣點采樣下一個粗糙層相應(yīng)高度數(shù)據(jù)Heig2 =用他后一個偶數(shù)采樣點采樣下一個粗糙層相應(yīng)高度數(shù)據(jù)
Heigt= (Heigtl+Height2) /2endif經(jīng)過上面的采樣邏輯之后,裂縫己經(jīng)徹底消除。從本發(fā)明中的消除裂縫前的渲染效果圖中,可以得到結(jié)論過渡帶之間的裂縫相對比較明顯。從本發(fā)明中的消除裂縫的渲染效果圖中,可以得到結(jié)論過渡帶之間的裂縫消除,渲染得到的效果圖更加的流暢。在本發(fā)明中涉及到GeometryClipmap方法,為了使本領(lǐng)域的普通技術(shù)人員能夠更好地理解本發(fā)明,下面詳細介紹數(shù)據(jù)的更新的相關(guān)內(nèi)容,具體如下所述GeometryClipmap是用于渲染地形LOD的新方法。它把地形緩存在一組嵌套的規(guī)·則網(wǎng)格中,同時在觀察點移動時,不斷更新這些數(shù)據(jù)。對比不規(guī)則網(wǎng)格(irregular mesh)技術(shù),規(guī)則的網(wǎng)格有很多優(yōu)點簡潔的數(shù)據(jù)結(jié)構(gòu)、平滑的視覺效果,穩(wěn)定的渲染速率,合適的分級。規(guī)整的網(wǎng)格在GPU中利用vertex Texture技術(shù)進行高度數(shù)據(jù)的采樣,再結(jié)合二維平面數(shù)據(jù),一起組合成新的三維空間數(shù)據(jù),這樣做的好處是,大量的計算放在GPU中進行,減輕了 CPU(Central Processing Unit,中文翻譯為中央處理器,是一臺計算機的運算核心和控制核心,其功能主要是解釋計算機指令以及處理計算機軟件中的數(shù)據(jù),CPU由運算器、控制器和寄存器及實現(xiàn)它們之間聯(lián)系的數(shù)據(jù)、控制及狀態(tài)的總線構(gòu)成)的負(fù)擔(dān)。同時數(shù)據(jù)的GPU內(nèi)合成,減少了內(nèi)存到AGP顯存的傳輸壓力,也進一步提高了系統(tǒng)的性能。參照圖3,示出了本發(fā)明中的一種基于GPU的GeometryClipmap渲染地形的方法的步驟流程圖。從圖3中可以看出采用一種基于GPU的GeometryClipmap渲染地形的方法對地形進行渲染的全過程。總之,本發(fā)明提供了一種基于GPU的GeometryClipmap渲染地形的方法,該方法是一種快速的渲染地形的方法,得到的三維圖像顯示連續(xù)。以上對本發(fā)明所提供的一種基于GPU的GeometryClipmap渲染地形的方法進行了詳細介紹,本文中應(yīng)用了具體個例對本發(fā)明的原理及實施方式進行了闡述,以上實施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時,對于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實施方式
及應(yīng)用范圍上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1.一種基于GPU的GeometryClipmap渲染地形的方法,其特征在于,包括 對高程紋理數(shù)據(jù)進行組織,逐級排列的不同分辨率的高程紋理數(shù)據(jù); 根據(jù)頂點位置從相應(yīng)層獲取高程紋理組織數(shù)據(jù)的高程值,獲得高程紋理組織數(shù)據(jù)的高程值; 對過渡帶進行頂點高程數(shù)據(jù)的混合,獲得多過渡帶的高程混合數(shù)據(jù); 在像素著色器中計算法向量及細節(jié)紋理,獲得法向量及細節(jié)紋理; 將圖像渲染到屏幕上,獲得在屏幕上顯示的圖像渲染效果; 檢測視點是否更新,作出相應(yīng)的操作。
2.如權(quán)利要求I所述的方法,其特征在于,所述對高程紋理數(shù)據(jù)進行組織,逐級排列的不同分辨率的高程紋理數(shù)據(jù)的步驟,包括 獲取當(dāng)前視點范圍內(nèi)的高程紋理數(shù)據(jù),得到當(dāng)前視點范圍內(nèi)的高程紋理數(shù)據(jù); 獲取不同分辨率的高程紋理數(shù)據(jù),得到不同分辨率的高程紋理數(shù)據(jù); 將不同分辨率的高程紋理數(shù)據(jù)按照Clipmap的方式進行排列,獲得逐級排列的不同分辨率的高程紋理數(shù)據(jù)。
3.如權(quán)利要求I所述的方法,其特征在于,所述對高程紋理數(shù)據(jù)進行組織的步驟,包括 對高程紋理數(shù)據(jù)的高度數(shù)據(jù)進行組織,獲得合成后的高程紋理數(shù)據(jù)的高度數(shù)據(jù); 對高程紋理數(shù)據(jù)的水平數(shù)據(jù)進行組織,獲得高程紋理數(shù)據(jù)的水平數(shù)據(jù); 對高程紋理數(shù)據(jù)的地形數(shù)據(jù)進行合并,獲得高程紋理數(shù)據(jù)的地形數(shù)據(jù)。
4.如權(quán)利要求3所述的方法,其特征在于,所述對高程紋理數(shù)據(jù)的高度數(shù)據(jù)進行組織,獲得合成后的高程紋理數(shù)據(jù)的高度數(shù)據(jù)的步驟,包括 將高度紋理數(shù)據(jù)的高度數(shù)據(jù)進行創(chuàng)建,獲得32位float精度的紋理高度數(shù)據(jù); 將兩層紋理高度數(shù)據(jù)保存到一張紋理內(nèi)并傳輸給GPU ; 將當(dāng)前層的紋理高度數(shù)據(jù)保存為32位float精度的紋理高度數(shù)據(jù)的整數(shù)部分; 將相鄰的下一層紋理高度數(shù)據(jù)保存為32位float精度的紋理高度數(shù)據(jù)的小數(shù)部分; 對兩層紋理高度數(shù)據(jù)進行合成; 采用公式I來對兩層紋理高度數(shù)據(jù)進行計算,獲得合成后的高程紋理數(shù)據(jù)的高度數(shù)據(jù); Vdest (U,V) = VLevelN(u, v) +VLevelN+1 (u, ν)*0· OOl(I) 其中,Vdest (u,V)是合成后的紋理高度數(shù)據(jù),VLevelN(u,V)是相對精細層的紋理高度數(shù)據(jù),VLevelN+1 (u, v)是相對粗糙層的紋理高度數(shù)據(jù)。
5.如權(quán)利要求3所述的方法,其特征在于,所述對高程紋理數(shù)據(jù)的地形數(shù)據(jù)進行合并,獲得高程紋理數(shù)據(jù)的地形數(shù)據(jù)的步驟,包括 利用高度數(shù)據(jù)創(chuàng)建創(chuàng)建FMT_R32紋理,獲得紋理數(shù)據(jù); 將紋理數(shù)據(jù)傳入Vertex Shader的常量表; 把高度Z數(shù)據(jù)傳進GPU,獲得GPU內(nèi)的一維高度Z數(shù)據(jù); X、y 二維數(shù)據(jù)通過頂點緩沖方式傳輸進GPU,獲得GPU內(nèi)的x、y 二維數(shù)據(jù); 將上述GPU內(nèi)的一維高度Z數(shù)據(jù)及GPU內(nèi)的X、y 二維數(shù)據(jù)合成,獲得高程紋理數(shù)據(jù)的地形數(shù)據(jù)。
6.如權(quán)利要求1所述的方法,其特征在于,所述檢測視點是否更新,作出相應(yīng)的操作的步驟,包括 檢測視點是否更新,獲得視點是否更新的分析結(jié)果; 若分析結(jié)果是視點已經(jīng)進行了更新,則執(zhí)行視點更新的相應(yīng)操作; 若分析結(jié)果是視點沒有進行更新,則接收算法結(jié)束請求指令,完成對地形進行渲染的全過程。
7.如權(quán)利要求6所述的方法,其特征在于,所述若分析結(jié)果是視點已經(jīng)進行了更新,則執(zhí)行視點更新的相應(yīng)操作的步驟,包括 若分析結(jié)果是視點已經(jīng)進行了更新,獲得視點更新的數(shù)據(jù); 依據(jù)視點更新的數(shù)據(jù)來計算視點移動的數(shù)值變化,獲得視點移動值; 依據(jù)視點移動值來對高程紋理數(shù)據(jù)進行更新,獲得更新后的高程紋理數(shù)據(jù); 根據(jù)頂點位置從相應(yīng)層獲取高程紋理組織數(shù)據(jù)的高程值,獲得高程紋理組織數(shù)據(jù)的高程值; 對過渡帶進行頂點高程數(shù)據(jù)的混合,獲得過渡帶的高程混合數(shù)據(jù); 在像素著色器中計算法向量及細節(jié)紋理,獲得法向量及細節(jié)紋理; 將圖像渲染到屏幕上,獲得在屏幕上顯示的圖像渲染效果; 完成上述操作,執(zhí)行一輪視點更新的相應(yīng)操作; 執(zhí)行多輪視點更新的相應(yīng)操作; 檢測視點是否更新的結(jié)果為視點沒有進行更新,則接收算法結(jié)束請求指令,完成對地形進行渲染的全過程。
8.如權(quán)利要求1所述的方法,其特征在于 所述裂縫消除的方式為通過在兩個地形塊之間添加一個過渡帶,使得在過渡帶的邊緣高度數(shù)據(jù)和下一層采集的高度數(shù)據(jù)是同一個精細度,則使得裂縫消除。
9.如權(quán)利要求1所述的方法,其特征在于 所述通過GeometryClipmap的方式對地形進行渲染,獲得地形渲染的效果圖。
10.如權(quán)利要求1所述的方法,其特征在于,所述通過GeometryClipmap的方式對地形進行渲染,獲得地形渲染的效果圖的步驟,包括 把地形數(shù)據(jù)緩存在一組嵌套的規(guī)格網(wǎng)格內(nèi); 當(dāng)觀察點移動時,通過更新地形數(shù)據(jù),獲得更新后的地形數(shù)據(jù); 規(guī)整的網(wǎng)格在GPU中利用vertex Texture技術(shù)對高度數(shù)據(jù)進行采樣,獲得高度數(shù)據(jù); 將高度數(shù)據(jù)和二維平面數(shù)據(jù)進行組合,獲得三維空間數(shù)據(jù); 依據(jù)三維空間數(shù)據(jù)對地形進行渲染,獲得地形渲染的效果圖。
全文摘要
本發(fā)明提供一種基于GPU的渲染地形的方法,包括對高程紋理數(shù)據(jù)進行組織,逐級排列的不同分辨率的高程紋理數(shù)據(jù);根據(jù)頂點位置從相應(yīng)層獲取高程紋理組織數(shù)據(jù)的高程值,獲得高程紋理組織數(shù)據(jù)的高程值;對過渡帶進行頂點高程數(shù)據(jù)的混合,獲得多過渡帶的高程混合數(shù)據(jù);在像素著色器中計算法向量及細節(jié)紋理,獲得法向量及細節(jié)紋理;將圖像渲染到屏幕上,獲得在屏幕上顯示的圖像渲染效果;檢測視點是否更新,作出相應(yīng)的操作;該方法是一種快速的渲染地形的方法,得到的三維圖像顯示連續(xù)。
文檔編號G06T17/05GK102890829SQ20111032514
公開日2013年1月23日 申請日期2011年10月24日 優(yōu)先權(quán)日2011年10月24日
發(fā)明者齊成濤 申請人:克拉瑪依紅有軟件有限責(zé)任公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
大埔区| 嵊泗县| 河西区| 桃源县| 浮山县| 湘阴县| 基隆市| 耒阳市| 教育| 金堂县| 晋城| 太康县| 庆阳市| 藁城市| 朝阳市| 滦平县| 安泽县| 天门市| 宜宾市| 鄂伦春自治旗| 庆安县| 昔阳县| 小金县| 龙井市| 图木舒克市| 武城县| 塔城市| 犍为县| 永昌县| 武安市| 托里县| 哈巴河县| 金华市| 莫力| 略阳县| 汉源县| 昂仁县| 土默特左旗| 南皮县| 尉犁县| 长子县|