我正在尝试在基于OpenGL的渲染器中处理共面多边形上的Z-fighting。由于遗留问题,我在许多方面都有所帮助。由于数据流在旧系统中的工作原理,渲染器主要必须是近视的。
用户能够在任意位置绘制几何体,我没有真正的方法来检测他们何时决定重叠两个多边形。使用glPolygonOffset,我需要知道这些知识来抵消多边形或其他多边形。我也非常确定使用投影矩阵无关紧要,因为Z-fighting由于数据的共面性而来自舍入误差。打开和关闭深度写入也不是一个选项,因为我不知道在渲染循环期间何时会发生此问题。
那么建议?
答案 0 :(得分:2)
红皮书有一些。例如,您可以首先将所有共面多边形渲染到模板缓冲区中,而不触摸颜色缓冲区(即glColorMask(0,0,0,0)
),但进行Z测试并更新深度缓冲区。然后转向深度测试和深度写入,启用颜色写入和模板测试,并按照分层顺序渲染多边形;模板缓冲区将应用早期深度测试准备的结果。