iPhone - OpenGL ES 1.1 - Alpha Blend使纹理颜色错误

时间:2012-04-05 16:05:09

标签: iphone opengl-es textures alpha blend

我是OpenGL ES 1.1 for iPhone的新手。今天,我尝试在黑色背景上绘制png纹理(纹理包含alpha chanel),但结果与源png文件不同。

iPhone及其上的结果模拟器:

enter image description here

关灯:

enter image description here

应该是(更明亮,更模糊):

enter image description here

源纹理文件:

enter image description here

这是我使用的源代码:

//Setup:
glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);
glAlphaFunc(GL_GREATER,0.01);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
static const GLfloat light0Ambient[] = {1.0, 1.0, 1.0, 1.0};
static const GLfloat light0Diffuse[] = {1.0, 1.0, 1.0, 1.0};
static const GLfloat light0Position[] = {0.0, 0.0, 10.0};
glLightfv(GL_LIGHT0, GL_AMBIENT, (const GLfloat *)light0Ambient);
glLightfv(GL_LIGHT0, GL_DIFFUSE, (const GLfloat *)light0Diffuse);
glLightfv(GL_LIGHT0, GL_POSITION, (const GLfloat *)light0Position);
glEnable(GL_TEXTURE_2D);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);

绘图代码:

glBindTexture(GL_TEXTURE_2D, OYTextID);
glVertexPointer(3, GL_FLOAT, 0, GUI_Vertices);
glNormalPointer(GL_FLOAT, 0, GUI_Normals);
glTexCoordPointer(2, GL_FLOAT, 0, GUI_TexCoords);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

问题是什么导致颜色出错?

感谢阅读,感谢您的帮助。 最好的问候&对不起我的英文。

1 个答案:

答案 0 :(得分:5)

看起来你的PNG文件已经预乘alpha了。在这种情况下,您需要设置

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA); // GL_ONE instead of GL_SRC_ALPHA