2009-12-05 38 views
0

我想知道是否有办法让OpenGL ES呈现一批四边形(渲染纹理页面更改)并以z顺序(或反向)呈现它们。Open GL ES - 绘制二维图形时的Z顺序

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

现在我知道人们会说,只是渲染他们的顺序,以及我渲染按纹理页面分组。然而,正如你可以想象的,有些情况下,来自一个纹理页面的精灵需要出现在另一个纹理页面的前面。当您仅在纹理页面上进行渲染时,会导致出现问题。

所以我想知道,如果我分配四边形一个Z命令OpenGL ES尊重这一点?

任何帮助很好地收到。

干杯 丰富

回答

0

如果没有Z缓冲区/深度缓冲区,就无法达到你想要的效果..你所要求的是深度缓冲区的工作而不启用它!

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

当深度缓冲区未启用时,它将简单覆盖,而不考虑先前现有像素的z值。

0

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

glEnable(GL_DEPTH_TEST); 

,当然,得到了一堆其他的事情吧。 (确保你创建了一个深度缓冲区,使用你视图范围内的z值...)

+0

他说的是抽签的顺序,并不是他们尊重Z缓冲区。他所要求的通常是让粒子正确混合(并且需要反向Z顺序) – Bahbar 2009-12-05 18:42:23

+0

我认为他想要z顺序,但他不想按照z顺序重新排列他的绘图代码,因为他是按纹理进行分组以获得性能。 – 2009-12-05 19:07:28

0

OpenGL ES不会为你做这个。它会遵守您指定的顺序,即四方来自平局的顺序。如果您希望他们渲染按Z排序的四边形,则必须在发送到OpenGL ES之前自行对它们进行排序。

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

编辑:关于你的纹理问题,我应该补充说,在同一时间使用不同的纹理,你应该看看使用纹理地图集(也就是说,一个纹理包含你想要在不同部分使用的各种纹理)。