Я использую функцию смешивания раскрасить глифы, полученные из библиотеки Freetype при использовании субпиксельного рендеринга (LCD, формат глиф растрового изображения RGB (не альфа)):Изменение glBlendColor изнутри вершина/фрагмент шейдер
Я загрузить текстуру в формате RGB в GPU и используются следующее смешивание:
glBlendFunc(GL_CONSTANT_COLOR_EXT, GL_ONE_MINUS_SRC_COLOR);
glBlendColor(r, g, b, 1);
R, G, B представляет собой желаемый цвет глифа. Это отлично работает, пока глифы имеют одинаковый цвет (я использую единственный буфер вершин). Я бы хотел, чтобы у каждого символа был другой цвет, и тогда мне нужно будет указать другой цвет смешивания из шейдера, но я думаю, что это невозможно. Кто-нибудь знает, как это можно сделать (если это вообще возможно)?
Соответствующий проект available here
Я думал, что в какой-то момент я нашел «правильный» шейдер, но это не так на самом деле (см issue 48)
Простое увеличение цвета текстуры с помощью цвета в виде вершин приведет к потере информации, нет (с поддержкой субпикселя, сглаживание выполняется с использованием полных RGB-пикселей)? Если, например, я хочу нарисовать глиф в черном, умножая текстуру глифа черным цветом, получается черным для RGB, и только альфа будет сглаживать глиф, но с использованием только уровней серого. С цветом blend func/blend я могу хранить эту информацию. –
@NicolasRougier: Тогда вам нужно принять решение: хотите ли вы принудительно смешивать два источника (и, следовательно, заставить пользователя иметь оборудование класса GL 3.3+)? Или вы хотите получить * очень незначительную визуальную потерю качества от выполнения первого умножения и смешивания с альфой, как большинство приложений OpenGL отображают текст? В этом случае подэлементное сглаживание не стоит усилий. Особенно, когда вы прекратите использовать [методы, подобные этому] (http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf). –
Спасибо за ответ, но рендеринг/позиционирование субпикселя весьма критично, чтобы иметь безупречный рендеринг при малом и среднем размере шрифта. Это может быть не так важно для игры, но для веб-браузера это критическая проблема. –