Предпочтительный способ визуализации текста в OpenGL [закрыто]

17

Я собираюсь забрать компьютерную графику еще раз для университетского проекта. Для предыдущего проекта я использовал библиотеку под названием FTGL, которая не оставляла меня достаточно довольным, потому что она была довольно тяжелой (я пробовал много методов рендеринга, рендеринг текста не очень хорошо масштабировался).

У меня вопрос, есть ли хорошая и эффективная библиотека для этого? Если нет, то как бы реализовать быстрый, но красивый текст? Некоторые предполагаемые применения:

  • Ярлыки плавающих объектов / символов
  • Диалоги
  • меню
  • HUD

РЕДАКТИРОВАТЬ: предпочтительно он также может загружать шрифты

dukeofgaming
источник
1
Это «вопрос о том, какую технологию использовать», и поэтому, вероятно, ее следует закрыть.
Лоран Кувиду

Ответы:

4

Популярный фреймворк - графический интерфейс Crazy Eddie .

Но в то время как это привлекательно, это не редкость, чтобы бросить свой собственный (и, возможно, сожалеть об этом, поскольку объем увеличивается позже;))

Это нормально, чтобы ваши глифы были на растровых изображениях, а затем рисовать растровые изображения с помощью OpenGL.

Иногда вы показываете временный текст, который может появиться только для нескольких кадров. Достаточно просто использовать GL_QUADS + glVertex. Но для любого большого количества текста или любой длительной видимости стоит поместить GL_QUADS в VBO - я заметил значительное улучшение производительности от этого.

Существует, конечно, вопрос о создании необходимых вам глифов. Есть программы, такие как bmfont, которые вы можете использовать для этого. Или вам может потребоваться более сложный рендеринг, например, freetype по запросу. Я довольно успешно использую bmfont с моим собственным рендерером, его очень просто вывести.

Будет
источник
9

Есть много способов - в зависимости от того, что вы хотите ... Как и везде, не существует чего-то вроде "лучшего решения". Какая платформа ваша цель? Какой язык вы используете? Как насчет изменения размера / поворота текста - это необходимо? Нужно ли иметь возможность рендерить TrueTypeFonts? А как насчет мультиязычности / юникода? Как вы хотите хранить свой текст (какая кодировка и т. Д.)?

В прошлом я использовал также FTGL, а также чистый freetype (http://www.freetype.org/ FTGL основан на этом), различные виды растровых шрифтов, контурные шрифты ... Теперь я в основном зависим от растровых изображений шрифты, но это только мое личное предпочтение. Потому что я больше не хочу иметь дело с различными кодировками, кодировкой и тому подобным - и лицензирование для растровых шрифтов также проще и дешевле, чем для TrueTypeFonts. И его можно использовать на любой платформе, которая может загружать изображения. Я использую просто четырехугольник в openGL и наношу на него часть моей текстуры. Другая сторона: шрифт будет иметь только чистый размер с коэффициентом +/- 50%. Если вы можете жить с этим, я бы предложил использовать растровый шрифт.

Если вам также приходится иметь дело с различными кодировками / кодировками, вы должны найти способ загрузить и использовать TrueTypeFonts (например, с freetype, с использованием другой библиотеки или с вашей собственной реализацией) ...

Также взгляните на различные учебники по этой теме:

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13 Растровые шрифты

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14 Контурные шрифты

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 Контурные шрифты с текстурой

http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 Шрифт 2D-текстуры

Удачи!

Constantin
источник
+1 Спасибо за ценную информацию о производительности, я знал об уроках NeHe. Я думаю, что я использовал растровые шрифты ... но он не масштабировался: около 60 надписей, плавающих в сцене над сферами, соединенными линиями, есть какое-нибудь понимание этого? (Я думал, что должен был бы найти способ реализовать шаблон с
наименьшим весом
1
Внимание: учебные пособия NeHe предназначены для старого конвейера с фиксированными функциями и не обновляются часто. Если вы ищете современный OpenGL решение см stackoverflow.com/questions/5262951/...
brita_
6

Если вы хотите использовать растровые шрифты, вы не ошибетесь с Генератором растровых шрифтов Angelcode: http://www.angelcode.com/products/bmfont/

Он преобразует шрифт истинного типа в одну или несколько текстур (с красиво упакованными глифами) и выводит небольшой файл, содержащий UV и интервалы (я считаю, что с выходом XML особенно легко работать, и качество данных о расстоянии обычно очень хорошо даже без настоящего кернинга)

bluescrn
источник
0

Рассмотрим QML . Это полностью функциональная библиотека пользовательского интерфейса с простым в использовании синтаксисом. По моему опыту, его набор функций значительно лучше, чем CEGUI, и он имеет лучшую документацию, поддержку и сообщество, так как его основной целью являются приложения для настольных компьютеров, а возможность рендеринга за кадром является своего рода бонусом.

Плюсы:

  • Он использует OpenGL на серверной части для всего рендеринга
  • Он может загрузить любой шрифт, доступный для хост-системы, а также может анализировать дополнительные шрифты, которые вы включаете в качестве ресурсов
  • Он использует визуализацию текста поля со знаком для эффективного и качественного вывода
  • Он может визуализироваться непосредственно в текстуру OpenGL, поэтому вы можете легко разместить результаты в игровой среде.
  • Qt имеет много языковых привязок

Минусы:

  • Qt - большая структура
  • Для использования QML в проектах Direct3D или Vulkan необходимо прыгать через обручи, чтобы вставить текстуру GL в соответствующий API (или ждать, пока кто-нибудь напишет собственные средства визуализации D3D / Vulkan для QML)
  • В QML все еще есть небольшие особенности, когда он пытается использовать встроенный элемент управления, даже если вы рендеритесь на неэкранную поверхность, например, когда вы пытаетесь открыть раскрывающийся список для элемента списка.
Jherico
источник