OpenGL ES 1.1 Цвет поверх шрифтов - PullRequest
1 голос
/ 20 марта 2012

У меня в настоящее время есть текстура, обслуживающая шрифт, который является самым верхним (последним) рендером в OpenGL для iPhone.Текстура представляет собой белый глиф с прозрачной окантовкой.Моя цель состоит в том, чтобы наложить другой цвет на текстуру, эффективно меняя цвет шрифта.

Используя приведенный ниже код, я могу сделать сплошной цвет на текстуре при условии, что для альфа установлено значение 255. Моя цель состоит в том, чтобыУ меня прогрессивный цвет исчезает, поэтому моя цель - отобразить цвет (0,0,255,127).Это должен быть частично прозрачный синий.Однако я много раз пробовал с настройками glTexEnv () и, похоже, не могу сделать наложение не сплошным цветом.

glBlendFunct(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, fontTexture);
glColorub(0,0,255,255);
...
glDrawElements(...);

Я попробовал предложения на вики-странице OpenGL http://www.opengl.org/wiki/Texture_Combiners, под заголовком "Пример: смешивание tex0 и tex1 на основе альфа из tex0" .Также я попробовал идею, найденную здесь OpenGL ES 1.1: Как изменить цвет текстуры без потери яркости? .

Если есть какая-либо настройка, которую я могу получить, чтобы сделать цвет (0,0,255,127)присутствует, не теряя очертания шрифта / символа?

PS.Другая идея состояла в том, чтобы передать предварительно умноженный альфа-цвет (такой как (0,0,255 * (127/256), 127)) для предыдущего примера, но это выглядит не слишком элегантно.

РЕДАКТИРОВАТЬ: простоуточнить, я намерен для текстуры персонажа сохранить полную непрозрачность, просто чтобы изменить цвет наложения.Таким образом, пример должен измениться с полного синего на полностью белый.

1 Ответ

0 голосов
/ 20 марта 2012

Я думаю, вам нужно изменить параметры glBlendFunc (кстати, в glBlendFunct есть опечатка).

Взгляните на это: http://pyopengl.sourceforge.net/documentation/manual/glBlendFunc.3G.html

Для меня это значение:

glEnable(GL_BLEND);
glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

работает.

Надеюсь, это поможет ...

...