Бажаний спосіб візуалізації тексту у OpenGL [закрито]


17

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

Моє запитання: чи є для цього хороша та ефективна бібліотека? Якщо ні, то який би спосіб здійснити швидкий, але приємний вигляд тексту? Деякі цільові використання:

  • Мітки плаваючого предмета / символу
  • Діалоги
  • Меню
  • HUD

EDIT: Переважно, він також може завантажувати шрифти


1
Це "в якій технології використовувати питання", і тому, ймовірно, слід закрити.
Лоран Кувіду

Відповіді:


4

Популярна основа - це GUI Crazy Eddie .

Але, хоча це привабливо, незвично прокручувати своє власне (і, можливо, шкодувати про це, оскільки область розширення пізніше збільшується;))

Нормально мати свої гліфи на растрових зображеннях, а потім малювати растрові карти за допомогою OpenGL.

Іноді ви показуєте перехідний текст, який може з’являтися лише для декількох кадрів. Просто використання GL_QUADS + glVertex буде достатньо. Але для будь-якої великої кількості тексту або будь-якої тривалої видимості варто застосувати GL_QUADS у VBO - я помітив великі покращення продуктивності від цього.

Звичайно, виникає питання про генерування власне необхідних гліфів. Є такі програми, як bmfont, які ви можете використовувати для цього. Або вам може знадобитися досить складне візуалізація, наприклад, вільний вид на вимогу. Я використовую bmfont разом із власним рендером досить щасливо, це досить просто вивести.


9

Існує маса способів - залежно від того, що ти хочеш ... Як і скрізь, не існує щось на кшталт "найкращого рішення". Яка платформа ваша ціль? Якою мовою ви користуєтесь? Що стосується зміни / обертання тексту - чи потрібно це? Чи потрібно мати можливість відображати TrueTypeFonts? Що про багатомовність / Unicode? Як ви хочете зберігати текст (яке кодування тощо)?

Раніше я використовував також FTGL, а також чистий вільний тип (http://www.freetype.org/ FTGL заснований на цьому), різного роду шрифти растрових зображень, контури шрифтів ... Зараз я здебільшого захоплююся растровою картою шрифти, але це лише мої особисті переваги. Тому що я не хочу більше працювати з різними шаблонами, кодуваннями та подібними елементами - і ліцензування для растрових шрифтів також легше і дешевше, ніж для TrueTypeFonts. І його можна використовувати на кожній платформі, яка може завантажувати зображення. Я просто використовую квадратик у openGL і зображую на ньому частину моєї текстури. Інша сторона полягає в тому, що: шрифт буде лише чистим, змінюючи розмір, з коефіцієнтом приблизно +/- 50%. Якщо ви можете жити з цим, я б запропонував використовувати растровий малюнок.

Якщо вам також доводиться мати справу з різними кодуваннями / діаграмами, ви повинні знайти спосіб завантаження та використання TrueTypeFonts (як, наприклад, вільний тип, використання іншої бібліотеки або власної реалізації) ...

Подивіться також різні підручники з цієї теми:

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 шрифт текстури

Удачі!


+1 Дякую за цінну інформацію про продуктивність, я знав про підручники NeHe. Я думаю, я використовував растрові шрифти ... але це не масштабувало: близько 60 міток, що плавають у сцені над сферами, з'єднаними лініями, будь-яке розуміння цього? (Я думав, що мені слід було б шукати спосіб втілити
полегшений

1
Застереження: Підручники NeHe призначені для старого конвеєра фіксованих функцій і не оновлюються часто. Якщо ви шукаєте сучасний OpenGL рішення см stackoverflow.com/questions/5262951 / ...
brita_

6

Якщо ви хочете використовувати растрові шрифти, ви не можете піти не так з генератором шрифтів Angelcode Bitmap: http://www.angelcode.com/products/bmfont/

Він перетворює шрифт Truetype в одну або декілька текстур (з добре упакованими гліфами) і виводить невеликий файл, що містить УФ-випромінювання та проміжки (я вважаю, що з XML-результатом особливо легко працювати, і якість даних про інтервал зазвичай є дуже добре, навіть без справжнього кернінгу)



0

Розглянемо QML . Це повністю функціональна бібліотека інтерфейсу користувача з простим у використанні синтаксисом. Набір функцій значно кращий, ніж CEGUI, на мій досвід, і він має кращу документацію, підтримку та спільноту, оскільки його основною ціллю є настільні додатки, а можливість візуалізації екрана - це лише бонус.

Плюси:

  • Він використовує OpenGL на задньому кінці для всього візуалізації
  • Він може завантажувати будь-який шрифт, доступний для хост-системи, а також може аналізувати додаткові шрифти, які ви включаєте як ресурси
  • Він використовує підписане дистанційне подання тексту поля для ефективного та якісного виведення
  • Він може відображати безпосередньо текстуру OpenGL, тому ви можете легко розміщувати результати в ігровому середовищі
  • Qt має багато мовних прив’язок

Мінуси:

  • Qt - це велика рамка
  • Використання QML в проектах Direct3D або Vulkan вимагає перестрибування обручів, щоб отримати текстуру GL у відповідний API (або чекати, коли хтось напише рідні рендери D3D / Vulkan для QML)
  • У QML все ще є незначні примхи, де він намагатиметься використовувати нативний елемент керування, навіть якщо ви переходите на поверхню екрана, як, наприклад, коли ви намагаєтесь відкрити спадне місце для елемента списку.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.