Ich bin dabei, Computergrafik für ein Universitätsprojekt noch einmal in die Hand zu nehmen. Bei einem früheren Projekt habe ich eine Bibliothek namens FTGL verwendet , die mich nicht ganz zufrieden stellte, da sie sich ziemlich schwer anfühlte (ich habe viele Rendering-Techniken ausprobiert, Text-Rendering war nicht sehr gut skalierbar ).
Meine Frage ist, gibt es dafür eine gute und effiziente Bibliothek? Wenn nicht, wie könnte man schnell aber gut aussehenden Text implementieren? Einige Verwendungszwecke sind:
- Schwimmende Objekt- / Zeichenbeschriftungen
- Dialoge
- Menüs
- HUD
BEARBEITEN: Vorzugsweise könnte es auch Schriftarten laden
Antworten:
Ein beliebtes Framework ist die GUI von Crazy Eddie .
Aber während das ansprechend ist, ist es nicht ungewöhnlich, das eigene zu rollen (und es vielleicht zu bereuen, da der Umfang später zunimmt;))
Es ist normal, Ihre Glyphen in Bitmaps zu haben und diese dann mit OpenGL zu zeichnen.
Manchmal wird vorübergehender Text angezeigt, der möglicherweise nur für eine Handvoll Frames angezeigt wird. Es reicht aus, nur GL_QUADS + glVertex zu verwenden. Aber für jede große Textmenge oder für jede lange Sichtbarkeit lohnt es sich, den GL_QUADS in einen VBO zu integrieren - ich habe große Leistungsverbesserungen festgestellt.
Es ist natürlich die Frage, die tatsächlichen Glyphen zu generieren, die Sie benötigen. Es gibt Programme wie bmfont , die Sie dafür verwenden können. Oder Sie benötigen ein etwas komplizierteres Rendering, z. B. Freetype on Demand. Ich habe bmfont sehr gerne mit meinem eigenen Renderer verwendet, es ist sehr einfach abzuleiten.
quelle
Es gibt viele Möglichkeiten - je nachdem, was Sie wollen ... Wie überall sonst gibt es nicht so etwas wie "die beste Lösung". Welche Plattform ist Ihr Ziel? Welche sprache sprichst du Was ist mit der Größenänderung / Drehung von Text - ist das notwendig? Müssen Sie in der Lage sein, TrueTypeFonts zu rendern? Was ist mit Multilanguage / Unicode? Wie möchten Sie Ihren Text speichern (welche Kodierung etc.)?
Ich habe in der Vergangenheit auch FTGL verwendet, sowie reinen Freetype (http://www.freetype.org/ FTGL basiert darauf), verschiedene Arten von Bitmap-Schriften, Outline-Schriften ... Jetzt bin ich meistens bitmap-süchtig Schriften, aber das ist nur meine persönliche Vorliebe. Da ich mich nicht mehr mit verschiedenen Zeichensätzen, Codierungen und Ähnlichem befassen möchte, ist die Lizenzierung für Bitmapfonts auch einfacher und billiger als für TrueTypeFonts. Und es kann auf jeder Plattform verwendet werden, die Bilder laden kann. Ich benutze einfach ein Quad in openGL und ordne einen Teil meiner Textur darauf zu. Die andere Seite ist: Die Schriftgröße wird nur um einen Faktor von +/- 50% geändert. Wenn Sie damit leben können, würde ich vorschlagen, ein Bitmapfont zu verwenden.
Wenn Sie auch mit verschiedenen Kodierungen / Zeichensätzen zu tun haben, sollten Sie eine Möglichkeit finden, TrueTypeFonts zu laden und zu verwenden (wie bei freetype, mit einer anderen Bibliothek oder mit Ihrer eigenen Implementierung) ...
Schauen Sie sich auch nehes verschiedene Tutorials zu diesem Thema an:
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=13 Bitmap-Schriftarten
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=14 Gliederungsschriftarten
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=15 Texture Mapped Outline Fonts
http://nehe.gamedev.net/data/lessons/lesson.asp?lesson=17 2D Texture Font
Viel Glück!
quelle
Wenn Sie Bitmap-Schriften verwenden möchten, können Sie mit dem Angelcode Bitmap Font Generator nichts falsch machen: http://www.angelcode.com/products/bmfont/
Es konvertiert eine TrueType-Schriftart in eine oder mehrere Texturen (mit schön gepackten Glyphen) und gibt eine kleine Datei mit den UV-Werten und Abständen aus (ich finde, dass die XML-Ausgabe besonders einfach zu verarbeiten ist und die Qualität der Abstandsdaten im Allgemeinen ist sehr gut, auch ohne Kerning
quelle
Ich verwende die Bibliotheken von Sean Barret , um TrueType-Glyphen unter OpenGL (stb_image, stb_truetype) zu rendern.
Das Recast / Detour-Projekt verwendet diese Bibliotheken, um eine Benutzeroberfläche ( IMUI ) zu erstellen.
quelle
Betrachten Sie QML . Es ist eine voll funktionsfähige UI-Bibliothek mit einer einfach zu verwendenden Syntax. Sein Funktionsumfang ist meiner Erfahrung nach deutlich besser als der von CEGUI. Außerdem bietet es eine bessere Dokumentation, Unterstützung und Community, da Desktopanwendungen das Hauptziel sind und die Fähigkeit, Offscreen zu rendern, nur eine Art Bonus ist.
Vorteile:
Nachteile:
quelle