2010-12-16 74 views
3

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

我想给我的以下的答案是错误的:

您应该看到面临 三角形后面。第一渲染过程将 结果在深度缓冲器具有作为 面向前方三角形的 深度值。第二渲染过程 要渲染面临 三角形,因此那些有 最大深度值后面。相较于该像素的当前深度 值被光栅的每个三角形 将其深度 价值。由于深度 缓冲区设置为所有最接近的深度 值(小值),但 鉴别上最远的深度 值(大值)面临 三角形后面会被渲染。”

但我认为答案是:

由于深度缓存不被清除,并且仍然含有面临三角形前的深度值,它会抛出背面朝上的三角形,并显示没有

哪个答案正确?

回答

0

我认为第二段是错误的。

想象一个莫比乌斯带,其是一个封闭的歧管。您可以清楚地看到更接近眼睛的背面三角形(白色,前面是黑色)。在第二阶段中,他们将通过深度测试,并呈现:

alt text

+0

如果你的对象是一个片面的网格(即你只为每三个顶点提供一个三角形,并且它们只能与一个正常的渲染一次),然后按你说的朝后的三角形将呈现,但物体不是一个多面体(法线必须有一个“翻转”的点,如果将其渲染为双面,那么在每个像素处都会有一个面向前方和背面的三角形具有相同的深度,如果深度函数是GL_LEQUAL,GL_EQUAL,GL_GEQUAL或GL_ALWAYS,则仅在第二阶段渲染后向渲染。 – 2010-12-17 08:59:31

1

这要看!假设网格是一个二维流形的物体(即在拓扑结构上等同于曲面上任意点上的足够小的区域上的平面),并且第一遍渲染前后三角形或仅前面的三角形,深度函数是GL_LESS或GL_LEQUAL,那么第二段是正确的,因为前向三角形总是在后向三角形的前面,因此总是会导致深度测试失败。

当然,如果你使用GL_GREATER或GL_GEQUAL为您深度功能,情况正好相反,因此第一段是正确的。