亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

基于圖形處理器加速的地形渲染方法

文檔序號:6370933閱讀:181來源:國知局
專利名稱:基于圖形處理器加速的地形渲染方法
技術(shù)領(lǐng)域
本發(fā)明涉及圖形學(xué)領(lǐng)域,特別是涉及一種基于圖形處理器進行三維地形渲染處理的方法。
背景技術(shù)
大規(guī)模地形渲染是虛擬自然場景中的重要組成部分,目前國內(nèi)外游戲地形渲染中通常使用了基于中央處理器(CPU)的運算方法計算細節(jié)層次,雖然能夠大幅降低三角形渲染數(shù)量,但缺陷是每一幀都需要更新從CPU到GPU傳送的三角形數(shù)據(jù),占用寶貴的CPU資源和總線帶寬。
·
隨著近年來圖形算法的改進和計算機顯卡性能的提高,充分利用圖形處理器(GPU)性能來生成實時地形已成為可能。在圖形渲染過程中不同層次過渡處會出現(xiàn)T型裂縫,目前現(xiàn)有技術(shù)中消除T型裂縫的做法主要分為跳點法和加點法,都比較繁瑣復(fù)雜,并且額外增加了不少性能開銷。跳點法就是在較高分辨率的分塊的邊界上跳過一些點不繪制,這樣可以保持相鄰分塊的連續(xù)性。加點法就是在較低分辨率的分塊邊界上新增一些頂點以達到兩個分塊頂點保持連續(xù)的目的。無論是新增點還是去除點都需要對整個地形進行遍歷并且對相關(guān)分塊重新進行三角形剖分,而且喪失了分塊的獨立性,給我們利用分塊的Cache帶來了難度,增加了問題的復(fù)雜性,進而影響到效率。還有另外一種效率更高的消除裂縫的辦法。對每個分塊的四條邊,在現(xiàn)有的頂點的基礎(chǔ)上再延伸出一圈,他們和單個分塊的邊界共享頂點,只是高度值不同,這種延伸出來的一圈叫做“裙子”(Skirts )。投影之后只要保證頂點的高度值足夠大,兩個分塊的裙子可以把裂縫遮擋住。當(dāng)然,這種消除裂縫的方式會增加繪制的三角形繪制數(shù)量,也會帶來性能的的下降。

