2010-10-07 3 views
2

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

Вызов glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); бы просто нарисовать его сплошным цветом, Вызов glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO); бы сделать это перевернутым, но будет игнорировать альфа-значение текстуры, так что вы бы просто увидеть перевернутый прямоугольник вместо букв.

Что мне нужно что-то эквивалентно glBlendFunc(GL_SRC_ALPHA * GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_ALPHA);

Может ли это быть достигнуто каким-то образом без использования шейдеров?

+1

Почему вы не можете использовать текстуру яркости и glBlendFunc (GL_ONE_MINUS_DEST_COLOR, GL_ONE_MINUS_SRC_COLOR)? – dave

ответ

0

Скопируйте подсектор экрана, который вы хотите перезаписать, вы можете использовать CPU для инвертирования этой скопированной части. Нарисуйте вновь созданную перевернутую текстуру на экране, используя текст в виде маски.

Обратите внимание, что это медленно, нет сомнений в том, что шейдеры будут намного быстрее.

3

Проблема решена.

После комментария Дейва моего оригинального поста: Вместо того, чтобы использовать GL_ALPHA текстуру я генерировать GL_RGBA текстуры, где каждый пиксель равен: (альфа, альфа, альфа, 0xff) (это полутоновое изображение вместо яркости образ). Затем я использую эту текстуру с:

glBlendFunc (GL_ONE_MINUS_DST_COLOR, GL_ONE_MINUS_SRC_COLOR);

Результат: (1 - dest_color) x "src_alpha" + dest_color x (1 - "src_alpha") , который именно то, что мне нужно.

Спасибо! Ron