2012-04-08 80 views
0

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

我想下面的代码:

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); 

的问题是,该模型的透明度不改变。该模型是正确显示在屏幕上,但是仍然阿尔法为1

编辑

我的纹理是JPG格式。我需要将它们保存为PNG吗?

任何人都可以发现我可以改正这一点吗?

谢谢。

回答

1

嗯,我想我已经解决了它 - 你需要关闭照明,然后它似乎工作。

glDisable(GL_LIGHTING);

0

你是否设置了纹理环境变量来调制?像这样:

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE); 

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

+0

谢谢 - 我在这一行中添加了(上面更改的代码),但屏幕上没有任何更改。 – GuybrushThreepwood 2012-04-09 06:52:10

+0

此外,glTexEnvi的默认值是GL_MODULATE,所以不需要设置它,除非您在别处更改它。 – GuybrushThreepwood 2012-04-09 11:29:09