Многоязычный рендеринг Unicode в opengl

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

Платформа разработки является Windows (XP|Vista|7), увы с помощью Delphi Embercardero 2010.

Я в настоящее время использую wglOutLineFont (...) для создания дисплейного списка моего шрифта и glCallLists(length(m_Text), UNSIGNED_SHORT, PWchar(m_Text) ) представлять мои строки.

В то время как это выполнимо для латинского 1 Символа, создавание полного набора символов Unicode заранее является довольно трудоемким (приблизительно 8,5 минут на моей машине), таким образом, я ищу более эффективное решение. Я думал об ограничении диапазона от u+0020 - u+077f (латинский, греческий, кириллица, арабский и иврит) включать просто глифы, в которых я нуждаюсь, но это просто было бы решением для моих текущих потребностей и станет недостаточным, после того как другое кодирование необходимо.

На позитивном аспекте я не должен волноваться о слева направо или справа налево направление, поскольку наше приложение уже может обработать это.

Я ожидал бы, что это будет известной проблемой, таким образом, я хотел бы спросить, существует ли какой-либо ссылочный материал по этому в сети, или если Вы могли бы совместно использовать некоторое понимание на этом?

Отредактируйте разъяснение: Я использую многоугольный шрифт представления. Каждый Шрифт создается в размере единицы (1.0) заранее и масштабируется соответственно с помощью glScalef(...) перед рендерингом. Я действительно отказывался предварительно растеризировать, так как пользователи могли бы увеличить масштаб вполне тесно (Приложение используется для CAD), таким образом, rastering артефакты стали бы видимыми.

Кроме того, так как сцена редко превышает более затем несколько сотен символов (главным образом маркировки и измерения), выигрыш в быстродействии от предварительной растеризации незначителен.

7
задан Cœur 6 October 2018 в 11:59
поделиться

3 ответа

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

3
ответ дан 7 December 2019 в 10:00
поделиться

Мне повезло с транслитерацией этого руководства на C ++, хотя я не уверен, насколько хорошо оно будет перенесено в Delphi.

1
ответ дан 7 December 2019 в 10:00
поделиться

Вам необходимо заменить wglOutLineFont .

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

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

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

2
ответ дан 7 December 2019 в 10:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: