В общем, при работе с конвейером текстурирования OpenGL я рекомендую записывать желаемый конечный результат. здесь вы хотите, чтобы ваш полутоновый цвет использовался как интерполант между вашими 2 цветами.
out_color = mix(color1, color2, texValue)
Математика для этого на самом деле что-то вроде:
out_color = color1 + (color2 - color1) * texValue
Итак ... существует ли значение текстурной среды , которое помогает это сделать? Да, и он также называется GL_BLEND
(не путать с буфером наложения на кадры, который glEnable(GL_BLEND)
включает).
Итак ... что-то вроде
// pass color1 as the incoming color to the texture unit
glColor4fv(color1);
GLfloat color2[4] = { ... };
// ask for the texture to be blended/mixed/lerped with incoming color
glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_BLEND);
// specify the color2 as per the TexEnv documentation
glTexEnvfv(GL_TEXTURE_2D, GL_TEXTURE_ENV_COLOR, color2)
Нет необходимости рисовать несколько раз или что-нибудь более сложное, чем это, как вы пытались сделать. У конвейера текстурирования есть много способов получить контроль. Изучите их в своих интересах!