透明纹理在安卓OpenGL ES中的应用

13

我正在尝试设置OpenGL中四边形纹理的透明度,尝试混合函数和谷歌上的任何东西都没有帮助。 有什么建议吗?

3个回答

32

我曾经遇到过一个类似的问题,其中一段代码可以正常运行,而另一段则不能。在进行了大量日志记录和调试后,我发现差别在于一行代码。

在那个能正常运行的代码中,我在设置渲染器之前调用了以下代码:

    setEGLConfigChooser(false)

如果这并没有帮助,这里还有一些其他的提示...

在加载纹理之前,请确保您已经启用了混合。

例如:

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

...并确保您用于生成纹理的位图实际上具有Alpha组件.


对我有用!谢谢! - TameHog

1

在根据Ron的答案后,我更接近解决纹理透明度未显示的问题。接下来我遇到的问题是,在我的GLSurfaceView后面有一个非GL SurfaceView,通过使用:

setEGLConfigChooser(false);

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

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

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


1

我能够使用不同的方法解决我的问题。我首先设置

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

然后可以使用以下代码设置纹理的透明度:
gl.glColor4f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接