2010-02-08 19 views
3

Je suis actuellement en train de suivre la leçon tutoriel NeHe 43 (http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43). Le code fonctionne de manière satisfaisante uniquement pour le texte anglais, pas pour les langues Unicoded. Heureusement, je suis un lien de NeHe leçon 43 à http://www.cs.northwestern.edu/~sco590/fonts_tutorial.html et trouvé un autre exemple de tutoriel identique avec une seule différence: il utilise w_char, et le site prétend que vous pouvez utiliser une langue autre que l'anglais.Problème de rendu du texte unicode non-anglais en utilisant la police freetype sur OpenGL

Je donne un essai:

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

la fonction impression espace de noms freetype a le 4ème argument * const unsigned short ** Je typecasted il. Je mets aussi un L devant la chaîne entre guillemets pour les caractères longs et met des caractères asiatiques à des fins de test.

Le résultat est que tout le texte anglais peut très bien s'afficher, mais tous les caractères thaïs deviennent "[] B [] I [] 5H [] 8". Les [] sont des cases carrées. D'après ce que je comprends, cela implique que la police n'a pas la langue spécifiée, donc j'ai essayé d'autres polices, mais toutes les autres polices thaïlandaises donnent ces mêmes boîtes carrées. Pour la police japonaise, c'est pareil. Toutes les cases avec quelques caractères anglais à côté d'eux. La sous-chaîne öáæé est rendue très bien sans aucun problème.

Est-ce que j'oublie quelque chose ici? Comment pouvons-nous afficher la langue Unicode non-anglais ici?

+0

Pourriez-vous linker votre lien NeHe? – genpfault

+0

Lié comme demandé. – Karl

Répondre

2

Heureusement, l'auteur a téléchargé une version modifiée de son tutoriel dans son site Web (spécifié dans la question) et il utilise wchar_t (dans la version originale, l'auteur utilise * const unsigned short ** comme argument dans l'impression fonction), qui autorise les langues autres que l'anglais.

2

Il semble que print() dans la leçon 43 ne soit même pas proche de la capacité Unicode. Tout ce que fait NeHe est de créer 256 listes d'affichage pour les 256 premiers caractères ASCII, n'acceptant pas une chaîne UTF8 et la convertissant en UTF32 pour FreeType.

La translittération en C++ a très bien fonctionné pour moi.

De même, récupérez une copie du GNU Unifont pour vous assurer que vous avez des glyphes pour tous les BMP.