Incorrect lighting while using glTexEnv (OpenGL ES 1.1)

Started by
-1 comments, last by Tachikoma 14 years, 1 month ago
Howdy Ho, I have a query about blending textures in OpenGL ES 1.1, using glTexEnv. The situation is like this: I have two RGBA textures, and I want to interpolate them together in one pass to produce "single" texture, complete with alpha. This will be rendered in the scene with alpha blending turned on. I also want the resulting blend lighted properly. I have been using the following code:

//Modulate texture 0 with lighting colour
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, TexID0);

glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC1_RGB, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);

//Interpolate texture 1 with texture 0 
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, TexID1);

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_SRC1_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_RGB, GL_ONE_MINUS_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_SRC1_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SRC2_ALPHA, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_ALPHA, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_ALPHA, GL_SRC_ALPHA);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND2_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

//Blend result into the scene
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
The interpolation step and the final blending works quite well. But there is one problem, the lighting colour (via GL_PRIMARY_COLOR) gets modulated with texture 0 only, but texture 1 (interpolated on top) will not get the same treatment. So basically I have one texture illuminated correctly, while the second is not affected by the light at all. Is there a sane way to light both textures the together after combining? I do not wish to render in several passes. Tips appreciated.
Latest project: Sideways Racing on the iPad

This topic is closed to new replies.

Advertisement