iPhone OpenGL ES不正确的alpha混合

时间:2009-07-08 22:37:37

标签: c++ iphone opengl-es alphablending

我在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);
从使用zlib打包的原始RGBA8888数据加载

'tex_data'。它按照应有的方式加载,我用调试器检查过。

这是我在渲染前设置纹理的代码:

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);

我上传了一个我期望的样本和我在这里得到的样本:sample。在样本中,底部的大部分纹理是漆黑,具有70%的不透明度。但是,openGL将其呈现为灰色。这个问题会影响我使用的所有纹理。

我使用OGLES PVRVFrame在Windows上测试了代码,结果如预期:黑色呈现为黑色。

2 个答案:

答案 0 :(得分:4)

发现问题。我忘了将EAGLView的CAEAGLLayer的opaque属性设置为YES。

答案 1 :(得分:0)

这会有帮助吗? glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)我认为这只是混合了两者而不是将两者混合在一起。

很抱歉,如果我不明白。

相关问题