Существует всего три способа сделать это на уровне OpenGL:
Растровые шрифты.
Используйте glBitmap или glDrawPixels, чтобы нарисовать прямоугольный пучок пикселей на экране. Недостатки выполнения этого много:
Данные, описывающие каждый символ, отправляются с вашего ЦП на видеокарту каждый кадр - и для каждого символа в кадре. Это может привести к значительной пропускной способности.
Базовая реализация OpenGL почти наверняка должна каким-то образом «пролистывать» данные изображения на своем пути между процессором и кадровым буфером.
Многие 3D графические чипы вообще не предназначены для рисования растровых изображений. В этом случае программный драйвер OpenGL должен подождать, пока аппаратное обеспечение 3D полностью не завершит рисование, прежде чем оно сможет войти, чтобы разделить пиксели непосредственно в буфере кадров. Пока программное обеспечение не завершит работу, аппаратное обеспечение будет бездействовать.
Растровые изображения и рисованные пиксели должны быть выровнены параллельно краям экрана, поэтому поворот текста невозможен.
Масштабирование растровых изображений и рисованных пикселей невозможно.
Есть одно существенное преимущество для растровых шрифтов - это то, что в программных реализациях OpenGL они, вероятно, будут БЫСТРЕЕ, чем другие подходы ... обратная ситуация на 3D-оборудовании.
Геометрические шрифты.
Нарисуйте символы шрифта, используя геометрические примитивы - линии, треугольники, что угодно. Недостатками этого являются:
Количество треугольников, необходимое для рисования некоторых символов, может быть очень большим, особенно если вы хотите, чтобы они хорошо выглядели. Это может быть плохо для производительности.
Разработка шрифтов сложна и дорога.
Использование шрифтов с цветными границами, тенями и т. Д. Усугубляет две другие проблемы.
Преимущества:
Геометрические шрифты можно масштабировать, поворачивать, скручивать, трансформировать, выдавливать.
Вы можете использовать модные модели освещения, картирование окружающей среды, текстурирование и т. Д.
При использовании в трехмерном мире вы можете выполнять обнаружение столкновений с ними.
Геометрические шрифты хорошо масштабируются. У них нет плохих артефактов с псевдонимами, и они не становятся «размытыми» при увеличении.
Текстурные шрифты.
Как правило, весь шрифт хранится в одной или двух больших картах текстур, и каждая буква рисуется как один четырехугольник. Недостатки:
Размер карты текстуры, которая вам нужна, может быть достаточно большим - особенно если вам нужны прописные и строчные буквы - и / или если вы хотите, чтобы шрифт выглядел хорошо при больших размерах точек. Это особенно проблема на оборудовании, которое поддерживает только ограниченные размеры текстурных карт (например, 3Dfx Voodoo может отображать карты размером только до 256x256)
Если вы используете MIPmapping, то масштабирование шрифта делает его нечетким. Если вы не используете MIPmapping, это будет выглядеть ужасно алиасно.
Преимущества:
Общность - вы можете использовать произвольное полноцветное изображение для каждой буквы шрифта.
Текстурные шрифты можно вращать и масштабировать, хотя они всегда выглядят «плоскими».
Легко конвертировать другие виды шрифтов в карты текстур.
Вы можете нарисовать их в 3D-сцене, и они будут освещены правильно.
SPEED! Текстурированные шрифты требуют, чтобы на аппаратное обеспечение приходилось только один четырехугольник для каждого письма. Это, вероятно, на порядок быстрее, чем растровые или геометрические шрифты. Поскольку низкоуровневое трехмерное оборудование оптимизировано для рисования простых текстурированных многоугольников, скорость также повышается, потому что вы находитесь на «быстром пути» через средство визуализации. (CAVEAT: на программных OpenGL текстурные шрифты будут S-L-O-W.
Ссылки на некоторые бесплатные библиотеки шрифтов: