我正在以3D方式呈现具有alpha的多个纹理对象。 所有纹理都能正常加载,但当我尝试在彼此前面呈现它们时,我会得到以下结果:
左边是我所拥有的,右边则是我想要的。 网格只是为了帮助可视化透视图。
在红色圆形纹理的前面的纹理被剪辑了。 我搜索了答案,它说让我使用:
GLES20.glEnable( GLES20.GL_BLEND );
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA );
但是我正在使用它,它仍然无法工作。我正确放置在onSurfaceCreated()函数中的设置如下:
GLES20.glClearColor( 0.75f, 0.85f, 1f, 1.0f );
GLES20.glEnable( GLES20.GL_BLEND );
GLES20.glBlendFunc(GLES20.GL_SRC_ALPHA, GLES20.GL_ONE_MINUS_SRC_ALPHA );
GLES20.glEnable( GLES20.GL_DEPTH_TEST );
GLES20.glDepthFunc( GLES20.GL_LEQUAL );
GLES20.glDepthMask( true );
GLES20.glClearDepthf( 1f );
我的片段着色器是:
uniform sampler2D texture;
varying vec2 texCoord;
void main(){
gl_FragColor = texture2D( texture, texCoord );
}
我需要在Android清单中包含什么才能启用Alpha测试吗? 我不想最终不得不手动组织我的多边形或使用alpha discard(),因为我需要并希望一些像素是半透明的。
我该如何使3D Alpha测试深度缓冲区起作用?