【问题标题】:Back facing polygons in openglopengl中的背面多边形
【发布时间】:2010-12-16 21:45:48
【问题描述】:

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

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

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

但我认为答案是:

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

哪个答案是正确的?

【问题讨论】:

    标签: opengl rendering culling


    【解决方案1】:

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

    当然,如果你使用 GL_GREATER 或 GL_GEQUAL 作为深度函数,反之亦然,所以第一段是正确的。

    【讨论】:

      【解决方案2】:

      我认为第二段是错误的。

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

      【讨论】:

      • 如果你的对象是一个单面网格(即你只为每三个顶点提供一个三角形并且它们只用一个法线渲染一次),那么背面三角形将被渲染为你说,但对象不是一个流形(必须有一个法线“翻转”的点。如果你把它渲染成两侧,那么在每个像素上都会有一个正面和一个背面三角形如果深度函数为 GL_LEQUAL、GL_EQUAL、GL_GEQUAL 或 GL_ALWAYS,则具有相同深度和背面的将仅在第二遍时渲染。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-17
      • 1970-01-01
      • 1970-01-01
      • 2011-04-11
      • 2012-03-09
      • 1970-01-01
      相关资源
      最近更新 更多