Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.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
Sorting OpenGL,alpha与压缩缓冲区和多纹理混合_Sorting_Opengl_Alphablending_Depth Buffer - Fatal编程技术网

Sorting OpenGL,alpha与压缩缓冲区和多纹理混合

Sorting OpenGL,alpha与压缩缓冲区和多纹理混合,sorting,opengl,alphablending,depth-buffer,Sorting,Opengl,Alphablending,Depth Buffer,我正在绘制一个只包含矩形的相当简单的2D场景。我有一个FloatBuffer,我将每个顶点的X、Y、Z、R、G、B、A、U和V数据放入其中。 我使用glDrawArrays和GL\u TRIANGLE\u STRIP绘制,保持矩形与退化顶点分开 为了方便使用多个纹理,我为每个纹理的绘制调用保留了单独的浮点数组。纹理被绑定,浮点数组被放入FloatBuffer,然后我绘制。 然后,将绑定下一个纹理,并继续此操作,直到为此渲染绘制了所有纹理 我使用正交投影,因此我可以使用Z坐标和GL_DEPTH_T

我正在绘制一个只包含矩形的相当简单的2D场景。我有一个FloatBuffer,我将每个顶点的X、Y、Z、R、G、B、A、U和V数据放入其中。 我使用
glDrawArrays
GL\u TRIANGLE\u STRIP
绘制,保持矩形与退化顶点分开

为了方便使用多个纹理,我为每个纹理的绘制调用保留了单独的浮点数组。纹理被绑定,浮点数组被放入FloatBuffer,然后我绘制。 然后,将绑定下一个纹理,并继续此操作,直到为此渲染绘制了所有纹理

我使用正交投影,因此我可以使用Z坐标和
GL_DEPTH_TEST
来设置深度,而与绘图顺序无关

要使用alpha混合,互联网上的每一条建议似乎都会说:

GLES20.glEnable(GLES20.GL_BLEND);
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA);
这对于每个纹理的“绘制”都很好,因为在绘制之前,我在缓冲区中从后到前对绘制调用进行了排序。我无法在部分透明的texture1下正确绘制texture2,因为深度测试和texture1在texture2之前绘制。texture1切掉texture2的重叠部分,因为深度测试显示texture1位于texture2的前面

我唯一能看到的是 1) 在整个程序中仅使用1个纹理,2)不使用透明纹理。这两种选择都不是可以接受的


基本上,我需要一种方法来进行alpha混合,而不需要从后到前排序。这可能吗?

听起来你可能需要这样做。这说明了怎么做。

听起来你可能需要这样做。这说明了怎么做