本发明涉及三维地图渲染,尤其是指一种面向互联网三维地图的空间层次渲染方法及系统。
背景技术:
1、基于可视化技术的快速发展,互联网地图由二维升级为三维。三维地图在原有相机平移、缩放的基础上,扩展了相机倾斜角,用户不仅可以缩放和平移地图,还可以倾斜相机以获得不同的视角,更加直观地查看地图信息。
2、在三维地图中,二维图层由于其高度的一致性,在相机倾斜移动时,往往会导致深度冲突(z-fighting)的出现。这是因为当多个二维图层在同一视角内叠加时,由于它们的高度信息相同,当相机倾斜时,物体的投影方式发生变化,这可能导致原本在深度缓冲中差异不大的两个面的深度值差异变得更加显著,渲染引擎无法准确判断二维图层之间的前后关系,从而产生深度冲突的现象。深度冲突不仅会导致图层之间的边界模糊不清,甚至发生重叠,还会造成错误的空间层次感,严重影响地图的可读性和用户的体验。
3、针对上述深度冲突问题,现有技术有三种常用的做法:
4、(1)在渲染二维图层时关闭深度检测,使得下一个渲染的图层覆盖上一个已渲染图层,从而避免深度冲突。然而,二维图层本身具有材质属性,不透明材质往往需要进行深度写入和深度检测,这一方法会产生更多的逻辑判断,极大增加地图数据的渲染难度。
5、(2)调整相机的近裁剪面(near)和远裁剪面(far)之间的距离。通过调整近裁剪面和远裁剪面的值,可以改变深度缓冲的精度和覆盖范围,从而在一定程度上减少深度冲突的发生。但是,调整近裁剪面和远裁剪面的值会影响到渲染的精度和性能。近裁剪面和远裁剪面的距离调整过近会出现地图瓦片消失问题,过远会出现渲染性能问题,因此很难做到完美平衡。
6、(3)对图层的世界坐标进行深度偏移,通过增加一个微小的深度偏移量来避免深度冲突。但是,当相机的俯仰角比较大时,如倾斜角接近90°,即以地平线的视角观察三维空间时,由于图层之间存在深度偏移量,位于上面的图层可能会遮住位于其下的图层,仍然会造成深度冲突现象,进而导致错误的空间位置关系。并且,调整世界坐标值还会对后续的碰撞计算造成影响。
7、因此,现有技术中用于解决深度冲突的方法都存在各自的局限性。在互联网三维地图可视化项目中,受限于浏览器性能,正确渲染空间层次仍面临较大的挑战。
技术实现思路
1、为此,本发明所要解决的技术问题在于克服现有技术中无法有效解决三维地图空间渲染时产生的深度冲突问题。
2、为解决上述技术问题,本发明提供了一种面向互联网三维地图的空间层次渲染方法,包括:
3、获取互联网三维地图场景中的各类数据,对应生成待渲染的图层,并记录其中每个图层的优先级次序;所述待渲染的图层包括二维图层和三维模型;
4、对每个二维图层进行空间层次计算,根据相机位置计算二维图层中每个片元的目标深度偏差值,在片元着色器中对二维图层的每个片元进行深度偏移;
5、对三维模型进行空间层次计算,根据相机位置计算三维模型中每个片元的目标深度偏差值,在片元着色器中对三维模型的每个片元进行深度偏移;
6、按照二维图层和三维模型的优先级次序先后调用绘制接口,将三维地图场景渲染到屏幕上,得到渲染结果图。
7、优选地,所述互联网三维地图场景中的各类数据包括二维矢量数据、栅格数据以及三维模型数据。
8、优选地,所述对每个二维图层进行空间层次计算,根据相机位置计算二维图层中每个片元的目标深度偏差值,在片元着色器中对二维图层的每个片元进行深度偏移,包括:
9、根据二维图层的优先级次序以及三维地图场景的总图层数,计算二维图层的第一等距深度偏移量;
10、根据二维图层的第一等距深度偏移量和相机高度计算二维图层的第二等距深度偏移量;
11、根据相机角度和二维图层的第二等距深度偏移量计算二维图层中每个片元的目标深度偏差值;
12、在二维图层片元着色器中,根据二维图层中每个片元的目标深度偏差值,在片元着色器中对二维图层进行深度偏移。
13、优选地,所述根据二维图层的优先级次序以及三维地图场景的总图层数,计算二维图层的第一等距深度偏移量,包括:
14、当相机处于地表之上,二维图层在地上场景的第一等距深度偏移量的计算公式为:
15、;
16、当相机处于地表之下,二维图层在地下场景的第一等距深度偏移量的计算公式为:
17、;
18、其中,和分别为二维图层在地上场景和地下场景的第一等距深度偏移量,表示三维地图场景的总图层数,表示当前二维图层的优先级次序,表示等距深度偏移的矫正经验值。
19、优选地,所述等距深度偏移的矫正经验值的取值为。
20、优选地,根据二维图层的第一等距深度偏移量和相机高度计算二维图层的第二等距深度偏移量,包括:
21、将相机的垂直高度与相机高度纠偏值的比值乘以二维图层的第一等距深度偏移量,得到二维图层的第二等距深度偏移量。
22、优选地,所述相机高度纠偏值的取值与相机的垂直高度成正比。
23、优选地,所述对三维模型进行空间层次计算,根据相机位置计算三维模型中每个片元的目标深度偏差值,在片元着色器中对三维模型的每个片元进行深度偏移,包括:
24、在三维模型的顶点着色器中,通过三维模型的片元顶点的世界坐标z值判断该片元处于地表之上或地表之下;
25、当相机处于地表之上时,获取优先级次序最低的二维图层的第二等距深度偏移量作为目标等距深度偏移量,相机处于地表之下时,获取优先级次序最高的二维图层的第二等距深度偏移量作为目标等距深度偏移量;
26、根据相机角度和目标等距深度偏移量计算三维模型中每个片元的目标深度偏差值;
27、在三维模型片元着色器中,根据三维模型中每个片元的目标深度偏差值,在片元着色器中对三维模型进行深度偏移。
28、优选地,根据相机角度和等距深度偏移量计算每个片元的目标深度偏差值,包括:
29、在顶点着色器中,片元顶点通过预设的模型矩阵转换到世界坐标系下,得到片元顶点的世界坐标;将片元顶点的世界坐标减去相机的世界坐标,再进行向量的归一化处理,得到片元到相机的方向向量;
30、将片元到相机的方向向量与片元的法线向量进行向量的点积运算后,再取反,得到当前片元受相机角度影响的初始深度偏差值;
31、将等距深度偏移量传入片元着色器中,与每个片元受相机角度影响的初始深度偏差值相乘,得到每个片元由于相机角度而产生的目标深度偏差值。
32、本发明还提供了一种面向互联网三维地图的空间层次渲染系统,包括:
33、图层次序记录模块,用于获取互联网三维地图场景中的各类数据,对应生成待渲染的图层,并记录其中每个图层的优先级次序;所述待渲染的图层包括二维图层和三维模型;
34、二维图层深度偏移模块,用于对每个二维图层进行空间层次计算,根据相机位置计算二维图层中每个片元的目标深度偏差值,在片元着色器中对二维图层的每个片元进行深度偏移;
35、三维模型深度偏移模块,用于对三维模型进行空间层次计算,根据相机位置计算三维模型中每个片元的目标深度偏差值,在片元着色器中对三维模型的每个片元进行深度偏移;
36、渲染模块,用于按照二维图层和三维模型的优先级次序先后调用绘制接口,将三维地图场景渲染到屏幕上,得到渲染结果图。
37、本发明的上述技术方案相比现有技术具有以下有益效果:
38、本发明所述的一种面向互联网三维地图的空间层次渲染方法,在等距深度偏移量的基础上还考虑了相机与目标片元之间的相对位置,根据相机角度实时计算二维图层和三维模型中每个片元的目标深度偏差值,避免了大俯仰角情况下可能出现的远处瓦片深度冲突问题,保证了相机在任意角度下互联网三维地图的空间关系的正确性。
39、进一步地,本发明在计算等距深度偏移量的过程中还考虑了相机高度导致的深度精度误差问题,通过引入相机高度纠偏值,以解决相机高度导致的深度精度非线性的问题,提高了深度缓冲的检测精度,实现相机在任意高度下的空间关系的正确性。