3

在 OpenGL 中,您只能绘制背面多边形、正面多边形或两者。如果渲染流形三角形网格,则清除帧缓冲区但不清除深度缓冲区,然后再次仅渲染背面多边形。期望看到什么?

我认为以下给我的答案是错误的:

您应该看到背面的三角形。第一个渲染通道将导致深度缓冲区具有正面三角形的深度值。您正在渲染背面三角形的第二个渲染通道,因此那些具有最大深度值的三角形。每个光栅化的三角形都将具有与该像素的当前深度值相比的深度值。由于深度缓冲区设置为所有最接近的深度值(小值),但区分最远的深度值(大值),将呈现背面三角形。”

但我认为答案是:

由于深度缓冲区没有被清除,并且仍然包含正面三角形的深度值,它会丢弃背面三角形,并且什么也不显示。

哪个答案是正确的?

4

2 回答 2

1

这取决于!假设网格是一个二维流形的对象(即拓扑上等效于表面上任何点周围足够小的区域上的平面),并且第一遍渲染正面和背面三角形或只是正面三角形,并且深度函数是 GL_LESS 或 GL_LEQUAL 那么第二段是正确的,因为正面三角形总是在背面三角形的前面,因此总是会导致深度测试失败。

当然,如果您使用 GL_GREATER 或 GL_GEQUAL 作为深度函数,则相反,因此第一段是正确的。

于 2010-12-17T08:52:05.093 回答
0

我认为第二段是错误的。

想象一个封闭流形的莫比乌斯带。您可以清楚地看到一些更靠近眼睛的背面三角形(白色,正面为黑色)。在第二遍中,它们将通过深度测试并被渲染:

替代文字

于 2010-12-16T22:05:09.047 回答