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

更改OpenGL ES对象的Alpha值-GL_BLEND-iPhone,iphone,objective-c,opengl-es,3d,alphablending,Iphone,Objective C,Opengl Es,3d,Alphablending,我的OpenGL ES场景(版本1.1)中有一个纹理对象,我想将其alpha更改为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

我的OpenGL ES场景(版本1.1)中有一个纹理对象,我想将其alpha更改为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吗

谁能指出我该如何纠正这一点


谢谢。

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

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

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

啊,我想我已经解决了这个问题-你需要关闭照明,然后它看起来就可以工作了


glDisable(GLU照明)

谢谢-我在这一行中添加了(上面更改了代码),但是屏幕上没有任何更改。此外,glTexEnvi的默认值是GL_MODULATE,因此无需设置此值,除非您在其他地方更改了它。