1

我正在尝试在基于 OpenGL 的渲染器中处理共面多边形上的 Z 冲突。由于遗留问题,我在很多方面都束手无策。主要是由于数据流在旧系统中的工作方式,渲染器必须是短视的。

用户可以在任意位置绘制几何图形,我没有真正的方法来检测他们何时决定重叠两个多边形。使用 glPolygonOffset,我需要具备这些知识来抵消或其他多边形。我也相当确定使用投影矩阵不会有帮助,因为由于数据的共面性质,Z-fighting 来自舍入误差。打开和关闭深度写入也不是一个真正的选择,因为我不知道这个问题何时会在渲染循环中发生。

所以建议?

4

1 回答 1

2

红皮书有一些。例如,您可以首先将所有共面多边形渲染到模板缓冲区中,而无需接触颜色缓冲区(即glColorMask(0,0,0,0)),而是进行 Z 测试并更新深度缓冲区。然后轮到深度测试和深度写入,启用颜色写入和模板测试,并按分层顺序渲染多边形;模板缓冲区将应用早期深度测试准备的结果。

于 2013-02-12T23:33:46.713 回答