【问题标题】:How to correctly render coincident polygons in OpenGL (ES)如何在 OpenGL (ES) 中正确渲染重合多边形
【发布时间】:2011-12-11 18:44:29
【问题描述】:

我知道通过在 OpenGL ES 中设置深度函数,可以控制重叠几何图形在 3D 场景中的渲染方式。我在我的代码中使用gl.depthFunc(gl.LEQUAL) (webgl)。

但是,当两组多边形重合并且颜色不同时,生成的表面会变成两种颜色的任意混合图案(随着相机位置的变化而变化,因此会导致闪烁)。看看这张图片:

我该如何解决这个问题?我尝试了不同的 depthFunc 值,但没有一个能解决这个问题。我希望重合的多边形具有单一颜色,不管是哪一种。

【问题讨论】:

    标签: opengl-es webgl depth-buffer


    【解决方案1】:

    这称为z-fighting,与两个对象在相同深度渲染有关,但舍入误差(和深度缓冲区精度)偶尔会出现在另一个之前。您可以使用的一种解决方案是使用 glPolygonOffset 函数:

    http://www.khronos.org/opengles/sdk/docs/man/xhtml/glPolygonOffset.xml

    您可以在本页底部看到它的使用示例:

    http://www.glprogramming.com/red/chapter06.html

    【讨论】:

      【解决方案2】:

      您所经历的被称为Z 战斗,不幸的是没有明确的解决方案 反对它。发生的情况是,由于深度缓冲区的精度有限,会出现舍入误差,并且任一原语“赢得”深度测试操作。更改深度功能只会切换战斗模式中的颜色,但不会删除它。

      摆脱Z战斗的一种方法是使用多边形偏移http://www.opengl.org/wiki/Basics_Of_Polygon_Offset

      不幸的是,多边形偏移带来了自己的问题。

      【讨论】:

        【解决方案3】:

        尝试在调用 gluPerspective 时将 z-near 更改为远离零:

        void gluPerspective(
            GLdouble    fovy,
            GLdouble    aspect,
            GLdouble    zNear,
            GLdouble    zFar);
        

        来自这个网站: http://www.opengl.org/resources/faq/technical/depthbuffer.htm

        深度缓冲似乎有效,但多边形似乎会通过它们前面的多边形流血。发生了什么事?

        您可能以某种方式配置了 zNear 和 zFar 剪裁平面 这严重限制了您的深度缓冲区精度。一般来说,这是 由太接近 0.0 的 zNear 剪裁平面值引起。作为 zNear 裁剪平面设置为越来越接近 0.0,有效 深度缓冲区的精度急剧下降。移动 zFar 剪裁平面远离眼睛总是有负面影响 关于深度缓冲精度,但它不像移动 z近剪裁平面。

        【讨论】:

        • 虽然减少眼睛坐标深度范围肯定有助于保持接近、平行但不相交的多边形分开,但对于共面多边形没有帮助,这显然是 OP 试图做的。
        • 啊,好点子。现在我很纠结要不要在这里留下这个答案。
        • 继续吧,因为这是与主题相关的好建议,而且我们也有 cmets 来解释为什么它不是这个特定场景的正确答案。没有造成任何伤害,我们都从中学到了一点。 :)
        • 我很高兴你把它留在这里,因为它刚刚帮助我解决了我自己的问题,这与这个问题的关键字相切。
        【解决方案4】:

        试着弄乱glPolygonOffset(factor, units)This page 可能会有所帮助。

        【讨论】:

          猜你喜欢
          • 2011-01-03
          • 2019-06-30
          • 1970-01-01
          • 2012-05-22
          • 2011-08-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多