渲染2D精灵时打开GL ES - Z顺序

时间:2009-12-05 11:11:05

标签: iphone opengl 2d render sprite

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

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

现在我知道人们会说按顺序渲染它们,我按照纹理页面进行渲染。但是,正如您可以想象的那样,某些纹理页面中的精灵需要出现在另一个纹理页面之前。当您仅在纹理页面上渲染时,这会导致问题。

所以我想知道我是否分配了一个z命令,OpenGL ES会尊重这个吗?

任何得到很好的帮助。

干杯 富

3 个答案:

答案 0 :(得分:0)

是的,只要你

,你绝对可以做到这一点
glEnable(GL_DEPTH_TEST);

当然,还有其他一些正确的事情。 (确保创建深度缓冲区,使用视图范围内的z值...)

答案 1 :(得分:0)

OpenGL ES不会为您执行此操作。它将遵守您指定的顺序,即四边形来自绘图调用的顺序。如果您希望它们呈现按Z排序的四边形,您必须在发送到OpenGL ES之前自行排序。

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

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

答案 2 :(得分:0)

如果没有Z缓冲液/深度缓冲液,你无法达到你想要的效果。你要问的是深度缓冲液的工作没有启用它!

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

当未启用深度缓冲区时,无论先前现有像素的z值是什么,它都会被覆盖。