Sorting OpenGL,alpha与压缩缓冲区和多纹理混合
我正在绘制一个只包含矩形的相当简单的2D场景。我有一个FloatBuffer,我将每个顶点的X、Y、Z、R、G、B、A、U和V数据放入其中。 我使用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
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混合,而不需要从后到前排序。这可能吗?听起来你可能需要这样做。这说明了怎么做。听起来你可能需要这样做。这说明了怎么做