我正在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 throw(),因为我需要并且希望某些像素是半透明的。
如何使3D Alpha测试深度缓冲区起作用?
天涯尽头无女友
相关分类