OpenGL中的背向多边形

3
在OpenGL中,你可以仅绘制背面多边形、仅绘制正面多边形或两者皆可。如果你渲染一个流形三角网格,然后清除帧缓冲区但不清除深度缓冲区,接着再次仅渲染背面多边形,你期望会看到什么?
我认为下面给我的答案是不正确的:
“你应该可以看到背面的三角形。第一次渲染传递将使深度缓冲区包含只有正面三角形的深度值。第二次渲染传递将呈现只有背面三角形,因此那些具有最大深度值的三角形都会呈现。每个裁剪到的三角形的深度值将与该像素的当前深度值进行比较。由于深度缓冲区已设置为所有最接近的深度值(小值),但在最远的深度值上进行区分(大值),所以背面三角形将被呈现。”
但我认为答案是:
“由于深度缓冲区未被清除,仍然包含正面三角形的深度值,它将排除掉背面三角形,并显示为空白。”
哪个答案是正确的?
2个回答

1

这要看情况!假设网格是一个二维流形物体(即在表面任何点周围的足够小区域内与平面拓扑等价),第一次渲染前向和背向三角形或只有前向三角形,并且深度函数为GL_LESS或GL_LEQUAL,那么第二段是正确的,因为前向三角形总是在后向三角形之前,因此将始终导致深度测试失败。

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


0

我认为第二段是错误的。

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

alt text


如果您的对象是单面网格(即每三个顶点只提供一个三角形,并且它们只使用单个法线渲染一次),那么背面三角形将按照您所说的进行渲染,但该对象不是流形(必须存在一个点,其中法线会'翻转')。如果您将其呈现为双面,则在每个像素处将有一个正面和一个背面的三角形,具有相同的深度,如果深度函数为GL_LEQUAL、GL_EQUAL、GL_GEQUAL或GL_ALWAYS,则仅在第二次通过时渲染背面。 - Jackson Pope

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接