3

現在、NeHe チュートリアル レッスン 43 ( http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43 ) に従っています。このコードは、Unicode 言語ではなく、英語のテキストに対してのみ十分に機能します。幸いなことに、NeHe のレッスン 43 からhttp://www.cs.northwestern.edu/~sco590/fonts_tutorial.htmlへのリンクをたどると、1 つだけ異なる同じチュートリアル サンプルが見つかりました。英語以外の言語で実行できます。

だから私はそれを試してみます:

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

名前空間freetypeの関数printは 4 番目の引数が *const unsigned short** であるため、型キャストしました。また、長い文字の二重引用符で囲まれた文字列の前に L を置き、テスト目的でアジアの文字をいくつか入れました。

その結果、英語のテキストはすべて問題なく表示されますが、タイ文字はすべて「[]B[]I[]5H[]8」になります。[] は四角いボックスです。私が理解していることから、これはフォントに指定された言語がないことを意味するため、他のフォントを試してみましたが、他のすべてのタイ語フォントはこれらの同じ正方形のボックスを提供します. 日本語フォントも同様です。それらの横にいくつかの英語の文字と一緒にすべてのボックス。部分文字列 öáæé は問題なくレンダリングされています。

私はここで何かを忘れていますか?英語以外の Unicode 言語をここに表示するにはどうすればよいですか?

4

2 に答える 2

2

レッスン 43 の print() は、ほとんど Unicode に対応していないようです。NeHe が行っているのは、最初の 256 個の ASCII 文字に対して 256 個のディスプレイ リストを作成することだけです。UTF8 文字列を受け入れず、FreeType 用に UTF32 に変換します。

これを C++ に書き直すことは、私にとっては非常にうまくいきました。

また、GNU Unifontのコピーを入手して、すべてのBMPのグリフがあることを確認してください。

于 2010-02-08T14:28:20.807 に答える
2

幸いなことに、著者は自分の Web サイト (質問で指定) にチュートリアルの修正版をアップロードしており、wchar_t を使用しています (元のバージョンでは、著者は print 関数の引数として *const unsigned short** を使用しています)。英語以外の言語を許可します。

于 2010-02-09T06:43:26.923 に答える