iPhone OpenGL ES 错误的 alpha 混合

4

我在iPhone上使用openGL ES时,发现了alpha混合结果不正确的问题。

以下是我创建纹理对象的代码:

glGenTextures(1, &tex_name);
glBindTexture(GL_TEXTURE_2D, tex_name);
glTextImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex_width, tex_height, GL_RGBA, GL_UNSIGNED_BYTE, tex_data);

'tex_data' 是从使用 zlib 压缩的原始 RGBA8888 数据中加载的。它已经按照预期成功加载,我已经通过调试器进行了检查。

这是我的渲染前准备纹理的代码:

glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

glBindTexture(GL_TEXTURE_2D, tex_name);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

我已经上传了一个样本,展示了我期望的效果和实际效果: 样本。在这个样本中,底部大部分的纹理是70%不透明度的纯黑色。然而,OpenGL会将其渲染成灰色。这个问题影响了我所有使用混合的纹理。
我已经在Windows上使用OGLES PVRVFrame测试了代码,并得到了预期的结果:黑色被渲染为黑色。
2个回答

4

找到问题了。我忘记将EAGLView的CAEAGLLayer的opaque属性设置为YES。


0

这个有用吗?glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA) 我认为这只是将两者混合在一起,而不是将两者与背景混合。

如果我理解有误,请见谅。


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