Ну, все сводится к объединению цвета текстуры с постоянным цветом.Таким образом, у вас есть текстура в оттенках серого (будь то текстура GL_RGB
со всеми компонентами цвета, имеющими одинаковое значение, или просто текстура GL_LUMINANCE
).Фактическая комбинация обоих цветов зависит от вашей версии OpenGL ES.
В ES 1 вы просто используете текстурную среду GL_MODULATE
, чтобы умножить цвет текстуры на цвет объекта / вершины (либо рассчитанный по освещению, либо установленный на glColor
или glColorPointer
, если освещение отключено,что похоже на ваш случай):
glColor(...);
glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
//draw a textured object
В ES 2 вы, конечно, должны сделать это самостоятельно в фрагментном шейдере:
uniform sampler2D tex;
uniform vec4 color;
varying vec2 texCoord;
void main()
{
gl_FragColor = color * texture2D(tex, texCoord).r;
}
Если все эти вещи ничего вам не говорят(в зависимости от вашей версии), тогда вам, вероятно, стоит немного углубиться в основы OpenGL ES, и объединение текстуры с постоянным цветом - ваша наименьшая проблема.