我正在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测试深度缓冲区起作用?
2 回答
天涯尽头无女友
TA贡献1831条经验 获得超9个赞
接受的答案不包含此内容。
在您的情况下,解决方案是禁用深度测试,并可能颠倒您绘制的顺序。
着色器丢弃是一种hack,如果您需要一定范围的alpha值,它将看起来很糟糕。
添加回答
举报
0/150
提交
取消