OpenGL und TTF Fonts

  • OpenGL und TTF Fonts

    Hi,

    ich würde gerne programmatisch aus ttf-Dateien die Zeichen in OpenGL als 3D Modelle erzeugen. Dabei würde ich diese auch noch gerne ändern können, also das ich sie z.B. facettieren kann etc. Gut wäre auch wenn man Ihnen einen Outline verpassen könnte. Macht man das dann über die Texture oder wie geht das ?

    Ich bin ziemlich neu in dem Thema OpenGL, mit ttf kenne ich mich gut aus und habe mit der freetype lib schon die ärgsten Dinge gemacht, bis hin zur programmatischen Modifizierung der einzelnen Glyphen.

    Wie gehe ich da am besten vor. Wo gibt es da gute Doku oder Bücher zu genau diesem Thema ?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Bei einer Textur sind die ganzen Details weg. Wenn Du die Glyphen behalten willst, musst Du sie in OpenGL-Geometrie umwandeln. Ich mache das normalerweise so:

    String -> Glyphen -> Bezier Paths -> flatten -> Tesselieren (z.B. GLUtesselator)

    Die Flat Paths sind die Kontouren, der Tesselator gibt die Deckflächen zurück. Extrude, Facetten usw. sind dann geometrische Fummelei.
    Multigrad - 360°-Produktfotografie für den Mac
  • Hi,

    schonmal danke für die Info. Bis zum flatten den Bezier Path war es mir fast klar das es so läuft (wenn es denn keine fertigen API's dafür gegeben hätte). Das mit dem Tesselieren ist eigentlich auch logisch, wenn ich auch nicht gewußt hätte wie man das nennt :)
    Alles in allem also schon recht viel Eigenarbeit und nicht viel fertiges dabei.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • OpenGL ist halt sehr low level, aber hey, wenn alles schon fertig wäre, wär's ja gar kein Spaß mehr ;)

    Unter OSX sind alle Einzelschritte eigentlich schon fertig, man muss sie nur noch zusammendengeln. Unter iOS fehlt das flatten, aber da hatte ich irgendwo mal was in der Richtung gepostet - aah, hier. Und irgendwo müsste es angenehmere Tesselatoren geben als den von glu, der ist zwar grundsätzlich gut aber die API ist etwas, ääh, eckig. Insgesamt lohnt es sich - sieht schick aus.
    Multigrad - 360°-Produktfotografie für den Mac
  • Brauchst Du unbedingt die 3D-Modelle der Fonts oder willst Du eigentlich nur Text rendern? oglft und ftgl basieren auf Display-Listen, die sind seit OpenGL3 deprecated. Falls das auf Deinem Zielsystem kein Problem ist, würde ich das Rad nicht neu erfinden.
    Wenn Du aber eh neu in OpenGL bist, empfehle ich Dir, gleich OpenGL3 aufwärts zu lernen, das ganze legacy-Zeug ist tot bzw. auf den mobilen Geräten gar nicht erst auferstanden.

    Vorgehensweise: eine Glyphliste bauen, eigenen Layouter schreiben, alles mit freetype

    Für 3D-Fonts: Pfad wie oben beschrieben extrahieren, Tesselieren und dann mit einer VBO/VAO-Lösung und simplen Shader rendern.
    Für 2D-Textrendering: Font mittels freetype in eine Textur speichern, dann einen Quad-basierten VBO aus der Glyphliste bauen (bzw. 2Tris), einen Shader fürs Antialiasing benutzen.
    Beide Varianten lassen sich mit Instancing und Texture-Samplern für das Glyphrendering noch aufbohren. Also richtig schön lowlevel-Kram, wie in alten Zeiten...:-)
  • Hi Markus,

    ja ich brauche die Fonts als richtige 3D Modelle.

    Das mit dem OpenGL3 ist zwar nett, aber da fehlt es mir an einführender Literatur. Ich denke es ist auch kein Problem mit dem alten OpenGL zu arbeiten da das System für das ich entwickele embedded ist.
    Was ist VBO/VAO ?

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)