android / opengles alpha纹理不是半透明而是二进制透明

时间:2010-09-03 09:21:23

标签: android opengl-es transparency textures alphablending

我正在使用alpha通道绘制一些纹理,但是当它们显示时,它看起来像alpha通道只是二进制。因此像素是透明的或不透明的,尽管在纹理文件本身中像素是半透明的。混合设置如下:

gl.glEnable(GL10.GL_BLEND);
gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

此问题是否有解决方法?

以上显示了它应该如何,以下显示它是如何:

alt text

4 个答案:

答案 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格式?这会导致上述行为。