数字孪生有关的项目中,智慧城市一直是一个比较重要的类型,但是这类智慧城市项目往往包含了大量的GIS相关数据,例如倾斜摄影、DEM、DOM、地形数据等。这时,将GIS系统融合进数字孪生系统的需求就出现了。
这时一个新的问题就出现了,如果将GIS系统和数字孪生系统进行融合,那么该如何保证融合进来的GIS系统仍然能够共享数字孪生系统中的各项功能呢?虽然CesiumJS非常成熟,几乎支持了大部分常用的GIS协议,且性能优化较好,能够将CesiumJS整合到系统中,但是CesiumJS自己实现了底层的渲染功能,无法直接嫁接到渲染引擎当中。

实际上,无论是CesiumJS还是类似ThreeJS,他们底层目前都是基于WebGL/WebGL2绘制到Canvas来实现的(WebGPU还远没有成熟),那么我们是不是可以直接在一个Canvas让CesiumJS先画,ThreeJS后画呢?答案显然是可以的。但是,如果一个先画,一个后画,后画的不就把先画的覆盖了吗?这里我们就要学到深度缓冲区的概念了。

深度缓冲区也称之为DepthBuffer,是GPU为了对光栅化渲染时物体的遮挡关系进行排序用到的概念。概念本身很简单,就是每绘制一个物体的同时,把这个物体在每一个像素点上的深度信息与这个像素点之前的深度信息进行对比,如果这个像素点的深度较小(注意这要看具体深度缓冲的DepthFunction,一般在WebGL上默认是最大的是Depth是1,因此越小越近)则继续渲染像素颜色,否则直接丢弃。

最低0.47元/天 解锁文章
598





