glcolor4ub в opengl es 2.0 - PullRequest
       1

glcolor4ub в opengl es 2.0

2 голосов
/ 21 марта 2012

У меня есть некоторые функции, которые используют opengl для рисования линий на экране (шкалы здоровья), и я недавно перешел с opengl es 1.1 на opengl es 2.0.Я использовал glColor4ub(50,160,50,255);, чтобы изменить цвет линии на зеленый, прежде чем отображать его на экране, но эта функция, по-видимому, не существует в версии 2.0.Он говорит, что он недействителен и просто отображает все строки белым цветом.

Есть ли другой способ изменить цвет линий?Я пытался найти его, но, похоже, нет никого с таким же вопросом.Это может быть что-то простое, чего я не вижу.

В моей игре используется cocos2d 2.0, и бары здоровья являются практически единственной вещью, которую я непосредственно использую opengl для рендеринга.Все остальное использует спрайт листы и тому подобное.Спасибо за любую помощь.

1 Ответ

3 голосов
/ 23 марта 2012

Как и все остальное в OpenGL ES 2.0, вам необходимо отправить цвет линии в ваш фрагментный шейдер (через вершинный шейдер как атрибут вершины или непосредственно как равномерный) и вывести цвет в ваш фрагментный шейдер.

В простейшем случае вы можете использовать статическое значение в фрагментном шейдере:

void main(void) {
    gl_FragColor = vec4(50.0/255.0, 160.0/255.0, 50.0/255.0, 255.0/255.0);
}

Если вы хотите изменить цвет во время выполнения, отправьте значение фрагментному шейдеру как униформу:

GLfloat color[4];
color[0] = 50.0/255.0;
color[1] = 160.0/255.0;
color[2] = 50.0/255.0;
color[3] = 255.0/255.0;

GLint lineColorSlot = glGetUniformLocation(shaderProgram, "LineColor");
glUniformMatrix4fv(lineColorSlot, 1, 0, color);  

Фрагмент шейдера:

uniform lowp vec4 LineColor;

void main(void) {
    gl_FragColor = LineColor;
}
...