Перевернутый текст поверх сцены OpenGL - PullRequest
2 голосов
/ 07 октября 2010

У меня есть текстура шрифта, которую я использую для рисования текста поверх моей сцены 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);

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

Ответы [ 2 ]

3 голосов
/ 10 октября 2010

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

После комментария Дэйва к моему оригинальному сообщению: Вместо использования текстуры 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") это именно то, что мне было нужно.

Спасибо! Рон

0 голосов
/ 07 октября 2010

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

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

...