專利名稱:一種3d地形渲染方法和渲染裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及3維(3D )技術(shù)領(lǐng)域,特別涉及一種3D地形渲染方法和渲 染裝置。
背景技術(shù):
3D地形渲染是指對(duì)3D模型化的地形進(jìn)行著色、頂點(diǎn)變換、貼圖等操 作。在3D地形渲染中,為了減輕渲染的處理負(fù)擔(dān),出現(xiàn)了一種細(xì)節(jié)層次 (LOD, Level Of Detail)技術(shù)。LOD技術(shù)將地形渲染劃分為多種不同精細(xì) 級(jí)別,離視點(diǎn)較近即視距較小的地形使用較高的細(xì)節(jié)進(jìn)行渲染,離視點(diǎn)較遠(yuǎn) 即視距較大的地形使用較低的細(xì)節(jié)渲染。
在3D地形渲染中, 一般是先把完整地形分成等大的小地形塊,每個(gè)地 形塊根據(jù)其平面網(wǎng)格模型和頂點(diǎn)數(shù)據(jù)來(lái)進(jìn)行渲染。平面網(wǎng)格模型是一個(gè)類似 圍棋棋盤的格子模型,網(wǎng)格中每個(gè)交點(diǎn)都具有一組頂點(diǎn)數(shù)據(jù),頂點(diǎn)數(shù)據(jù)中包
含高度、亮度、色度等數(shù)值。平面網(wǎng)格模型越精細(xì),網(wǎng)格中包含的頂點(diǎn)越多, 細(xì)節(jié)越高。例如16x16、 8x8、 4x4、 2x2、 lxl的不同精細(xì)程度的平面網(wǎng)才各 ;漠型可以對(duì)應(yīng)0~4共5種不同的LOD級(jí)別。
現(xiàn)有的3D地形渲染時(shí),首先要加載預(yù)先編輯好的完整地形中所有地形 塊的各種LOD級(jí)別下的平面網(wǎng)格模型和相應(yīng)的頂點(diǎn)數(shù)據(jù),然后根據(jù)地形塊 的視距計(jì)算出在該視點(diǎn)下每個(gè)地形塊的LOD級(jí)別,并根據(jù)LOD級(jí)別,選用 對(duì)應(yīng)的平面網(wǎng)格模型及相應(yīng)的頂點(diǎn)數(shù)據(jù)對(duì)地形塊進(jìn)行渲染。這種預(yù)先編輯好 平面網(wǎng)格模型和相應(yīng)的頂點(diǎn)數(shù)據(jù)的渲染方法又可稱為靜態(tài)LOD渲染。
同一個(gè)地形塊的LOD級(jí)別是隨著視距的變化而變化的,視距越大其 LOD級(jí)別越低,視距越小其LOD級(jí)別越高,以平衡視覺(jué)效果與計(jì)算量。但是,由于同一個(gè)地形塊的不同的LOD級(jí)別對(duì)應(yīng)的平面網(wǎng)格模型和頂點(diǎn)數(shù)據(jù) 是不同的,當(dāng)LOD級(jí)別變化時(shí),該地形塊的頂點(diǎn)高度、亮度、色度等參數(shù) 將會(huì)發(fā)生突變,使渲染出來(lái)的地形塊的幾何形態(tài)、光照、顏色等可能會(huì)突然 改變,從而使渲染出來(lái)的3D地形產(chǎn)生明顯的地形"跳動(dòng)"現(xiàn)象,嚴(yán)重影響 渲染效果。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例提供一種3D地形渲染方法,可以消除地形"跳動(dòng)"現(xiàn)象。 本發(fā)明實(shí)施例提供一種3D地形渲染裝置,可以消除地形"跳動(dòng),,現(xiàn)象。 為達(dá)到上述目的,本發(fā)明的技術(shù)方案具體是這樣實(shí)現(xiàn)的 一種3D ;也形渲染方法,該方法包4舌 根據(jù)碎見(jiàn)距確定地形塊當(dāng)前的層次細(xì)節(jié)LOD級(jí)別;
根據(jù)視距和預(yù)設(shè)的所述地形塊當(dāng)前LOD級(jí)別對(duì)應(yīng)的漸變區(qū)間計(jì)算漸變 參數(shù),使用漸變參數(shù)對(duì)所述地形塊的頂點(diǎn)高度值進(jìn)行修正;
選取比所述地形塊當(dāng)前LOD級(jí)別高一精度級(jí)別的網(wǎng)格模型并使用所述 修正后的頂點(diǎn)高度值對(duì)地形塊進(jìn)行渲染。
一種3D地形渲染裝置,該裝置包括
LOD確定模塊,用于根據(jù)視距確定地形塊當(dāng)前的LOD級(jí)別; 數(shù)據(jù)修正模塊,用于根據(jù)視距和預(yù)設(shè)的所述地形塊當(dāng)前LOD級(jí)別對(duì)應(yīng)
的漸變區(qū)間計(jì)算漸變參數(shù),使用漸變參數(shù)對(duì)所述地形塊的頂點(diǎn)高度值進(jìn)行修
正;
渲染模塊,與所述數(shù)據(jù)修正模塊和LOD確定模塊相連,用于選取比所 述LOD確定模塊確定的地形塊當(dāng)前LOD級(jí)別高 一精度級(jí)別的網(wǎng)格模型并使 用所述數(shù)據(jù)修正模塊修正后的頂點(diǎn)高度值對(duì)地形塊進(jìn)行渲染。
由上述的技術(shù)方案可見(jiàn),本發(fā)明的3D地形渲染方法和裝置,根據(jù)視距 確定地形塊當(dāng)前的層次細(xì)節(jié)LOD級(jí)別;根據(jù)視距和預(yù)設(shè)的所述地形塊當(dāng)前 LOD級(jí)別對(duì)應(yīng)的漸變區(qū)間計(jì)算漸變參數(shù),使用漸變參數(shù)對(duì)所述地形塊的頂
6點(diǎn)高度值進(jìn)行修正;選取比所述地形塊當(dāng)前LOD級(jí)別高一精度級(jí)別的網(wǎng)格 模型并使用所述修正后的頂點(diǎn)高度值對(duì)地形塊進(jìn)行渲染。該方法和裝置使修 正后的地形塊數(shù)據(jù)根據(jù)視點(diǎn)變化而連續(xù)變化,即使地形塊的LOD級(jí)別發(fā)生 變化,也不會(huì)產(chǎn)生地形"跳動(dòng)"現(xiàn)象,另外,通過(guò)使用頂點(diǎn)著色器Vertex Shader 實(shí)現(xiàn)地形塊數(shù)據(jù)的動(dòng)態(tài)修正,渲染效率很高。
圖1為本發(fā)明實(shí)施例的3D地形渲染方法流程圖2為高精度地形塊模擬低精度地形塊的原理示意圖3為本發(fā)明實(shí)施例的3D地形渲染裝置示意圖4為本發(fā)明實(shí)施例的LOD確定模塊具體結(jié)構(gòu)示意圖5為本發(fā)明實(shí)施例的數(shù)據(jù)修正模塊具體結(jié)構(gòu)示意圖。
具體實(shí)施例方式
為使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉 實(shí)施例,對(duì)本發(fā)明進(jìn)一步詳細(xì)說(shuō)明。
本發(fā)明主要是采用比地形塊的當(dāng)前LOD級(jí)別高 一精度級(jí)別的LOD級(jí)別 對(duì)應(yīng)的地形塊數(shù)據(jù),通過(guò)連續(xù)漸變方式對(duì)地形塊進(jìn)行渲染,使用高精度的地 形塊模型模擬低精度的地形塊,當(dāng)高精度的地形塊和低精度的地形塊的形態(tài) 完全一樣時(shí),地形塊的LOD級(jí)別才變?yōu)榈途取?br>
圖1為本發(fā)明實(shí)施例的3D地形渲染方法流程圖,如圖1所示,該流程 包括
步驟101,才艮據(jù)^L距確定地形塊當(dāng)前的LOD級(jí)別。
確定LOD級(jí)別的具體方法可以為預(yù)先為每個(gè)LOD級(jí)別設(shè)置一個(gè)漸變 區(qū)間,通過(guò)判斷地形塊的視距落在哪個(gè)漸變區(qū)間內(nèi),確定該地形塊的LOD 級(jí)別。例如預(yù)先設(shè)置0 100的視距為L(zhǎng)OD0級(jí),也就是最高精度,101 200 的視距為1級(jí),201~300為2級(jí),以此類推;具體LOD級(jí)別分為多少級(jí),每級(jí)的漸變區(qū)間任意。當(dāng)然,確定LOD級(jí)別還可以采用現(xiàn)有其他方式,這
里不再贅述了。
步驟102,才艮據(jù)浮見(jiàn)距和預(yù)i殳的所述地形塊當(dāng)前LOD級(jí)別對(duì)應(yīng)的漸變區(qū) 間計(jì)算漸變參數(shù),使用漸變參數(shù)對(duì)所述地形塊的頂點(diǎn)高度值進(jìn)行修正。
對(duì)地形塊的渲染需要用到多種數(shù)據(jù),例如頂點(diǎn)數(shù)據(jù)中的頂點(diǎn)高度值、頂 點(diǎn)亮度值、頂點(diǎn)色度值等,其中頂點(diǎn)高度值用于3D地形的幾何形態(tài)的渲染, 也是產(chǎn)生圖像"跳動(dòng)"的主要因素,因此這里以頂點(diǎn)高度值的修正為例。漸 變參數(shù)的計(jì)算和具體的數(shù)值修正方法將在下文中詳細(xì)描述。
步驟103,選取比所述地形塊當(dāng)前LOD級(jí)別高一精度級(jí)別的網(wǎng)格模型 并使用所述修正后的頂點(diǎn)高度值對(duì)地形塊進(jìn)行渲染。
由于現(xiàn)有的靜態(tài)LOD渲染方法中,每個(gè)地形塊在所有LOD級(jí)別下的地 形數(shù)據(jù)都是預(yù)先編輯好的,在進(jìn)行3D地形渲染前,這些地形塊數(shù)據(jù)都要載 入到緩沖中。本步驟中,將調(diào)用高一精度級(jí)別LOD,即更高精度的地形塊 網(wǎng)格模型來(lái)模擬確定的地形塊,當(dāng)然,如果當(dāng)前地形塊的LOD級(jí)別已經(jīng)是 最高級(jí)了,那么調(diào)用的還是最高級(jí)的網(wǎng)格模型。本步驟中的渲染仍然采用任 意現(xiàn)有技術(shù)即可,只是用于渲染的頂點(diǎn)高度值需要使用修正后的數(shù)值。
下面將詳細(xì)闡述本發(fā)明的原理及漸變參數(shù)的計(jì)算和具體的數(shù)值修正方法。
圖2為高精度地形塊模擬低精度地形塊的原理示意圖,如圖2所示一 個(gè)高精度地形塊(圖2中為一個(gè)精度4x4的地形塊),其中虛線部分的頂點(diǎn) 高度在精度4x4時(shí)為Hl,而當(dāng)?shù)匦螇K精度變?yōu)?x2時(shí)其高度為H2,現(xiàn)有地 形渲染方法中,當(dāng)該地形塊的LOD級(jí)別變化時(shí),虛線部分的頂點(diǎn)高度將會(huì) 發(fā)生突變,而本發(fā)明實(shí)施例中,通過(guò)一個(gè)漸變過(guò)程,讓其高度H1改變到H2 是漸變完成的,觀察者就不會(huì)感到明顯的突變了。具體實(shí)現(xiàn)時(shí),本發(fā)明實(shí)施 例中預(yù)先為每一個(gè)LOD級(jí)別設(shè)置一個(gè)漸變區(qū)間,然后根據(jù)4!U巨和漸變區(qū)間 計(jì)算一個(gè)漸變參數(shù)t,其取值范圍為
,然后根據(jù)這個(gè)漸變參數(shù)對(duì) Hl進(jìn)行修正,修正后的頂點(diǎn)高度值H為
8H = H1十(H2-Hl)x t;
其中,H為修正后的地形塊數(shù)據(jù)中的頂點(diǎn)高度值,Hl為高精度時(shí)的頂 點(diǎn)高度值,H2為低精度時(shí)的頂點(diǎn)高度值;t為漸變參數(shù)。 其中漸變參數(shù)t的計(jì)算方法可以為 t= ( S-S0) /Sl;
其中,t為漸變參數(shù),S為地形塊與視點(diǎn)的距離,SO為低精度時(shí)地形塊 所設(shè)置的漸變區(qū)間的起始值,Sl為漸變區(qū)間中起始值和終止值之間的差值 也就是漸變區(qū)間的區(qū)間范圍。
例如設(shè)置視距為0 100時(shí)LOD級(jí)別為0即精度為16x16,視距為 100-200時(shí)LOD級(jí)別為1,其精度為8x8,那么當(dāng)其漸變參數(shù)t在視距為150 時(shí)的值t = ( 150-100 ) / ( 200-100 ) = 0.5。這里還要注意一點(diǎn)就是要保證LOD 級(jí)別的下一級(jí)和上一級(jí)之間所設(shè)置的漸變區(qū)間的端點(diǎn)值應(yīng)該能連接上,即所 有LOD級(jí)別之間設(shè)置的漸變區(qū)間是連續(xù)的不應(yīng)有間隔。設(shè)置漸變區(qū)間兩端 的端點(diǎn)zf直可以相同,如果相同,則在確定LOD級(jí)別時(shí),可以^l奪LOD級(jí)別確 定為精細(xì)程度高的。
上述漸變參數(shù)和定點(diǎn)高度值的修正公式是原理公式,對(duì)于上述原理公式 的各種變形公式也是可以實(shí)現(xiàn)的,其原理是利用漸變參數(shù)對(duì)定點(diǎn)高度值進(jìn)行 修正,其他利用該原理設(shè)計(jì)的具體公式還有很多,這里就不——贅述了。
另外,在本發(fā)明實(shí)施例的具體實(shí)現(xiàn)時(shí),因?yàn)榈匦螇K的模型在事先已經(jīng)構(gòu) 建好了,其中頂點(diǎn)高度值等已經(jīng)事先存到頂點(diǎn)緩沖內(nèi),那么在具體進(jìn)行地形 渲染時(shí),可以把修正高度值的計(jì)算放到顯卡的Vertex Shader去做,由于現(xiàn) 有顯卡的頂點(diǎn)處理能力非常強(qiáng),多計(jì)算一下高度值,對(duì)渲染速度幾乎沒(méi)有影 響,從而達(dá)到較高的渲染效率。具體使用Vertex Shader實(shí)現(xiàn)定點(diǎn)高度值修 正的方法i口下
因?yàn)樵赩ertex Shader內(nèi) 一次能同時(shí)處理4個(gè)浮點(diǎn)數(shù),因此可以把地形 的LOD級(jí)別設(shè)置為0~4共5級(jí),級(jí)別數(shù)字越小表示精度越高。LOD級(jí)別變 換時(shí)最多只能變換l級(jí),也就是說(shuō)LOD級(jí)別變換總共有0~1, 1~2, 2 3,3~4。其中0為最高精度,4為最低精度。設(shè)最低精度時(shí)變?yōu)閘xl的網(wǎng)格, 那么最高精度的網(wǎng)格應(yīng)該是16x16。所以需要事先把地形分為16x16的小地 形塊,同時(shí)在存儲(chǔ)頂點(diǎn)數(shù)據(jù)時(shí),除了頂點(diǎn)高度值外,還要存儲(chǔ)0~1, 1 2, 2~3, 3~4,四個(gè)LOD級(jí)別變換的高度差,用于在Vertex Shader內(nèi)最后計(jì)算 高度值。頂點(diǎn)的高度差值,用一個(gè)32位的浮點(diǎn)數(shù)就可以存儲(chǔ)。
在頂點(diǎn)緩沖數(shù)據(jù)準(zhǔn)備好后,在Vertex Shader計(jì)算前還需要兩個(gè)參數(shù) MorphStart和MorphRange。其中MorphStart表示漸變區(qū)間的起始值,相當(dāng) 于上述的S0, MorphRange表示漸變區(qū)間的區(qū)間范圍,相當(dāng)于上述的SI 。這 兩個(gè)參數(shù)都是一個(gè)4維的向量,用來(lái)描述4個(gè)LOD級(jí)別的變換。
最后在Vertex Shader內(nèi)計(jì)算頂點(diǎn)的高度值的^^式如下
首先計(jì)算4種LOD級(jí)別變換時(shí)的漸變參數(shù)
float4 morph = saturate((viewDist — MorphStart)/MorphRange);
其中,float4 morph表示4種LOD級(jí)別變換時(shí)的漸變參數(shù),viewDist為 視距,MorphStart為所述漸變區(qū)間的起始值,MorphRange為所述漸變區(qū)間 的區(qū)間范圍;saturate函數(shù)的功能是把取值范圍限制在閉區(qū)間
內(nèi)。
然后計(jì)算4種LOD級(jí)別變換時(shí)的修正值,并以最高精度的頂點(diǎn)高度值 為基準(zhǔn),與4個(gè)修正值進(jìn)行疊加,得到頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后 的高度值
float height = h0 + dot(moprh, hDiff);
其中,float height表示頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后的高度值, h0為最高精度LOD級(jí)別的頂點(diǎn)高度值,moprh為漸變參數(shù),hDiff為L(zhǎng)OD 級(jí)別變換時(shí)的頂點(diǎn)高度差,可以取上述0 1, 1~2, 2~3, 3~4,四個(gè)精度變 換的高度差,dot函數(shù)的功能是將m叩rh和hDiff做點(diǎn)積計(jì)算,相當(dāng)于 morph.xxhDiff.x+moprh.yxhDiff.y+morph.zxhDiff.z+morph.wxhDiff.w, 即 4 組morph值與hDiff值分別相乘后再相加。
上述公式的含義和原理與步驟103中描述的漸變參數(shù)和對(duì)頂點(diǎn)高度值 的1奮正7>式實(shí)際上是一樣的,只不過(guò)具體在Vertex Shader內(nèi)實(shí)現(xiàn)時(shí),采用了高度值疊加修正的方式,即分別計(jì)算頂點(diǎn)在4種LOD級(jí)別變換時(shí)的漸變 參數(shù)和修正值,并以最高精度LOD級(jí)別的頂點(diǎn)高度值為基準(zhǔn),與4個(gè)修正 值進(jìn)行疊加,得到頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后的高度值。
以進(jìn)行LOD級(jí)別1~2的變換為例,此時(shí)視距是落在LOD級(jí)別2的漸變 區(qū)間之間,此時(shí)分別計(jì)算4種精度變換時(shí)的morph值,即(viewDist _ MorphStart)/MorphRange,最終float4 morph的結(jié)果將為(1, t, 0, 0 ),其中 1為0 1變4臭時(shí)的morph ^直,t為1~2變4灸時(shí)的morph ^f直,之后分別是2~3 及3~4變換時(shí)的morph值。2~3, 3~4變換時(shí),由于一見(jiàn)距小于LOD級(jí)別3和 4的漸變區(qū)間,即(viewDist — MorphStart)為負(fù)數(shù),經(jīng)過(guò)saturate函數(shù)處理后 morph值變?yōu)?,而0~1時(shí),viewDist大于LOD級(jí)別0的漸變區(qū)間,因此 (viewDist - MorphStart)/MorphRange的Y直大于1,經(jīng)過(guò)saturate函凄史處^里后 morph值變?yōu)?,然后使用dot函數(shù)進(jìn)行運(yùn)算,即4種精度變換時(shí)的頂點(diǎn)高 度差hDiff分別與其對(duì)應(yīng)的morph值相乘后再相加,得到當(dāng)前-見(jiàn)距下,4種 精度變換疊加的修正值,再與最高精度的高度值相加,正好得到最后需要的 修正后的高度值。
上述的公式的巧妙之處在于將對(duì)4種精度變換時(shí)的參數(shù)修正計(jì)算進(jìn)行 了統(tǒng)一,無(wú)需考慮當(dāng)前變換為4種精度變換中的哪一種,且使用了現(xiàn)有的函 數(shù),因此在Vertex Shader中應(yīng)用時(shí)只需多出5條左右的指令,運(yùn)行效率很 高。當(dāng)然也可以采用對(duì)4種精度變換進(jìn)行判斷后再計(jì)算修正參數(shù)的方式實(shí) 現(xiàn)。
利用Vertex Shader計(jì)算漸變參數(shù)和對(duì)頂點(diǎn)高度值的修正時(shí),可以利用 現(xiàn)有函數(shù)實(shí)現(xiàn)上述原理公式的計(jì)算,本例僅為較佳的實(shí)施方式,其他實(shí)現(xiàn)上 述原理公式計(jì)算的方法還有很多,可以根據(jù)具體需要而定,這里就不再贅述 了。
圖3為本發(fā)明實(shí)施例的3D地形渲染裝置示意圖,如圖3所示,該裝置 包括
LOD確定模塊301,用于根據(jù)視距確定地形塊當(dāng)前的LOD級(jí)別;數(shù)據(jù)修正模塊302,用于根據(jù)視距和預(yù)設(shè)的所述地形塊當(dāng)前LOD級(jí)別 對(duì)應(yīng)的漸變區(qū)間計(jì)算漸變參數(shù),使用漸變參數(shù)對(duì)所述地形塊的頂點(diǎn)高度值進(jìn) 行修正;
渲染模塊303,與所述數(shù)據(jù)修正模塊302和LOD確定模塊301相連, 用于選取比所述LOD確定模塊301確定的地形塊當(dāng)前LOD級(jí)別高 一精度級(jí) 別的網(wǎng)格模型并使用所述數(shù)據(jù)修正模塊302修正后的頂點(diǎn)高度值對(duì)地形塊 進(jìn)行渲染。
圖4為本發(fā)明實(shí)施例的LOD確定模塊具體結(jié)構(gòu)示意圖,如圖4所示, 所述LOD確定模塊301包括
區(qū)間設(shè)置單元401 ,用于預(yù)先為每個(gè)LOD級(jí)別設(shè)置一個(gè)漸變區(qū)間;
LOD判定單元402,與所述區(qū)間設(shè)置單元401相連,通過(guò)判斷一見(jiàn)距所處 的漸變區(qū)間,確定該地形塊的LOD級(jí)別。
圖5為本發(fā)明實(shí)施例的數(shù)據(jù)修正模塊具體結(jié)構(gòu)示意圖,如圖5所示,所 述數(shù)據(jù)修正模塊302包括
漸變參數(shù)計(jì)算單元501,用于根據(jù)公式t二 (S-S0) /Sl計(jì)算漸變參數(shù);
其中,t為漸變參數(shù),S為視距,SO為所述漸變區(qū)間的起始值,Sl為所 述漸變區(qū)間的區(qū)間范圍;
高度修正單元502,與所述漸變參數(shù)計(jì)算單元501相連,用于根據(jù)公式 H=H1+ ( H2-H1 ) x t對(duì)地形塊的頂點(diǎn)高度值進(jìn)^^奮正;
其中,H為修正后的頂點(diǎn)高度值,HI為比所述地形塊當(dāng)前LOD級(jí)別高 一精度級(jí)別的LOD級(jí)別對(duì)應(yīng)的頂點(diǎn)高度值,H2為所述地形塊當(dāng)前LOD級(jí) 別對(duì)應(yīng)的頂點(diǎn)高度值;t為漸變參數(shù)。
較佳地,數(shù)據(jù)修正模塊302可以釆用頂點(diǎn)著色器實(shí)現(xiàn),例如所述LOD 級(jí)別分為5級(jí),共4種LOD級(jí)別變換;
漸變參數(shù)計(jì)算單元501具體可以根據(jù)公式float4 morph = saturate((viewDist — MorphStart)/MorphRange),計(jì)算頂點(diǎn)在4種LOD級(jí)別變 換時(shí)的漸變參數(shù);
12其中,float4 morph表示4種LOD級(jí)別變換時(shí)的漸變參數(shù),viewDist為 視距,MorphStart為所述漸變區(qū)間的起始值,MorphRange為所述漸變區(qū)間 的區(qū)間范圍;saturate函數(shù)是把耳又值范圍限制在閉區(qū)間
內(nèi);
高度修正單元502具體可以根據(jù)乂>式float height = h0 + dot(moprh, hDiff),計(jì)算4種LOD級(jí)別變換時(shí)的修正值,并以最高精度的頂點(diǎn)高度值為 基準(zhǔn),與4個(gè)修正值進(jìn)行疊加,得到頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后的 高度值;
其中,float height表示頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后的高度值, h0為最高精度LOD級(jí)別的頂點(diǎn)高度值,moprh為漸變參數(shù),hDiff為L(zhǎng)OD 級(jí)別變換時(shí)的頂點(diǎn)高度差,dot函數(shù)是將moprh和hDiff做點(diǎn)積計(jì)算。
本發(fā)明實(shí)施例的3D渲染裝置可以采用電腦或服務(wù)器等設(shè)備實(shí)現(xiàn),其中 各模塊可以集成于同一電腦或服務(wù)器內(nèi),具體地,頂點(diǎn)著色器可以采用顯卡 實(shí)現(xiàn)。
由上述的實(shí)施例可見(jiàn),本發(fā)明的這種3D地形渲染方法和裝置,根據(jù)視 距確定地形塊當(dāng)前的層次細(xì)節(jié)LOD級(jí)別;4艮據(jù)-見(jiàn)距和預(yù)設(shè)的所述地形塊當(dāng) 前LOD級(jí)別對(duì)應(yīng)的漸變區(qū)間計(jì)算漸變參數(shù),使用漸變參數(shù)對(duì)所述地形塊的 頂點(diǎn)高度值進(jìn)行修正;選取比所述地形塊當(dāng)前LOD級(jí)別高一精度級(jí)別的網(wǎng) 格模型并使用所述修正后的頂點(diǎn)高度值對(duì)地形塊進(jìn)行渲染。該方法和裝置使 ^uE后的地形塊數(shù)據(jù)根據(jù)視點(diǎn)變化而連續(xù)變化,即使地形塊的LOD級(jí)別發(fā) 生變化,也不會(huì)產(chǎn)生地形"跳動(dòng),,現(xiàn)象,另外,通過(guò)使用頂點(diǎn)著色器Vertex Shader實(shí)現(xiàn)地形塊數(shù)據(jù)的動(dòng)態(tài)修正,渲染效率很高。
所應(yīng)理解的是,以上所述僅為本發(fā)明的較佳實(shí)施方式而已,并不用于限 定本發(fā)明的保護(hù)范圍,凡在本發(fā)明的精神和原則之內(nèi),所做的任何修改、等 同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1、一種3D地形渲染方法,其特征在于,該方法包括根據(jù)視距確定地形塊當(dāng)前的層次細(xì)節(jié)LOD級(jí)別;根據(jù)視距和預(yù)設(shè)的所述地形塊當(dāng)前LOD級(jí)別對(duì)應(yīng)的漸變區(qū)間計(jì)算漸變參數(shù),使用漸變參數(shù)對(duì)所述地形塊的頂點(diǎn)高度值進(jìn)行修正;選取比所述地形塊當(dāng)前LOD級(jí)別高一精度級(jí)別的網(wǎng)格模型并使用所述修正后的頂點(diǎn)高度值對(duì)地形塊進(jìn)行渲染。
2、 如權(quán)利要求1所述的3D地形渲染方法,其特征在于,所述根據(jù)地形塊 與視點(diǎn)的距離確定地形塊的LOD級(jí)別包括預(yù)先為每個(gè)LOD級(jí)別設(shè)置一個(gè)漸變區(qū)間,通過(guò)判斷視距所處的漸變區(qū)間, 確定該地形塊的LOD級(jí)別。
3、 如權(quán)利要求2所述的3D地形渲染方法,其特征在于,所述漸變參數(shù)的 計(jì)算方法包括t= (S-SO) /SI;其中,t為漸變參數(shù),S為視距,SO為所述漸變區(qū)間的起始值,Sl為所述漸變區(qū)間的區(qū)間范圍。
4、 如權(quán)利要求3所述的3D地形渲染方法,其特征在于,所述使用漸變參 數(shù)對(duì)所述地形塊的頂點(diǎn)高度值進(jìn)行修正的方法包括H=H1+ ( H2-H1 ) x t;其中,H為修正后的頂點(diǎn)高度值,HI為比所述地形塊當(dāng)前LOD級(jí)別高一 精度級(jí)別的LOD級(jí)別對(duì)應(yīng)的頂點(diǎn)高度值,H2為所述地形塊當(dāng)前LOD級(jí)別對(duì)應(yīng) 的頂點(diǎn)高度值;t為漸變參數(shù)。
5、 如權(quán)利要求1~4所述的3D地形渲染方法,其特征在于,所述LOD級(jí) 別分為5級(jí),共4種LOD級(jí)別變換。
6、 如權(quán)利要求5所述的3D地形渲染方法,其特征在于,所述計(jì)算漸變參 數(shù)及對(duì)頂點(diǎn)高度值進(jìn)行修正采用頂點(diǎn)著色器Vertex Shader實(shí)現(xiàn),具體實(shí)現(xiàn)方法包括分別計(jì)算頂點(diǎn)在4種LOD級(jí)別變換時(shí)的漸變參數(shù)和修正值,并以最高精度 LOD級(jí)別的頂點(diǎn)高度值為基準(zhǔn),與4個(gè)修正值進(jìn)行疊加,得到頂點(diǎn)在當(dāng)前LOD 級(jí)別變換下修正后的高度值。
7、 如權(quán)利要求6所述的3D地形渲染方法,其特征在于,所述計(jì)算4種LOD 級(jí)別變換時(shí)的漸變參數(shù)采用以下公式float4 morph = saturate((viewDist — MorphStart)/MorphRange);其中,float4 morph表示4種LOD級(jí)別變換時(shí)的漸變參數(shù),viewDist為視 距,MorphStart為所述漸變區(qū)間的起始值,MorphRange為所述漸變區(qū)間的區(qū)間 范圍;saturate函數(shù)是把取值范圍限制在閉區(qū)間[O, l]內(nèi);所述計(jì)算4種LOD級(jí)別變換時(shí)的修正值,并以最高精度的頂點(diǎn)高度值為基 準(zhǔn),與4個(gè)修正值進(jìn)行疊加,得到頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后的高度值, 采用以下公式float height = h0 + dot(moprh, hDiff);其中,float height表示頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后的高度值,h0 為最高精度LOD級(jí)別的頂點(diǎn)高度值,moprh為漸變參數(shù),hDiff為L(zhǎng)OD級(jí)別變 換時(shí)的頂點(diǎn)高度差,dot函數(shù)是將moprh和hDiff做點(diǎn)積計(jì)算。
8、 一種3D地形渲染裝置,其特征在于,該裝置包括 LOD確定模塊,用于根據(jù)視距確定地形塊當(dāng)前的LOD級(jí)別; 數(shù)據(jù)修正模塊,用于根據(jù)視距和預(yù)設(shè)的所述地形塊當(dāng)前LOD級(jí)別對(duì)應(yīng)的漸變區(qū)間計(jì)算漸變參數(shù),使用漸變參數(shù)對(duì)所述地形塊的頂點(diǎn)高度值進(jìn)行修正;渲染模塊,與所述數(shù)據(jù)修正模塊和LOD確定模塊相連,用于選取比所述 LOD確定模塊確定的地形塊當(dāng)前LOD級(jí)別高一精度級(jí)別的網(wǎng)格模型并使用所 述數(shù)據(jù)修正模塊修正后的頂點(diǎn)高度值對(duì)地形塊進(jìn)行渲染。
9、 如權(quán)利要求8所述的3D地形渲染裝置,其特征在于,所述LOD確定 模塊包括區(qū)間設(shè)置單元,用于預(yù)先為每個(gè)LOD級(jí)別設(shè)置一個(gè)漸變區(qū)間;LOD判定單元,與所述區(qū)間設(shè)置單元相連,通過(guò)判斷視距所處的漸變區(qū)間,確定該地形塊的LOD級(jí)別。
10、 如權(quán)利要求9所述的3D地形渲染裝置,其特征在于,所述數(shù)據(jù)修正 模塊包括漸變參數(shù)計(jì)算單元,用于根據(jù)公式t = ( S-S0 ) /Sl計(jì)算漸變參數(shù);其中,t為漸變參數(shù),S為視距,S0為所述漸變區(qū)間的起始值,Sl為所述 漸變區(qū)間的區(qū)間范圍;高度修正單元,與所述漸變參數(shù)計(jì)算單元相連,用于根據(jù)公式H=H1+ (H2-H1 ) x t對(duì)地形塊的頂點(diǎn)高度值進(jìn)行修正;其中,H為修正后的頂點(diǎn)高度值,Hl為比所述地形塊當(dāng)前LOD級(jí)別高一 精度級(jí)別的LOD級(jí)別對(duì)應(yīng)的頂點(diǎn)高度值,H2為所述地形塊當(dāng)前LOD級(jí)別對(duì)應(yīng) 的頂點(diǎn)高度值;t為漸變參數(shù)。
11、 如權(quán)利要求IO所述的3D地形渲染裝置,其特征在于,所述數(shù)據(jù)修正 模塊為頂點(diǎn)著色器,所述LOD級(jí)別分為5級(jí),共4種LOD級(jí)別變換;所述漸變參數(shù)計(jì)算單元用于根據(jù)公式float4 morph = saturate((viewDist -MorphStart)/MorphRange),計(jì)算頂點(diǎn)在4種LOD級(jí)別變換時(shí)的漸變參數(shù);其中,float4 morph表示4種LOD級(jí)別變換時(shí)的漸變參數(shù),viewDist為視 距,MorphStart為所述漸變區(qū)間的起始值,MorphRange為所述漸變區(qū)間的區(qū)間 范圍;saturate函數(shù)是^>取值范圍限制在閉區(qū)間
內(nèi);所述高度修正單元用于根據(jù)公式float height ^hO + dot(m叩rh,hDiff),計(jì) 算4種LOD級(jí)別變換時(shí)的修正值,并以最高精度的頂點(diǎn)高度值為基準(zhǔn),與4 個(gè)修正值進(jìn)行疊加,得到頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后的高度值;其中,float height表示頂點(diǎn)在當(dāng)前LOD級(jí)別變換下修正后的高度值,h0 為最高精度LOD級(jí)別的頂點(diǎn)高度值,moprh為漸變參數(shù),hDiff為L(zhǎng)OD級(jí)別變 換時(shí)的頂點(diǎn)高度差,dot函數(shù)是將moprh和hDiff做點(diǎn)積計(jì)算。
全文摘要
本發(fā)明公開(kāi)了一種3D地形渲染方法,根據(jù)視距確定地形塊當(dāng)前的層次細(xì)節(jié)LOD級(jí)別;根據(jù)視距和預(yù)設(shè)的所述地形塊當(dāng)前LOD級(jí)別對(duì)應(yīng)的漸變區(qū)間計(jì)算漸變參數(shù),使用漸變參數(shù)對(duì)所述地形塊的頂點(diǎn)高度值進(jìn)行修正;選取比所述地形塊當(dāng)前LOD級(jí)別高一精度級(jí)別的網(wǎng)格模型并使用所述修正后的頂點(diǎn)高度值對(duì)地形塊進(jìn)行渲染。該方法和裝置使修正后的地形塊數(shù)據(jù)根據(jù)視點(diǎn)變化而連續(xù)變化,即使地形塊的LOD級(jí)別發(fā)生變化,也不會(huì)產(chǎn)生地形“跳動(dòng)”現(xiàn)象。本發(fā)明同時(shí)公開(kāi)了一種3D地形渲染裝置。
文檔編號(hào)G06T15/00GK101493952SQ20091007819
公開(kāi)日2009年7月29日 申請(qǐng)日期2009年2月26日 優(yōu)先權(quán)日2009年2月26日
發(fā)明者靜 龔 申請(qǐng)人:北京像素軟件科技股份有限公司