适用于Android的OpenGL ES中的透明纹理

时间:2010-03-02 07:55:07

标签: android opengl-es

我正在尝试在opengl中设置四边形纹理的透明度,使用混合功能进行游戏并没有帮助他们在谷歌上做任何事情。有什么建议吗?

3 个答案:

答案 0 :(得分:30)

我遇到了类似的问题,其中一段代码正常运行而另一段则没有。经过大量的日志记录和调试后,我发现差异是一行代码。

在具有工作alpha的代码中,我在设置渲染器之前调用了以下内容。

    setEGLConfigChooser(false)

如果这没有帮助,这里有几个其他的指示......

确保在加载纹理之前启用了混合

例如:

    // Enable blending using premultiplied alpha.
    gl.glEnable(GL10.GL_BLEND);
    gl.glBlendFunc(GL10.GL_ONE, GL10.GL_ONE_MINUS_SRC_ALPHA);

...并确保您用于生成纹理的位图实际上具有alpha分量。

答案 1 :(得分:1)

我能够使用其他方法修复列出的问题。我先设置

gl.glTexEnvf(GL10.GL_TEXTURE_ENV, GL10.GL_TEXTURE_ENV_MODE, /*GL10.GL_REPLACE*/ GL10.GL_MODULATE);

然后能够使用

设置纹理的alpha
gl.glColor4f

答案 2 :(得分:1)

在Ron的回答之后,我更接近于解决我没有显示纹理透明度的问题。我的下一个问题是,我在GLSurfaceView后面有一个非GL SurfaceView并使用:

setEGLConfigChooser(false);

我看到我的纹理没问题,但我的整个SurfaceView都被涂黑了。以下解决了我的问题:

setEGLConfigChooser(8, 8, 8, 8, 0, 0);

将false设置为唯一参数是禁用深度测试的一种方法,但您也可以通过将第2个参数设置为0来有效地执行相同操作。前者将创建默认的RGB_565配置,而我需要RGBA_8888配置,因此需要更改。