發(fā)明內(nèi)容
為解決上述問題,本發(fā)明公開了一種使用圖形處理器(GPU)實現(xiàn)的幾何體層次細分(LOD)算法,能夠有效消除T型裂縫。為了達到上述目的,本發(fā)明提供如下技術(shù)方案
一種基于圖形處理器加速的地形渲染方法,包括以下步驟
(1)將整個原始地形劃分為2Nx2N個面積相等的地形塊(Block);每個地形塊的的長和寬均相等,地形塊被分為2M x2M個面積相等的單元格;其中,M彡0,N彡0,且M和N均為整數(shù);
(2)使用LOD地形繪制算法,創(chuàng)建不同LOD級別的頂點緩沖和索引緩沖;
LOD級別分為0級,I級……M級,共有M+1級,在不同LOD級別下創(chuàng)建相應(yīng)的頂點緩沖和索引緩沖,所有地形塊共享一組頂點緩沖和索弓I緩沖;
(3)用四叉樹組織整個原始地形,每個葉子節(jié)點對應(yīng)一個地形塊;
(4)渲染地形;
(5)利用GPU進行VertexShader編程,使用頂點紋理采樣功能從高度圖獲取地形塊頂點的高度值;
(6 )根據(jù)步驟(5 )中獲得的高度值修改頂點緩沖中各頂點的高度值,當(dāng)相鄰地形塊之間的LOD級別不一樣時,對LOD級別較低的地形塊邊緣頂點坐標進行位移。。所述步驟(2)中創(chuàng)建頂點緩沖的過程包括將不同LOD級下每個頂點的位置寫入頂點緩沖中,改寫地形塊邊緣編號為奇數(shù)的頂點的Z值,所述編號自邊緣末端由0開始。
所述改寫地形塊邊緣Z值的過程具體包括將地形塊左邊緣編號為奇數(shù)的頂點Z值改寫為I,地形塊上邊緣編號為奇數(shù)的頂點Z值改寫為2,地形塊右邊緣編號為奇數(shù)的頂點Z值改寫為3,地形塊下邊緣編號為奇數(shù)的頂點Z值改寫為4。所述步驟(6)中的具體操作步驟如下
當(dāng)頂點的Z值在步驟(2)中未被改寫時,將Z值修改為通過頂點紋理采樣功能獲得的高度值;
當(dāng)頂點的Z值在步驟(2)中已被改寫且該地形塊與相鄰地形塊之間的LOD級別一樣時,將Z值修改為通過頂點紋理采樣功能獲得的高度值;
當(dāng)頂點的Z值在步驟(2)中已被改寫且相鄰地形塊之間的LOD級別不一樣時,對LOD級別較低的地形塊邊緣編號為奇數(shù)的頂點坐標進行位移。所述對LOD級別較低的地形塊邊緣編號為奇數(shù)的頂點坐標進行位移的過程包括將地形塊左邊緣編號為奇數(shù)的頂點坐標值修改為該頂點上方的頂點坐標值;將地形塊上邊緣編號為奇數(shù)的頂點坐標值修改為該頂點左方頂點的坐標值;將地形塊右邊緣編號為奇數(shù)的頂點坐標值修改為該頂點下方的頂點坐標值;將地形塊下邊緣編號為奇數(shù)的頂點坐標值修改為該頂點右方的頂點坐標值。所述步驟(4)中渲染地形的過程包括使用視錐體與四叉樹遞歸計算后快速剔除不可見節(jié)點,從而獲取一組可視地形塊,根據(jù)視點到地形塊中心的水平距離計算出各地形塊的LOD級數(shù);針對每個可視地形塊計算出的LOD級數(shù)所對應(yīng)的頂點和索引緩沖,再進行三角形列表圖元的渲染。與現(xiàn)有技術(shù)相比,本發(fā)明提供的地形渲染方法具有以下優(yōu)點和有益效果
I.算法簡單高效,節(jié)約資源,有效消除了地形LOD渲染過程中出現(xiàn)的T型裂縫問題。2.基于圖形處理器(GPU)進行計算,節(jié)省了 CPU的運算資源,提升了 CPU的處理性倉泛。本發(fā)明能夠在僅支持Direct3D 9的計算機上高質(zhì)量高性能的渲染大規(guī)模地形,可以廣泛應(yīng)用于3D游戲和虛擬現(xiàn)實應(yīng)用程序中。


