OpenGL.org 3Dsource.de: Infos rund um 3D-Computergrafik, OpenGL und VRML
space Telefon-Tarife space VDI - Arbeitskreis Fahrzeugtechnik space Beschallungsanlagen und Elektroakustik space Heise-News space

17 Schriftarten nutzen

17.010 Wie kann ich Schriftarten in meine OpenGL Szene einbinden ?

Die OpenGL bietet keine direkte Unterstützung für die Schriftarten des jeweiligen Systems. Es ist aber möglich, die vorhandenen Methoden der OpenGL wie z.B. Bitmaps oder Pixmaps, Texturen, Linien oder Polygone in Buchstabenform usw. zu nutzen.

- Bitmaps und Pixmaps

Die wohl am häfigsten genutzte Methode stellen einzelne Buchstaben, definiert mittels glBitmap() oder glDrawPixels() dar.Damit erhält man einfachen 2D Text, der z.B. für die Beschriftung von Kontrollelementen verwendet werden kann.

Dabei ist glBitmap() am einfachsten und schnellsten. Die enthaltene Bitmaske gibt in einem rechteckigen Bereich an, welches Pixel mit der aktuellen Farbe geschrieben wird und welches nicht. Dagegen zeichnet glDrawPixels() immer ein vollständiges Rechteck in den Framebuffer, so dass der Hintergrund hier noch mittels Alpha-Test oder Blending entfernt werden muss.

Normalerweise definiert man für jedes glBitmap() eine eigene Display-Liste. So ist es dann leicht möglich, durch glCallLists() gleich mehrere Buchstaben anzuzeigen.

Unter X Windows (Unix) steht auch der Befehl glXUseXFont() zur Verfügung, mit dem sich passende Display-Listen für einen angegebenen Font einfach erzeugen lassen.

Unter MS Windows gibt es den Befehl wglUseFontBitmaps(), der vergleichbar zu glXUseXFont() arbeitet.

GLUT bietet den Befehl glutBitmapCharacter(), der allerdings nur mit speziellen GLUT Bitmap Schriftarten zusammenarbeitet und daraus erst ein mit OpenGL nutzbares Bitmap berechnet.

Texture Mapping

In vielen OpenGL Implementationen sind die Befehle glBitmap() und glDrawPixels() deutlich langsamer als das Zeichnen eines texturierten Objekts. Hier sollte man daher auf die texturierten Objekte zurückgreifen.

Die Grundidee ist es, eine einzelne Textur zu erzeugen, die bereits alle Buchstaben enthält. Das Zeichnen eines einzelnen Buchstaben wird dann über entsprechende Texturkoordinaten realisiert. Unerwünschte Hintergrundpixel lassen sich z.B. mittels Alpha-Test unterdrücken.

Bei diesem Link findet man Informationen u.a. zu texturierten Fonts. Eine Bibliothek dazu findet man auch hier. Auch GLUT enthält passende Beispiele. NeHe's Webseite bietet ein Tutorial zum Thema.

In der alten Version der FAQ war noch dieser Link enthalten.

Umriss-Schriften

Unter MS Windows gibt es den Befehl wglUseFontOutlines(). Die MSDN enthält auch Beispielprogramme zu dessen Verwendung.

Auch GLUT bietet mit der Funktion glutStrokeCharacter() Zugang zu spezifischen Umrisschriften von GLUT.

Geometrische Schriften (Objekte)

NeHe's Webseite hat ein Tutorial für die Beschreibung von Schriften als geometrische Objekte ins Netz gestellt. Das Tutorial nennt sich Outline Fonts.

17.020 Wie kann ich True Type Schriftarten einbinden ?

Auch hier gibt es Tutorials auf NeHe's Webseite.

Ausserdem kann man sich einmal die FreeType Bibliothek ansehen.

17.030 Wie kann ich 3D-Buchstaben beleuchten, schattieren und rotieren lassen ?

Zusätzlich zu den Links von Frage 17.020 unterstützt auch GLTT geometrische TrueType Schriften in OpenGL. Früher einmal auf Moonlight3D.org verfügbar, findet man GLTT jetzt an verschiedenen Stellen im Netz:

GLUT 3.7 enthält auch ein Beispielprogramm (progs/contrib/text3d.c).

Seite durchsuchen nach:

Fragen oder Ideen an:
Thomas.Kern@3Dsource.de
Linux-Counter
(C) Thomas Kern