OpenGL ES2 Alpha测试问题

我正在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测试深度缓冲区起作用?


ibeautiful
浏览 581回答 2
2回答

天涯尽头无女友

接受的答案不包含此内容。在您的情况下,解决方案是禁用深度测试,并可能颠倒您绘制的顺序。着色器丢弃是一种hack,如果您需要一定范围的alpha值,它将看起来很糟糕。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java