设置gl.depthFunc(gl.ALWAYS)的副作用

时间:2017-09-14 09:58:49

标签: webgl

编写web gl 3D地图应用程序。在大缩小时,我会遇到无关紧要的z战斗。对于近距离变焦,在Chrome / Firefox上经历了很少的z-fighting,但在Edge / Safari上或多或少都存在。

发现将depthFunc更改为gl.ALWAYS消除了Edge上的问题(尚未在Safari上测试)。 https://developer.mozilla.org/en-US/docs/Web/API/WebGLRenderingContext/depthFunc

我在测试时的经验表明,depthFunc参数会产生巨大影响,据我所知,depthFunc参数是一种权衡。所以关注奇怪的副作用。设置为gl.ALWAYS,会发生哪些不良影响?

1 个答案:

答案 0 :(得分:3)

你实际上禁止进行深度测试,你也可以调用gl.disable(gl.DEPTH_TEST)(并且在创建上下文期间通过传递depth: false来创建没有深度缓冲区的上下文)。 / p>

通过禁用深度测试,您的渲染变得依赖于顺序, 所以无论你最后绘制的是什么,无论它的投影如何,它都会在它之前渲染的所有东西之上。对于网格中的单个三角形也是如此,如果您具有非凸几何或禁用背面剔除将成为问题。正如评论中已经指出的那样,另一个警告是每个片段都会被完全处理,无论它是否被遮挡。

我建议调查其他减轻z-fighting的方法,从优化视角到使用多边形偏移到替代z-buffer编码,有多种方法可供选择。