Проблема с отображением неанглийского текста в Unicode с использованием шрифта freetype в OpenGL - PullRequest
3 голосов
/ 08 февраля 2010

В настоящее время я слежу за учебным уроком 43 NeHe (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43). Код работает удовлетворительно только для английского текста, а не для языков Unicoded. К счастью, я перешел по ссылке с урока 43 NeHe на 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);

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

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

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

Ответы [ 2 ]

2 голосов
/ 09 февраля 2010

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

2 голосов
/ 08 февраля 2010

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

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

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

...