在iPhone上使用多重纹理添加贴花

时间:2009-12-16 06:32:50

标签: iphone opengl-es

我正试图将一个图像叠加在一个简单的四边形上。我将我的底部图像设置为纹理单元0,然后将我的顶部图像(具有变量alpha)设置为纹理单元1.单元2具有模式GL_DECAL,这意味着当alpha为0时底部纹理应该显示,当alpha为1时,顶部纹理应该显示。但是,只有顶部纹理显示而底部纹理根本不显示。它只是底部纹理应该显示的白色。

glGetError()不会报告任何问题。任何帮助表示赞赏。谢谢!

glVertexPointer(3, GL_FLOAT, 0, boxVertices);
glEnableClientState(GL_VERTEX_ARRAY);

glClientActiveTexture(GL_TEXTURE0);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, boxTextureCoords);
glClientActiveTexture(GL_TEXTURE1);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, boxTextureCoords);

glClientActiveTexture(GL_TEXTURE0);
glEnable(GL_TEXTURE_2D);
glClientActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);

glClientActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, one.texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

glClientActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, two.texture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL);

glDrawArrays(GL_TRIANGLE_FAN, 0, 4);

1 个答案:

答案 0 :(得分:0)

由于您正在使用顶点数组,因此在设置纹理坐标时需要使用glClientActiveTexture而不是glActiveTexture