3D Text mit openGL 3.3+
-
Hallo zusammen,
ich würde gerne 3D Text in mein aktuelles opengl projekt reinbringen. Ich verwende im Moment OpenGL 3.3 und zwar das core profile, ich möchte nichts was deprecated ist verwenden.
Ich habe mal ein bischen nach 3d text mit opengl gegoogled, habe aber hauptsächlich stark veraltete sachen gefunden.
Mit modernem opengl habe ich mehrere verschiedene ansätze gefunden, aber keine ausführlichen tutorials.
Also erstmal: Welcher Ansatz bietet sich an?
U.A. habe ich gefunden:
- ein viereck im raum malen und die buchstaben aus einer textur benutzen. Hierbei habe ich die Befürchtung, dass das nicht wirklich 3d rüberkommt, wenn man einfach nur eine Textur verwendet und dass das einbauen von zusätzlichen effekten evtl. schwierig wird
- Die Buchstaben als Geometrie malen (diesen Ansatz halte ich für vielversprechend, weil man dann ganz normal auch transformationen, shading und weitere effekte mit einbauen kann). Allerdings benötige ich dann ja die geometrien dazu (bisher lade ich alle meshes aus dem .obj format) und um die positionen zu berechnen, muss ich außerdem die größe jedes buchstabens kennen.
Ich habe dazu gelesen, dass das von der Performance nicht so gut sein soll, aber ich denke eigentlich nicht, dass das ein Problem wird, ich will ja nur ein paar Wörter mal anzeigen, mehr nicht. Und es werden dabei ja eigentlich nur ein paar ganz normale meshes gerendered.Und kennt ihr vll gute Tutorials, evtl auch Bücher oder Quellen für Meshes dafür am besten im obj. format o.ä. dazu?
Langfristig will ich vielleicht ein Feuereffekt zur Schrift hinzufügen aber ob das jemals was wird, weiß ich noch nicht
-
Also Tutorial kenne ich keines.
Es gibt auch nicht zu allem Tutorials. Je spezieller, je weniger Leute sowas implementieren, desto geringer die Chancen ein Tutorial zu finden. Und das was du suchst werden wohl nicht wirklich massig viele Leute implementieren.Entweder kannst du dich auf die Suche nach etwas fertigem machen, das Glyphen aus einem Font nimmt und da Polygone draus macht. Keine Ahnung ob sowas Open-Source zu finden ist.
Oder sonst könntest du es mit der FreeType2 probieren. Die kann "Vektorfonts" laden (True-Type, Open-Type) und dir die Outline zugänglich machen. z.B.:
http://www.freetype.org/freetype2/docs/reference/ft2-outline_processing.html#FT_Outline_DecomposeDer Funktion gibst du ein "Interface" mit in dem "Zeichenfunktionen" enthalten sind. FreeType2 ruft dann die diversen Funktionen aus deinem "Interface" auf, also MoveTo, LineTo, ConicTo und CubicTo.
MoveTo startet eine neue "Outline" (=eine geschlossene Kurve), die anderen Funktionen Zeichnen vom letzten übergebenen Punkt zu einem neuen Punkt. LineTo halt gerade, die beiden anderen malen schöne Bögen. Die Bezier-Funktionen für die Bögen musst du dann selbst implementieren. Damit kannst du schonmal Punktlisten erzeugen.
Und dann musst du noch aus den Outline-Daten ermitteln welche Seite "aussen" ist, und wie die Deckfläche Trianguliert werden muss damit die Löcher "stimmen".
Das wird vermutlich der "lustige" Teil (der Rest ist eher trivial).