如何调整OpenGL ES 1.1中的每个纹理单元?

时间:2010-04-17 16:54:45

标签: iphone c opengl-es

我有两个纹理和一个“混合因子”,我想混合它们,由当前颜色调制;实际上,我想使用以下着色器:

gl_FragColor = gl_Color * mix(tex0, tex1, blendFactor);

我正在使用OpenGL ES 1.1,针对所有版本的iPhone,所以我不能使用着色器,而且我有两个纹理单元。


我最好的尝试是:

// texture 0
glActiveTexture(GL_TEXTURE0);
image1.Bind();

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

// texture 1
glActiveTexture(GL_TEXTURE1);
image2.Bind();

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_SRC_ALPHA);

glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_ALPHA, GL_INTERPOLATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_ALPHA, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_ALPHA, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA, GL_SRC_ALPHA);

const float factor[] = { 0, 0, 0, blendFactor };
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, factor);

这具有着色器的效果:

gl_FragColor = mix(gl_Color * tex0, tex1, blendFactor);

但是我没有看到如何用颜色模块化纹理1。有没有办法让纹理单元提供的颜色由传入的原色自动调制?

还是以任何其他方式做我想要的,我错过了?绝对允许多次通过,但它们必须具有适当的混合效果;我有

glBlend(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

已启用,因此通过多次传递可能很难。

0 个答案:

没有答案