我正在绘制一个只包含矩形的相当简单的2D场景。我有一个FloatBuffer,我为每个顶点放置X,Y,Z,R,G,B,A,U和V数据。
我使用glDrawArrays
和GL_TRIANGLE_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混合,而无需从后到前排序。这可能吗?