Раскрасить текстуру в оттенках серого в OpenGL ES на Android - PullRequest
0 голосов
/ 02 февраля 2012

Я хотел бы использовать текстуру, похожую на кисть в стиле Photoshop (например: http://designblurb.com/wp-content/uploads/2008/11/grungy-watercolor-brushes.jpg),), и позволить пользователю выбрать для нее цвет, поэтому, когда он обращается к экрану, черный цвет серого окрашивается выбор пользователя.

Кто-нибудь знает лучший способ добиться этого? Существуют ли переменные окружения текстуры, которые могут это сделать?

Любая информация приветствуется.

1 Ответ

3 голосов
/ 02 февраля 2012

Ну, все сводится к объединению цвета текстуры с постоянным цветом.Таким образом, у вас есть текстура в оттенках серого (будь то текстура 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, и объединение текстуры с постоянным цветом - ваша наименьшая проблема.

...