Проблема с рендерингом текста не на английском языке в юникоде с использованием шрифта freetype в OpenGL

StackOverflow https://stackoverflow.com/questions/2219952

Вопрос

В настоящее время я следую уроку NeHe tutorial урок 43 ( http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43).Код удовлетворительно работает только с английским текстом, а не с однокодированными языками.К счастью, я перехожу по ссылке из урока NeHe 43 на http://www.cs.northwestern.edu /~sco590/fonts_tutorial.html и нашел еще один идентичный обучающий образец только с одним отличием:он использует w_char, и сайт утверждает, что вы можете работать на языке, отличном от английского.

Так что я даю ему попробовать:

freetype::print(our_font, 320, 200, (unsigned short*)L"Active FreeType Text หกโด้กี่ดุ öáæé おはよ。- %7.2f", cnt1);

функция Печать пространства имен свободный тип имеет 4-й аргумент как *const unsigned short **, поэтому я набрал его.Я также поставил букву L перед строкой, заключенной в двойные кавычки, для длинных символов и вставил несколько азиатских символов для целей тестирования.

В результате весь английский текст может отображаться просто отлично, но все тайские символы становятся "[]B []I[] 5H [] 8".[] - это квадратные прямоугольники.Насколько я понимаю, это подразумевает, что шрифт не имеет указанного языка, поэтому я попробовал другие шрифты, но все остальные тайские шрифты выдают такие же квадратные рамки.Для японского шрифта это то же самое.Все поля вместе с несколькими английскими символами рядом с ними.Подстрока öáæé отрисовывается просто отлично, без каких-либо проблем.

Я здесь что-то забыл?Как мы можем отобразить здесь неанглийский язык Unicode?

Это было полезно?

Решение

К счастью, автор загрузил измененную версию своего руководства на свой веб-сайт (указанный в вопросе), и в нем используется wchar_t (в оригинальной версии автор использует *const unsigned short ** в качестве аргумента в функции печати), что позволяет использовать неанглоязычные языки.

Другие советы

Похоже, что функция print() в уроке 43 даже близко не поддерживает Unicode.Все, что делает NeHe, - это создает 256 списков отображения для первых 256 символов ASCII, не принимая строку UTF8 и преобразуя ее в UTF32 для FreeType.

Транслитерация это переход на C ++ сработал для меня довольно хорошо.

Кроме того, возьмите копию GNU Unifont чтобы убедиться, что у вас есть глифы для всех БМП.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top