Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 渲染二维精灵时打开GL ES-Z顺序_Iphone_Opengl_2d_Render_Sprite - Fatal编程技术网

Iphone 渲染二维精灵时打开GL ES-Z顺序

Iphone 渲染二维精灵时打开GL ES-Z顺序,iphone,opengl,2d,render,sprite,Iphone,Opengl,2d,Render,Sprite,我想知道是否有一种方法可以让OpenGL ES渲染一批四边形(使用纹理页面更改渲染)并以z顺序(或相反)渲染它们 注意,我不想要ZBuffer,我只想要按zDepth的顺序渲染四边形 现在我知道人们会说只需按顺序渲染它们,我会按纹理页面分组渲染。但是,正如您所想象的,在某些情况下,来自一个纹理页面的精灵需要出现在另一个纹理页面的前面。如果仅在纹理页面排序上渲染,则会导致问题 所以我想知道如果我给四边形分配了一个z顺序,OpenGL ES会尊重这个吗 得到了很大的帮助 干杯 Rich是的,只要你愿

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

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

现在我知道人们会说只需按顺序渲染它们,我会按纹理页面分组渲染。但是,正如您所想象的,在某些情况下,来自一个纹理页面的精灵需要出现在另一个纹理页面的前面。如果仅在纹理页面排序上渲染,则会导致问题

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

得到了很大的帮助

干杯
Rich

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

glEnable(GL_DEPTH_TEST);

当然,还有很多其他的事情是正确的。(确保创建深度缓冲区,使用视图平截头体范围内的z值…

OpenGL ES不会为您这样做。它将遵循您指定的顺序,即从draw调用中提取四边形的顺序。如果您想让它们按Z排序来渲染四边形,那么在发送到OpenGL ES之前,您必须自己对它们进行排序

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


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

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

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


当深度缓冲区未启用时,不管先前存在像素的z值是多少,深度缓冲区都会被覆盖。

他说的是绘制顺序,而不是它们是否尊重z缓冲区。他要求的通常是粒子正确混合(需要反向Z顺序),我想他想要Z顺序,但他不想按Z顺序重新排序他的绘图代码,因为他是按纹理分组以获得性能。