0

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

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

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

所以我想知道如果我分配了 quads az 顺序,OpenGL ES 会尊重这个吗?

任何帮助都非常受欢迎。

干杯丰富

4

3 回答 3

0

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

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

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

于 2009-12-05T18:40:59.567 回答
0

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

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

当深度缓冲区未启用时,它会简单地覆盖,而不管先前现有像素的 z 值是多少。

于 2009-12-09T18:49:26.167 回答
0

是的,你绝对可以做到这一点,只要你

glEnable(GL_DEPTH_TEST);

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

于 2009-12-05T17:03:38.967 回答