在opengl中面向背面的多边形

时间:2010-12-16 21:45:49

标签: opengl rendering culling

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

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

  

你应该看到背面   三角形。第一个渲染过程将   导致深度缓冲区具有   三角形的深度值   正面。第二个渲染过程   你正在渲染背面   三角形,因此有那些   最大的深度值。每个三角形   光栅化的将有其深度   值与当前深度相比较   该像素的值。自深度   缓冲区设置为所有最接近的深度   值(小值)但是   区分最远的深度   背面的值(大值)   三角形将被渲染。“

但我认为答案是:

  

由于深度缓冲区未被清除,并且仍然包含前置三角形的深度值,它将抛出面向后方的三角形,并且不显示任何内容。

哪个答案是对的?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

我认为第二段是假的。

想象一下Moebius乐队是一个封闭的流形。你可以清楚地看到一些靠近眼睛的背面三角形(白色,正面为黑色)。在第二遍中,他们将通过深度测试并呈现:

alt text