正如所提到的,glTexEnv是要走的路。
要更换你的纹理的RGB分量,并保持其Alpha不变,你可以尝试这样的事情(这代码使用红色作为替代色):
glColor4f(1.0f, 0.0f, 0.0f, 1.0f);
glActiveTexture(GL_TEXTURE_0);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, spriteTexture);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_REPLACE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
// ... draw as usual
这里来了一些解释。
使用GL_COMBINE时,您可以完全控制不同纹理阶段的输入/输出如何组合在一起。在这种情况下,我们指定我们要用(GL_PREVIOUS)替换(GL_REPLACE)纹理阶段0的RGB分量,在这种情况下,它是单一颜色(使用glColor4f设置)。
我们没有为alpha组件设置任何特殊的东西,因为我们需要常规行为。 添加以下行将不得不仿佛不包括(默认行为)相同的效果:
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);
我想这是蟒蛇的关系,我现在有一个极大的答案。 – sharvey 2010-11-14 22:59:00