更改OpenGL ES对象的Alpha值 - GL_BLEND - iPhone

时间:2012-04-08 20:10:16

标签: iphone objective-c opengl-es 3d alphablending

我的OpenGL ES场景(版本1.1)中有一个纹理对象,我想将其更改为0.5。

我正在尝试以下代码:

glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_NORMAL_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
glEnable(GL_BLEND); 
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
glColor4f(1.0, 1.0, 1.0, 0.5);

glVertexPointer(3, GL_FLOAT, 0, vertexes);
glNormalPointer(GL_FLOAT, 0, normals);
glTexCoordPointer(2, GL_FLOAT, 0, textures);

GLfloat ambientAndDiffuse[] = kAmbience;
glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT_AND_DIFFUSE, ambientAndDiffuse);
GLfloat specular[] = kSpecular;
glMaterialfv(GL_FRONT_AND_BACK, GL_SPECULAR, specular);
glMaterialf(GL_FRONT_AND_BACK, GL_SHININESS, kShininess);
GLfloat emission[] = kEmission;
glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission);

glDrawElements(GL_TRIANGLES, vertexCount, GL_UNSIGNED_SHORT, indices);

glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_NORMAL_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_BLEND);

问题在于模型的透明度没有变化。模型正确显示在屏幕上,但alpha仍然是1。

修改

我的纹理是jpgs。我需要将这些保存为PNG吗?

有人能发现我能纠正这个问题吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

啊我想我已经解决了 - 你需要关灯,然后它似乎有效。

glDisable(GL_LIGHTING);

答案 1 :(得分:0)

您是否将纹理环境变量设置为调制?像这样:

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

告诉OpenGL将对象的颜色乘以纹理的颜色。另外,我不记得你是否需要使用glDrawElements()的GL_COLOR_ARRY,而不仅仅是设置当前颜色。