私の意見では、一般的な問題は、ビットマップフォントと組み合わせた文字エンコードです。ほとんどの多言語エンコーディングには、さまざまな文字タイプの間に大きなスペースがあり、そこには未使用のコードポイントがたくさんあります。したがって、それらを使用したい場合は、多くのメモリを浪費します(マルチバイトテキストを保存するためだけでなく、ビットマップフォントのスペースのために特別に意味します)。VRAMはほとんどの場合非常に価値があります...したがって、唯一の合理的なことはつまり、UTF-8文字のテクスチャでカスタムマッピングを使用します(スペースが無駄にならないようにするため)。しかし、この取り組みは、独自の文字エンコードを使用する場合と同じように見えます(したがって、テクスチャ内の文字の順序も独自のものです)。私の特別なケースでは、4096の異なる文字のテクスチャスペースがあり、日本語だけでなくラテン語も表示するための文字が必要です(一般的なcjkコードページのみをサポートするutf-8の混乱)。誰かが同じような問題を抱えたことはありますか(そうでない場合は本当に疑問に思います)?すでにアプローチがある場合は?
編集:同じ問題がここhttp://www.tonypottier.info/Unicode_And_Japanese_Kanji/で説明されていますが、これらのビットマップフォントマッピングをutf-8スペース効率で保存する方法を実際に解決することはできません。だから、さらなる助けは大歓迎です!
Edit2:
ご回答どうもありがとうございました。申し訳ありませんが、私の問題は十分に明確に説明されていませんでした。
私が本当に解決したいのは、CJKUnicodeの範囲が20000文字を超えていることです。ただし、日本語のテキストを正しく表示するには、約2000文字のサブセットのみが必要です。これらのキャラクターは、U+4E00からU+9FA5の範囲に広がっています。したがって、これらのUnicodeコードポイント(日本語の場合は2000のみ)を、作成したテクスチャの座標に変換する必要があります(文字を好きなように並べ替えることができます)。
つまり、U + 4E03は日本語の文字ですが、U + 4E04、U + 4E05、U+4E06はそうではありません。そして、U+4E07も日本語のキャラクターです。したがって、最も簡単な解決策は次のとおりです。文字U + 4E03の後に、テクスチャに3つのスペースを残し(または不要な文字U + 4E04、U + 4E05、U + 4E06をそこに書き込み)、次にU+4E07と書き込みます。しかし、これは非常に多くのテクスチャスペースを浪費します(2000文字だけが必要な場合でも20000文字)。だから私は自分のテクスチャだけを入れられるようにしたい:「... U + 4E03、U +4E07...」。しかし、displayText関数の記述方法がわかりません。表示したいグリフのテクスチャ座標がどこにあるかわからないためです。ハッシュマップなどが必要になりますが、これらのデータを保存する方法がわかりません(... {U + 4E03、128}、{U + 4E07、 129} ... hasmapを埋めるため)。
質問へ:1)特定の形式はありません-したがって、displayText関数を自分で作成します。2)ユニコードに反対する理由はありません-私のビットマップフォントのCJK範囲の問題だけです。3)それは一般的にプラットフォームと言語に依存しないと思いますが、私の場合、Mac OS X/iOSでOpenGLでC++を使用しています。
ご助力ありがとうございます!これについてさらにアイデアがあれば、それは本当に私を大いに助けてくれるでしょう!