我正在使用alpha通道绘制一些纹理,但是当它们显示时,它看起来像alpha通道只是二进制。因此像素是透明的或不透明的,尽管在纹理文件本身中像素是半透明的。混合设置如下:
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);
此问题是否有解决方法?
以上显示了它应该如何,以下显示它是如何:
答案 0 :(得分:3)
试试这个:
gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_SRC_ALPHA, GL10.GL_ONE_MINUS_SRC_ALPHA);
gl.glEnable(GL10.GL_ALPHA_BITS);
//draw...
gl.glDisable(GL10.GL_ALPHA_BITS);
答案 1 :(得分:1)
似乎它正在使用alpha测试而不是alpha混合,这可以解释阈值行为。虽然默认情况下未启用,但可能值得尝试:
gl.glDisable(GL10.GL_ALPHA_TEST);
答案 2 :(得分:0)
您使用的GLSurfaceView表面格式是什么?它是半透明(不透明)的格式吗?
surfaceView.getHolder().setFormat(PixelFormat.TRANSLUCENT);
此外,EGL设置必须设置alpha支持。这将为您提供最好的质量......
surfaceView.setEGLConfigChooser(8, 8, 8, 8, 16, 0);
编辑: 另一个想法是,您可能没有使用glTexImage2D以半透明格式将图像上传到OpenGL?
答案 3 :(得分:0)
您是否将PNG存储到仅具有1位alpha的GL纹理,例如16位5-5-5-1格式?这会导致上述行为。