本發(fā)明涉及三維地圖渲染,尤其是指一種面向互聯(lián)網(wǎng)三維地圖的空間層次渲染方法及系統(tǒng)。
背景技術(shù):
1、基于可視化技術(shù)的快速發(fā)展,互聯(lián)網(wǎng)地圖由二維升級為三維。三維地圖在原有相機平移、縮放的基礎(chǔ)上,擴(kuò)展了相機傾斜角,用戶不僅可以縮放和平移地圖,還可以傾斜相機以獲得不同的視角,更加直觀地查看地圖信息。
2、在三維地圖中,二維圖層由于其高度的一致性,在相機傾斜移動時,往往會導(dǎo)致深度沖突(z-fighting)的出現(xiàn)。這是因為當(dāng)多個二維圖層在同一視角內(nèi)疊加時,由于它們的高度信息相同,當(dāng)相機傾斜時,物體的投影方式發(fā)生變化,這可能導(dǎo)致原本在深度緩沖中差異不大的兩個面的深度值差異變得更加顯著,渲染引擎無法準(zhǔn)確判斷二維圖層之間的前后關(guān)系,從而產(chǎn)生深度沖突的現(xiàn)象。深度沖突不僅會導(dǎo)致圖層之間的邊界模糊不清,甚至發(fā)生重疊,還會造成錯誤的空間層次感,嚴(yán)重影響地圖的可讀性和用戶的體驗。
3、針對上述深度沖突問題,現(xiàn)有技術(shù)有三種常用的做法:
4、(1)在渲染二維圖層時關(guān)閉深度檢測,使得下一個渲染的圖層覆蓋上一個已渲染圖層,從而避免深度沖突。然而,二維圖層本身具有材質(zhì)屬性,不透明材質(zhì)往往需要進(jìn)行深度寫入和深度檢測,這一方法會產(chǎn)生更多的邏輯判斷,極大增加地圖數(shù)據(jù)的渲染難度。
5、(2)調(diào)整相機的近裁剪面(near)和遠(yuǎn)裁剪面(far)之間的距離。通過調(diào)整近裁剪面和遠(yuǎn)裁剪面的值,可以改變深度緩沖的精度和覆蓋范圍,從而在一定程度上減少深度沖突的發(fā)生。但是,調(diào)整近裁剪面和遠(yuǎn)裁剪面的值會影響到渲染的精度和性能。近裁剪面和遠(yuǎn)裁剪面的距離調(diào)整過近會出現(xiàn)地圖瓦片消失問題,過遠(yuǎn)會出現(xiàn)渲染性能問題,因此很難做到完美平衡。
6、(3)對圖層的世界坐標(biāo)進(jìn)行深度偏移,通過增加一個微小的深度偏移量來避免深度沖突。但是,當(dāng)相機的俯仰角比較大時,如傾斜角接近90°,即以地平線的視角觀察三維空間時,由于圖層之間存在深度偏移量,位于上面的圖層可能會遮住位于其下的圖層,仍然會造成深度沖突現(xiàn)象,進(jìn)而導(dǎo)致錯誤的空間位置關(guān)系。并且,調(diào)整世界坐標(biāo)值還會對后續(xù)的碰撞計算造成影響。
7、因此,現(xiàn)有技術(shù)中用于解決深度沖突的方法都存在各自的局限性。在互聯(lián)網(wǎng)三維地圖可視化項目中,受限于瀏覽器性能,正確渲染空間層次仍面臨較大的挑戰(zhàn)。
技術(shù)實現(xiàn)思路
1、為此,本發(fā)明所要解決的技術(shù)問題在于克服現(xiàn)有技術(shù)中無法有效解決三維地圖空間渲染時產(chǎn)生的深度沖突問題。
2、為解決上述技術(shù)問題,本發(fā)明提供了一種面向互聯(lián)網(wǎng)三維地圖的空間層次渲染方法,包括:
3、獲取互聯(lián)網(wǎng)三維地圖場景中的各類數(shù)據(jù),對應(yīng)生成待渲染的圖層,并記錄其中每個圖層的優(yōu)先級次序;所述待渲染的圖層包括二維圖層和三維模型;
4、對每個二維圖層進(jìn)行空間層次計算,根據(jù)相機位置計算二維圖層中每個片元的目標(biāo)深度偏差值,在片元著色器中對二維圖層的每個片元進(jìn)行深度偏移;
5、對三維模型進(jìn)行空間層次計算,根據(jù)相機位置計算三維模型中每個片元的目標(biāo)深度偏差值,在片元著色器中對三維模型的每個片元進(jìn)行深度偏移;
6、按照二維圖層和三維模型的優(yōu)先級次序先后調(diào)用繪制接口,將三維地圖場景渲染到屏幕上,得到渲染結(jié)果圖。
7、優(yōu)選地,所述互聯(lián)網(wǎng)三維地圖場景中的各類數(shù)據(jù)包括二維矢量數(shù)據(jù)、柵格數(shù)據(jù)以及三維模型數(shù)據(jù)。
8、優(yōu)選地,所述對每個二維圖層進(jìn)行空間層次計算,根據(jù)相機位置計算二維圖層中每個片元的目標(biāo)深度偏差值,在片元著色器中對二維圖層的每個片元進(jìn)行深度偏移,包括:
9、根據(jù)二維圖層的優(yōu)先級次序以及三維地圖場景的總圖層數(shù),計算二維圖層的第一等距深度偏移量;
10、根據(jù)二維圖層的第一等距深度偏移量和相機高度計算二維圖層的第二等距深度偏移量;
11、根據(jù)相機角度和二維圖層的第二等距深度偏移量計算二維圖層中每個片元的目標(biāo)深度偏差值;
12、在二維圖層片元著色器中,根據(jù)二維圖層中每個片元的目標(biāo)深度偏差值,在片元著色器中對二維圖層進(jìn)行深度偏移。
13、優(yōu)選地,所述根據(jù)二維圖層的優(yōu)先級次序以及三維地圖場景的總圖層數(shù),計算二維圖層的第一等距深度偏移量,包括:
14、當(dāng)相機處于地表之上,二維圖層在地上場景的第一等距深度偏移量的計算公式為:
15、;
16、當(dāng)相機處于地表之下,二維圖層在地下場景的第一等距深度偏移量的計算公式為:
17、;
18、其中,和分別為二維圖層在地上場景和地下場景的第一等距深度偏移量,表示三維地圖場景的總圖層數(shù),表示當(dāng)前二維圖層的優(yōu)先級次序,表示等距深度偏移的矯正經(jīng)驗值。
19、優(yōu)選地,所述等距深度偏移的矯正經(jīng)驗值的取值為。
20、優(yōu)選地,根據(jù)二維圖層的第一等距深度偏移量和相機高度計算二維圖層的第二等距深度偏移量,包括:
21、將相機的垂直高度與相機高度糾偏值的比值乘以二維圖層的第一等距深度偏移量,得到二維圖層的第二等距深度偏移量。
22、優(yōu)選地,所述相機高度糾偏值的取值與相機的垂直高度成正比。
23、優(yōu)選地,所述對三維模型進(jìn)行空間層次計算,根據(jù)相機位置計算三維模型中每個片元的目標(biāo)深度偏差值,在片元著色器中對三維模型的每個片元進(jìn)行深度偏移,包括:
24、在三維模型的頂點著色器中,通過三維模型的片元頂點的世界坐標(biāo)z值判斷該片元處于地表之上或地表之下;
25、當(dāng)相機處于地表之上時,獲取優(yōu)先級次序最低的二維圖層的第二等距深度偏移量作為目標(biāo)等距深度偏移量,相機處于地表之下時,獲取優(yōu)先級次序最高的二維圖層的第二等距深度偏移量作為目標(biāo)等距深度偏移量;
26、根據(jù)相機角度和目標(biāo)等距深度偏移量計算三維模型中每個片元的目標(biāo)深度偏差值;
27、在三維模型片元著色器中,根據(jù)三維模型中每個片元的目標(biāo)深度偏差值,在片元著色器中對三維模型進(jìn)行深度偏移。
28、優(yōu)選地,根據(jù)相機角度和等距深度偏移量計算每個片元的目標(biāo)深度偏差值,包括:
29、在頂點著色器中,片元頂點通過預(yù)設(shè)的模型矩陣轉(zhuǎn)換到世界坐標(biāo)系下,得到片元頂點的世界坐標(biāo);將片元頂點的世界坐標(biāo)減去相機的世界坐標(biāo),再進(jìn)行向量的歸一化處理,得到片元到相機的方向向量;
30、將片元到相機的方向向量與片元的法線向量進(jìn)行向量的點積運算后,再取反,得到當(dāng)前片元受相機角度影響的初始深度偏差值;
31、將等距深度偏移量傳入片元著色器中,與每個片元受相機角度影響的初始深度偏差值相乘,得到每個片元由于相機角度而產(chǎn)生的目標(biāo)深度偏差值。
32、本發(fā)明還提供了一種面向互聯(lián)網(wǎng)三維地圖的空間層次渲染系統(tǒng),包括:
33、圖層次序記錄模塊,用于獲取互聯(lián)網(wǎng)三維地圖場景中的各類數(shù)據(jù),對應(yīng)生成待渲染的圖層,并記錄其中每個圖層的優(yōu)先級次序;所述待渲染的圖層包括二維圖層和三維模型;
34、二維圖層深度偏移模塊,用于對每個二維圖層進(jìn)行空間層次計算,根據(jù)相機位置計算二維圖層中每個片元的目標(biāo)深度偏差值,在片元著色器中對二維圖層的每個片元進(jìn)行深度偏移;
35、三維模型深度偏移模塊,用于對三維模型進(jìn)行空間層次計算,根據(jù)相機位置計算三維模型中每個片元的目標(biāo)深度偏差值,在片元著色器中對三維模型的每個片元進(jìn)行深度偏移;
36、渲染模塊,用于按照二維圖層和三維模型的優(yōu)先級次序先后調(diào)用繪制接口,將三維地圖場景渲染到屏幕上,得到渲染結(jié)果圖。
37、本發(fā)明的上述技術(shù)方案相比現(xiàn)有技術(shù)具有以下有益效果:
38、本發(fā)明所述的一種面向互聯(lián)網(wǎng)三維地圖的空間層次渲染方法,在等距深度偏移量的基礎(chǔ)上還考慮了相機與目標(biāo)片元之間的相對位置,根據(jù)相機角度實時計算二維圖層和三維模型中每個片元的目標(biāo)深度偏差值,避免了大俯仰角情況下可能出現(xiàn)的遠(yuǎn)處瓦片深度沖突問題,保證了相機在任意角度下互聯(lián)網(wǎng)三維地圖的空間關(guān)系的正確性。
39、進(jìn)一步地,本發(fā)明在計算等距深度偏移量的過程中還考慮了相機高度導(dǎo)致的深度精度誤差問題,通過引入相機高度糾偏值,以解決相機高度導(dǎo)致的深度精度非線性的問題,提高了深度緩沖的檢測精度,實現(xiàn)相機在任意高度下的空間關(guān)系的正確性。