01-27-2012, 05:07 AM
I know texture combiners are from hell.
But I still have been wondering if it is possible to get per vertex lighting with car paint.
My idea has been to use the first texture unit to blend car color with the texture. This works fine.
Then use the second texture unit to apply lighting. Here I am getting the lit fragment color only as output, almost like it is ignoring the previous stage.
@joevenzon any ideas?
But I still have been wondering if it is possible to get per vertex lighting with car paint.
My idea has been to use the first texture unit to blend car color with the texture. This works fine.
Code:
// stage 0
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
// blend car decal with car color
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_INTERPOLATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_TEXTURE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_CONSTANT);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE2_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_SRC_ALPHA);
float color[4];
i->GetColor(color[0], color[1], color[2], color[3]);
glTexEnvfv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_COLOR, color);
Then use the second texture unit to apply lighting. Here I am getting the lit fragment color only as output, almost like it is ignoring the previous stage.
Code:
// stage 1
glstate.BindTexture2D(1, i->GetDiffuseMap());
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_COMBINE);
// modulate stage 0 result by fragment color, lighting
glTexEnvi(GL_TEXTURE_ENV, GL_COMBINE_RGB, GL_MODULATE);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE0_RGB, GL_PREVIOUS);
glTexEnvi(GL_TEXTURE_ENV, GL_SOURCE1_RGB, GL_PRIMARY_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND0_RGB, GL_SRC_COLOR);
glTexEnvi(GL_TEXTURE_ENV, GL_OPERAND1_RGB, GL_SRC_COLOR);
@joevenzon any ideas?