Frage

Ich folge derzeit der NeHe-Tutorial-Lektion 43 ( http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=43).Der Code funktioniert nur für englischen Text zufriedenstellend, nicht für Unicode-Sprachen.Glücklicherweise folge ich einem Link aus NeHe-Lektion 43 zu http://www.cs.northwestern.edu/~sco590/fonts_tutorial.html und habe ein weiteres identisches Tutorial-Beispiel mit nur einem Unterschied gefunden:Es verwendet w_char und die Website behauptet, dass Sie sie in einer anderen Sprache als Englisch ausführen können.

Also probiere ich es mal aus:

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

die Funktion drucken des Namensraums Freetype hat das 4. Argument als *const unsigned short**, also habe ich es typisiert.Außerdem habe ich für lange Zeichen ein L vor die Zeichenfolge in doppelte Anführungszeichen gesetzt und zu Testzwecken einige asiatische Zeichen eingefügt.

Das Ergebnis ist, dass der gesamte englische Text einwandfrei angezeigt werden kann, alle thailändischen Zeichen jedoch zu „[]B[]I[]5H[]8“ werden.Die [] sind quadratische Kästchen.Soweit ich weiß, bedeutet dies, dass die Schriftart nicht die angegebene Sprache hat, also habe ich andere Schriftarten ausprobiert, aber alle anderen thailändischen Schriftarten weisen dieselben quadratischen Kästchen auf.Für die japanische Schriftart gilt dasselbe.Alle Kästchen mit einigen englischen Zeichen daneben.Der Teilstring öáæé wird problemlos und problemlos gerendert.

Vergesse ich hier etwas?Wie können wir hier eine nicht-englische Unicode-Sprache anzeigen?

War es hilfreich?

Lösung

Glücklicherweise hat der Autor eine modifizierte Version seines Tutorials auf seiner Website hochgeladen (in der Frage angegeben) und diese verwendet wchar_t (in der Originalversion verwendet der Autor *const unsigned short** als Argument in der Druckfunktion), was erlaubt nicht-englische Sprachen.

Andere Tipps

Es sieht so aus, als ob print() in Lektion 43 nicht einmal annähernd Unicode-fähig ist.NeHe erstellt lediglich 256 Anzeigelisten für die ersten 256 ASCII-Zeichen, akzeptiert keine UTF8-Zeichenfolge und konvertiert sie in UTF32 für FreeType.

Transliterieren Das in C++ hat bei mir recht gut funktioniert.

Besorgen Sie sich außerdem eine Kopie davon GNU Unifont um sicherzustellen, dass Sie für alle Glyphen haben BMP.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top