【问题标题】:Open GL ES - Z order when rendering 2D spritesOpengl ES - 渲染 2D 精灵时的 Z 顺序
【发布时间】:2010-12-23 12:59:14
【问题描述】:

我想知道是否有办法让 OpenGL ES 渲染一批四边形(通过纹理页面更改渲染)并按 z 顺序(或反向)渲染它们。

请注意,我不需要 ZBuffer,我只想按 zDepth 的顺序渲染四边形。

现在我知道人们会说按顺序渲染它们,我按纹理页面分组渲染。然而,正如您可以想象的那样,在某些情况下,来自一个纹理页面的精灵需要出现在另一个纹理页面的前面。当您仅在纹理页面排序时呈现这会导致问题。

所以我想知道如果我将四边形分配给 z 顺序,OpenGL ES 会尊重这一点吗?

任何帮助都得到了极大的帮助。

干杯 丰富

【问题讨论】:

    标签: iphone opengl 2d render sprite


    【解决方案1】:

    如果没有 Z 缓冲区/深度缓冲区,您将无法实现您想要的。您要问的是深度缓冲区在没有启用它的情况下完成的工作!

    当启用 Z 缓冲区时,每次 OpenGL 绘制一个像素时,它都会检查像素存在的 Z 值,然后决定是否绘制它。

    当深度缓冲区未启用时,它只会覆盖之前现有像素的 z 值。

    【讨论】:

      【解决方案2】:

      OpenGL ES 不会为您执行此操作。它将尊重您指定的顺序,即四边形来自绘图调用的顺序。如果您希望它们渲染按 Z 排序的四边形,则必须在发送到 OpenGL ES 之前自己对其进行排序。

      如果您使用的是索引缓冲区,您显然可以只对索引进行排序。但是您仍然需要自己计算实际的 Z。

      编辑:关于您的纹理问题,我应该补充一点,要同时使用不同的纹理,您应该考虑使用纹理图集(即,单个纹理包含您想要在不同部分使用的各种纹理) .

      【讨论】:

        【解决方案3】:

        是的,你绝对可以这样做,只要你

        glEnable(GL_DEPTH_TEST);
        

        当然,还有很多其他的事情是正确的。 (确保您创建了一个深度缓冲区,使用在您的视锥体范围内的 z 值...)

        【讨论】:

        • 他是在谈论绘制的顺序,而不是他们尊重 Z 缓冲区。他要求的通常是正确混合粒子(并且需要反向 Z 顺序)
        • 我认为他想要 z 顺序,但他不想按 z 顺序重新排序他的绘图代码,因为他按纹理分组以提高性能。
        猜你喜欢
        • 2016-11-06
        • 1970-01-01
        • 2012-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-05-14
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多