OpenGL ES在多纹理中使用glColor4f

时间:2010-09-17 03:52:57

标签: iphone opengl-es alphablending

我要做的是使用OpenGL ES 1.1在iPhone上输出蒙版纹理。默认的组合行为似乎对我有利,直到我真的想要改变最终结果的ALPHA!

'a'(Alpha)浮点变量在这里没有效果:(其他所有输出都很好,它被屏蔽并且很好地绘制,而不是α不可控制的1.0不透明)

/* Setup First Texture (RGBA Texture) */
glClientActiveTexture(GL_TEXTURE0);
glActiveTexture(GL_TEXTURE0);
glColor4f(r, g, b, a);
glBindTexture(GL_TEXTURE_2D, t->tx);
glVertexPointer(2, GL_FLOAT, 0, afPos);
glTexCoordPointer(2, GL_FLOAT, 0, afUV);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

/* Setup Mask (RGBA Texture, White to Transparent Gradient) */
glClientActiveTexture(GL_TEXTURE1);
glActiveTexture(GL_TEXTURE1);
glEnable(GL_TEXTURE_2D);
glColor4f(r, g, b, a);
glBindTexture(GL_TEXTURE_2D, tMask->tx);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glVertexPointer(2, GL_FLOAT, 0, afPos);
glTexCoordPointer(2, GL_FLOAT, 0, afUV);

/* Make the Mask Repeat */
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);


/* Draw Both */
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);

[edit]整个颜色根本没有效果,好像它被设置为(1,1,1,1)所以它不仅仅是alpha。[/ edit]

想象一下,好像你在photoshop中有一个看似正确的蒙面图层,现在我想做的就是设置图层不透明度。感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

这就是GL_REPLACE的作用,最终的片段颜色是纹理颜色,也许你想使用GL_MODULATE,最终的片段颜色是纹理颜色和顶点颜色的乘法。