简体   繁体   English

更改 OpenGL ES Object 的 Alpha 值 - GL_BLEND - iPhone

[英]Changing Alpha Value of OpenGL ES Object - GL_BLEND - iPhone

I have a textured object in my OpenGL ES scene (version 1.1) for which I want to change the alpha to 0.5.我的 OpenGL ES 场景(版本 1.1)中有一个带纹理的 object,我想将其 alpha 更改为 0.5。

I am trying the following code:我正在尝试以下代码:

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

The problem is that the transparency of the model is not changing.问题是 model 的透明度没有改变。 The model is displayed on the screen correctly, however the alpha is still 1. model 正确显示在屏幕上,但 alpha 仍为 1。

EDIT编辑

My textures are jpgs.我的纹理是 jpg。 Do I need to save these as PNGs?我需要将它们另存为 PNG 吗?

Can anyone spot how I can correct this?谁能发现我该如何纠正这个问题?

Thank you.谢谢你。

Ah think I've solved it - you need to turn off the lighting and then it seems to work.啊,我想我已经解决了——你需要关掉灯光,然后它似乎才能工作。

glDisable(GL_LIGHTING); glDisable(GL_LIGHTING);

Have you set the texture environment variable to modulate?你有没有设置纹理环境变量来调制? Like this:像这样:

glTexEnvi (GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

That tells OpenGL to multiply the object's color by the texture's color.这告诉 OpenGL 将对象的颜色乘以纹理的颜色。 Also, I don't remember if you need to use a GL_COLOR_ARRY with glDrawElements() instead of just setting the current color.另外,我不记得是否需要将 GL_COLOR_ARRY 与glDrawElements()一起使用,而不是仅仅设置当前颜色。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM