2013-07-10 34 views
1

我正在绘制一个相当简单的仅包含矩形的2D场景。我有一个FloatBuffer,其中为每个顶点放置了X,Y,Z,R,G,B,A,U和V数据。 我使用glDrawArraysGL_TRIANGLE_STRIP绘制,保持矩形与退化顶点分离。OpenGL,与打包缓冲区和多个纹理的alpha混合

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

我使用了一个正交投影,所以我可以使用Z坐标和GL_DEPTH_TEST来设置独立于绘制顺序的深度。

可以使用alpha混合,在互联网上的每一条建议似乎在说:

GLES20.glEnable(GLES20.GL_BLEND); 
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA); 

此作品每每个纹理的“画”很好,因为我有回在缓冲区排序的绘制调用绘画前。由于纹理2之前的深度测试和纹理1被绘制,我无法在部分透明纹理1下正确绘制纹理2。纹理1切掉纹理2的重叠部分,因为深度测试说纹理1位于纹理2的前面。

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

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

回答