圖I為原始地形圖和地形塊的劃分 其中圖a為原始地形圖像劃分圖,圖b為a圖中圓圈圈出的地形塊的放大 圖2為由精細到粗糙依次列出的6種LOD級別;其中圖a為33x33個頂點的LOD級,圖b為17x17個頂點的LOD級,圖c為9x9個頂點的LOD級,圖d為5x5個頂點的LOD級,圖e為3x3個頂點的LOD級,圖f為2x2個頂點的LOD級。圖3為實施方式中采用的世界坐標系。圖4為LOD級為3的地形塊,并列出了邊緣上頂點的(X,Y)坐標值。圖5為LOD級為3的地形塊中Z值改寫圖。 圖6為用四叉樹組織的整個原始地形圖。圖7為地形塊在Vertex Shader里進行頂點紋理采樣的過程。圖8為不同LOD級別的地形塊相鄰處產(chǎn)生T型裂縫的示意圖。 圖9為LOD級數(shù)為3的地形塊四條邊緣上的頂點位移圖。圖10為經(jīng)過位移后消除了 T型裂縫的不同LOD級別之間地形塊相鄰示意圖。
具體實施例方式以下將結(jié)合具體實施例對本發(fā)明提供的技術(shù)方案進行詳細說明,應(yīng)理解下述具體實施方式
僅用于說明本發(fā)明而不用于限制本發(fā)明的范圍。本地形渲染方法包括以下步驟
(I)首先,獲取原始地形圖像,原始地形的長和寬相等,將原始地形的長和寬均勻地分為2N個等分,即長和寬上均存在2n +1個頂點,這樣能夠?qū)⒄麄€地形劃分為2nx 2n個面積相等的地形塊(Block)。本例中如圖I中的左側(cè)圖所示,N取16,即整個地形被劃分為16x16=256個面積相等的地形塊(Block)。其中,每個地形塊的的長和寬均相等,地形塊的長和寬也可被分為2Mf等分,即長和寬上均存在2M +1個頂點;上述M彡0,N彡0,且M和N均為整數(shù)。通常情況下M取5,如圖I中右側(cè)圖所示,該地形塊可被分為32x 32個單元格,地形塊上存在33x 33個頂點。劃分之后,整個原始地形上存在(2N X 2m+1)x (2n X 2m+1)個頂點,在本例中為513x 513個頂點。(2)使用LOD地形繪制算法,創(chuàng)建不同LOD級別的頂點緩沖和索引緩沖。。每個地形塊共享一組以不同LOD級創(chuàng)建的頂點和索引緩沖。進行常規(guī)地形渲染時,地形塊尺寸通常為64mx64m,地形塊由精細到粗燥依次可分為如圖2所示的33x33,17x17,9x9,5x5,3x3,2x2共計6個LOD級。由精細到粗糙,將LOD級別依次設(shè)為0 5級,即33x33個頂點的LOD級為0級,17x17個頂點的LOD級為I級,9x9個頂點的LOD級為2級,5x5個頂點的LOD級為3級,3x3個頂點的LOD級為4級,2x2個頂點的LOD級為5級。當(dāng)頂點數(shù)為33x33時,地形塊被分為32x32個單元格,頂點數(shù)為2x2時,整個地形塊為I個單元格,由于這些地形塊大小相等,頂點越多,也就意味著地形塊被劃分得越精細,因此LOD為0表示最精細的細節(jié)層次,級數(shù)越大越粗燥。每個LOD級對應(yīng)一個頂點緩沖和索引緩沖,地形塊基于不同的LOD級時相應(yīng)的頂點坐標被寫入該LOD級下的頂點緩沖中。創(chuàng)建頂點緩沖時,要寫入每個頂點的位置,定義世界坐標系為如圖3所示X軸朝前,Y軸朝右,Z軸朝上的左手坐標系。如圖4所示,每個頂點的(X,Y)取值均在(0,0) (1,I)之間,而Z值一般取值為O。一個33x33的地形塊,將LOD級為0級時相應(yīng)的如下頂點的(X,Y,Z)坐標(0,0,0), (1/32,0,0), (2/32,0,0) ...... (1,0,0);
(0,1/32,0),(1/32,1/32,0),(2/32,1/32,0) ...... (I, 1/32, 0);
(0,2/32,0),(1/32,2/32,0),(2/32,2/32,0) ...... (I, 2/32, 0);
(0,1,0), (1/32,1,0), (2/32,1,0) ...... (I, 1,0); 寫入該LOD級下的頂點緩沖中;
將LOD級為I級時相應(yīng)的如下頂點坐標
(0,0,0), (1/16,0,0), (2/16,0,0) ...... (1,0,0);
(0,1/16,0),(1/16,1/16,0),(2/16,1/16,0) ...... (I, 1/16,0);
(0,2/16,0),(1/16,2/16,0), (2/16,2/16,0) ...... (I, 2/16,0);
(0,1,0), (1/16,1,0), (2/16,1,0) ...... (I, 1,0);
寫入該LOD級下的頂點緩沖中;
將LOD級為2級時相應(yīng)的如下頂點坐標
(0,0,0), (1/8,0,0), (2/8,0,0) ...... (1,0,0);
(0,1/8,0), (1/8,1/8,0), (2/8,1/8,0) ...... (I, 1/8,0); (0,2/8,0),( 1/8,2/8,0),(2/8,2/8,0) ...... (I, 2/8, 0);
(0,1,0), (1/8,1,0), (2/8,1,0)……(I, 1,0);
寫入該LOD級下的頂點緩沖中;
將LOD級為3級時相應(yīng)的如下頂點坐標
(0,0,0), (1/4,0,0), (2/4,0,0), (3/4,0,0), (1,0,0);
(0,1/4,0), ( 1/4,1/4,0),(2/4,1/4,0),(3/4,1/4,0),(I, 1/4,0);
(0,2/4,0), (1/4,2/4,0),(2/4,2/4,0),(3/4,2/4,0),(I, 2/4,0);
(0,3/4,0), (1/4,3/4,0),(2/4,3/4,0),(3/4,3/4,0),(I, 3/4,0);
(0,1,0), (1/4,1,0), (2/4,1,0), (3/4,1,0), (I, 1,0);
寫入該LOD級下的頂點緩沖中;
將LOD級為4級時相應(yīng)的如下頂點坐標
(0,0,0), (1/2,0,0), (1,0,0);
(0,1/2,0),(1/2,1/2,0),(1,1/2,0);
(0,1,0), (1/2,1,0), (1,1,0);
寫入該LOD級下的頂點緩沖中;
將LOD級為5級時相應(yīng)的如下頂點坐標
(0,0,0), (1,0,0); (0, 1,0), (I, 1,0);
寫入該LOD級下的頂點緩沖中。標記地形塊邊緣的Z值
改寫所有LOD級下頂點緩沖中地形塊邊緣上的的頂點的Z值,邊緣以外的頂點Z值不變。每個地形塊有四條邊緣,即左邊緣、上邊緣、右邊緣和下邊緣。地形塊每個邊緣上的頂點由O開始編號,編號為奇數(shù)的那個索引需要標記出來。以下通過改寫LOD級別為3級的地形塊頂點為例詳述標記過程,各邊緣頂點編號如圖5所示,具體標記方式為將地形塊左邊緣編號為奇數(shù)的頂點Z值改寫為I,地形塊上邊緣編號為奇數(shù)的頂點Z值改寫為2,地形塊右邊緣編號為奇數(shù)的頂點Z值改寫為3,地形塊下邊緣編號為奇數(shù)的頂點Z值改寫為4。即LOD級別為3級時的頂點緩沖坐標變?yōu)?br> (0,0,0), (1/4,0, I), (2/4,0,0), (3/4,0, I), (1,0,0);
(0,1/4,4), ( 1/4,1/4,0),(2/4,1/4,0),(3/4,1/4,0),(I, 1/4,2);
(0,2/4,0), (1/4,2/4,0),(2/4,2/4,0),(3/4,2/4,0),(I, 2/4,0);
(0,3/4,4), ( 1/4,3/4,0),(2/4,3/4,0),(3/4,3/4,0),(I, 3/4,2);
(0,1,0), (1/4,1,3), (2/4,1,0), (3/4,1,3),(I, 1,0);
創(chuàng)建索引緩沖,將地形塊中劃分的每個單元格分為兩個三角形,將組成三角形的各個頂點編號寫入索引緩沖中。(3)用四叉樹組織整個原始地形,每個葉子節(jié)點對應(yīng)一個地形塊,如圖6所示,圖中圓圈圈出小塊為葉子節(jié)點,同時代表了實際的一個地形塊。(4)渲染地形。使用視錐體與四叉樹遞歸計算后快速剔除不可見節(jié)點,從而獲取一組可視地形塊,即獲得一個可視化地形塊列表用于渲染,根據(jù)視點到地形塊中心的水平距離計算出各地形塊的LOD級數(shù)。視點到地形塊中心的水平距離除以一個常規(guī)距離常數(shù)然后再取整,獲得的整數(shù)值即為LOD級數(shù),所述常規(guī)距離常數(shù)通常取400m,該距離常數(shù)也可以根據(jù)實際需求進行調(diào)整。針對每個可視地形塊計算出的LOD級數(shù)所對應(yīng)的頂點和索引緩沖,再進行三角形列表圖元的渲染。這里的渲染步驟之前,還包括將地形塊的每個頂點平移和縮放到世界空間中去的步驟。(5)利用GPU進行Vertex Shader編程,如圖7所示,使用頂點紋理采樣功能從高度圖獲取地形塊頂點的高度值。(6)根據(jù)步驟(5)中獲得的高度值修改頂點緩沖中各頂點的高度值
當(dāng)頂點的Z值在步驟(2)中未被改寫,即Z = 0時,將Z值修改為通過頂點紋理采樣功能獲得的高度值。當(dāng)頂點的Z值在步驟(2)中已被改寫,即Z古0時,且該地形塊與相鄰地形塊之間的LOD級別一樣時,將Z值同樣修改為通過頂點紋理采樣功能獲得的高度值。當(dāng)相鄰地形塊之間的LOD級別不一樣時,由于LOD級別較低的地形塊邊緣頂點無法與級別較高的地形塊邊緣重合,不同LOD級別的地形塊相鄰處由此出現(xiàn)的三角形真空區(qū)域即為T型裂縫,圖8展示出了 3級地形塊與4級地形塊之間產(chǎn)生的T型裂縫。由于地形塊邊長小于常規(guī)距離常數(shù),因此采用上述方法計算出的相鄰地形塊LOD級別之差不會大于1,即可保證只會出現(xiàn)如圖這種T型的裂縫。若要消除上述裂縫,需要將不同LOD級別的地形塊中,LOD級別較低即精細度較高的地形塊邊緣編號為奇數(shù)的頂點坐標進行位移,具體地說,是將地形塊左邊緣中編號為奇數(shù)的頂點向上移一個,即將左邊緣編號為奇數(shù)的頂點坐標值修改為該頂點上方的頂點坐標值;將地形塊上邊緣中編號為奇數(shù)的頂點向左移一個,即將上邊緣編號為奇數(shù)的頂點坐標值修改為該頂點左方頂點的坐標值;將地形塊右邊緣中編號為奇數(shù)的頂點向下移一個,即將右邊緣編號為奇數(shù)的頂點坐標值修改為該頂點下方的頂點坐標值;將地形塊下邊緣中編號為奇數(shù)的頂點右移一個,即將編號為奇數(shù)的頂點坐標值修改為該頂點右方的頂點坐標值。以圖9所示的3級LOD地形為例,按照圖中箭頭所示方向進行位移,具體過程為將3級地形塊左邊緣中編號為奇數(shù)的頂點上移一個,即將編號為I的頂點的坐標值修改為左邊緣上編號為0的頂點的坐標值,將編號為3的頂點的坐標值修改為左邊緣上編號為2的頂點的坐標值;將3級地形塊上邊緣中編號為奇數(shù)的頂點左移一個,即將編號為I的頂點的坐標值修改為上邊緣上編號為0的頂點的坐標值,將編號為3的頂點的坐標值修改為上邊緣上編號為2的頂點的坐標值;將3級地形塊右邊緣中編號為奇數(shù)的頂點下移一個,即將編號為I的頂點值修改為右邊緣上編號為2的頂點值,將編號為3的頂點值修改為右邊緣上編號為4的頂點值;將3級地形塊下邊緣中編號為奇數(shù)的頂點右移一個,即將編號為I 的頂點值修改為下邊緣上編號為2的頂點值,將編號為3的頂點值修改為下邊緣上編號為4的頂點值。上述改寫頂點值的過程中,X值,Y值,Z值都要進行位移改寫。經(jīng)過位移之后由圖10可見,原3級地形塊邊緣編號為奇數(shù)的點被“抹平”,3級地形塊邊緣的頂點可以與4級地形塊邊緣頂點重合,從而有效地消除了如圖8所示LOD過程中出現(xiàn)的T型裂縫。本發(fā)明方案所公開的技術(shù)手段不僅限于上述技術(shù)手段所公開的技術(shù)手段,還包括由以上技術(shù)特征任意組合所組成的技術(shù)方案。
權(quán)利要求
1.一種基于圖形處理器加速的地形渲染方法,其特征在于包括以下步驟 (1)將整個原始地形劃分為2Nx2N個面積相等的地形塊(Block);每個地形塊的的長和寬均相等,地形塊被分為2M x2M個面積相等的單元格;其中,M彡0,N彡0,且M和N均為整數(shù); (2)使用LOD地形繪制算法,創(chuàng)建不同LOD級別的頂點緩沖和索引緩沖; LOD級別分為0級,I級……M級,共有M+1級,在不同LOD級別下創(chuàng)建相應(yīng)的頂點緩沖和索引緩沖,所有地形塊共享一組頂點緩沖和索弓I緩沖; (3)用四叉樹組織整個原始地形,每個葉子節(jié)點對應(yīng)一個地形塊; (4)渲染地形; (5)利用GPU進行VertexShader編程,使用頂點紋理采樣功能從高度圖獲取地形塊頂點的高度值; (6 )根據(jù)步驟(5 )中獲得的高度值修改頂點緩沖中各頂點的高度值,當(dāng)相鄰地形塊之間的LOD級別不一樣時,對LOD級別較低的地形塊邊緣頂點坐標進行位移。
2.根據(jù)權(quán)利要求I所述的基于圖形處理器加速的地形渲染方法,其特征在于所述步驟(2)中創(chuàng)建頂點緩沖的過程包括將不同LOD級下每個頂點的位置寫入頂點緩沖中,改寫地形塊邊緣編號為奇數(shù)的頂點的Z值,所述編號自邊緣末端由0開始。
3.根據(jù)權(quán)利要求2所述的基于圖形處理器加速的地形渲染方法,其特征在于所述改寫地形塊邊緣Z值的過程具體包括將地形塊左邊緣編號為奇數(shù)的頂點Z值改寫為1,地形塊上邊緣編號為奇數(shù)的頂點Z值改寫為2,地形塊右邊緣編號為奇數(shù)的頂點Z值改寫為3,地形塊下邊緣編號為奇數(shù)的頂點Z值改寫為4。
4.根據(jù)權(quán)利要求3所述的基于圖形處理器加速的地形渲染方法,其特征在于所述步驟(6)中的具體操作步驟如下 當(dāng)頂點的Z值在步驟(2)中未被改寫時,將Z值修改為通過頂點紋理采樣功能獲得的高度值; 當(dāng)頂點的Z值在步驟(2)中已被改寫且該地形塊與相鄰地形塊之間的LOD級別一樣時,將Z值修改為通過頂點紋理采樣功能獲得的高度值; 當(dāng)頂點的Z值在步驟(2)中已被改寫且相鄰地形塊之間的LOD級別不一樣時,對LOD級別較低的地形塊邊緣編號為奇數(shù)的頂點坐標進行位移。
5.根據(jù)權(quán)利要求4所述的基于圖形處理器加速的地形渲染方法,其特征在于所述對LOD級別較低的地形塊邊緣編號為奇數(shù)的頂點坐標進行位移的過程包括將地形塊左邊緣編號為奇數(shù)的頂點坐標值修改為該頂點上方的頂點坐標值;將地形塊上邊緣編號為奇數(shù)的頂點坐標值修改為該頂點左方頂點的坐標值;將地形塊右邊緣編號為奇數(shù)的頂點坐標值修改為該頂點下方的頂點坐標值;將地形塊下邊緣編號為奇數(shù)的頂點坐標值修改為該頂點右方的頂點坐標值。
6.根據(jù)權(quán)利要求I 5中任意一項所述的基于圖形處理器加速的地形渲染方法,其特征在于所述步驟(4)中渲染地形的過程包括使用視錐體與四叉樹遞歸計算后快速剔除不可見節(jié)點,從而獲取一組可視地形塊,根據(jù)視點到地形塊中心的水平距離計算出各地形塊的LOD級數(shù);針對每個可視地形塊計算出的LOD級數(shù)所對應(yīng)的頂點和索引緩沖,再進行三角形列表圖元的渲染。
全文摘要
本發(fā)明公開了一種基于圖形處理器實現(xiàn)的算法,不僅能夠有效消除地形LOD渲染過程中出現(xiàn)的T型裂縫問題,由于基于圖形處理器進行計算,節(jié)省了CPU的運算資源,提升了CPU的處理性能。本發(fā)明能夠在僅支持Direct3D9的計算機上高質(zhì)量高性能的渲染大規(guī)模地形,可以廣泛應(yīng)用于3D游戲和虛擬現(xiàn)實應(yīng)用程序中。本發(fā)明包括以下步驟將原始地形圖像劃分為多個面積相等的地形塊;使用LOD地形繪制算法,創(chuàng)建不同LOD級別的頂點緩沖和索引緩沖;用四叉樹組織整個原始地形,每個葉子節(jié)點對應(yīng)一個地形塊;渲染地形;利用GPU進行VertexShader編程,使用頂點紋理采樣功能從高度圖獲取地形塊頂點的高度值;修改頂點的高度值。
文檔編號G06T15/00GK102750725SQ20121018214
公開日2012年10月24日 申請日期2012年6月5日 優(yōu)先權(quán)日2012年6月5日
發(fā)明者張子龍 申請人:南京安訊網(wǎng)絡(luò)服務(wù)有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1