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