我正在尝试在opengl中设置四边形纹理的透明度,使用混合功能进行游戏并没有帮助他们在谷歌上做任何事情。有什么建议吗?
答案 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);
然后能够使用
设置纹理的alphagl.glColor4f
答案 2 :(得分:1)
在Ron的回答之后,我更接近于解决我没有显示纹理透明度的问题。我的下一个问题是,我在GLSurfaceView后面有一个非GL SurfaceView并使用:
setEGLConfigChooser(false);
我看到我的纹理没问题,但我的整个SurfaceView都被涂黑了。以下解决了我的问题:
setEGLConfigChooser(8, 8, 8, 8, 0, 0);
将false设置为唯一参数是禁用深度测试的一种方法,但您也可以通过将第2个参数设置为0来有效地执行相同操作。前者将创建默认的RGB_565配置,而我需要RGBA_8888配置,因此需要更改。