2009-07-08 93 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)我認爲這只是混合兩個而不是混合背景。

對不起,如果我不明白。