2009-07-08 137 views
4

我在使用openGL ES时在iPhone上出现不正确的alpha混合结果问题。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); 

我上传的,我所期待的一个样本,我已经来到这里:sample。在样本中,底部的大部分纹理都是黑色,70%的不透明度。然而,OpenGL呈现为灰色。这个问题会影响我使用的所有纹理。

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

回答

4

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

0

这会有帮助吗? glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA)我认为这只是混合两个而不是混合背景。

对不起,如果我不明白。