Text ausgeben: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (3D Schriften mit Windows)
K (Überschriftenverschachtelung beginnt bei Ebene 2 (an Wikipedia-Standard angelehnt))
 
(16 dazwischenliegende Versionen von 11 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
='''Anleitung'''- Wie gebe ich mit OpenGL Text aus.=
 
 
 
Allen Möglichkeiten gemein ist das die Buchstaben in [[Liste]]n gespeichert werden um so per [[glCallLists]] den Text ausgeben zu können.
 
Allen Möglichkeiten gemein ist das die Buchstaben in [[Liste]]n gespeichert werden um so per [[glCallLists]] den Text ausgeben zu können.
  
Zeile 13: Zeile 11:
  
 
=== Farbe ===
 
=== Farbe ===
Die [[Farbe]] der Schrift wird zum Zeitpunkt des letzen [[glRasterPos]] Aufrufes festgelegt.
+
Die [[Farbe]] der Schrift wird zum Zeitpunkt des letzen [[glRasterPos]] Aufrufes festgelegt. Auch wenn danach die atkive Farbe mit [[glColor]] abgeändert wird, ändert sich hierdurch nichts an der Farbe mit der die Buchstaben ausgegeben werden. (siehe [[glRasterPos]])
 +
 
 +
 
 +
 
  
<br>
 
 
== 3D Schriften mit Windows ==
 
== 3D Schriften mit Windows ==
  
Zeile 21: Zeile 21:
  
 
{|
 
{|
|+Das kann dan so aussehen:
+
|+Das kann dann so aussehen:
 
|[[Bild:WglUseFontOutlines Beispiel.png]]
 
|[[Bild:WglUseFontOutlines Beispiel.png]]
 
|}
 
|}
Zeile 27: Zeile 27:
  
 
== Schrift aus Texturen ==
 
== Schrift aus Texturen ==
(Sogenannte Bitmapfonts)
+
(Sogenannte Texturefonts)
 +
 
 +
Benötigt wird für diese Technik eine Textur, auf dem alle 256 Zeichen untergebracht sind. Die Anordnung der Zeichen ist prinzipiell beliebig, nur sollte man dies so tun, dass man nachher leicht die Position der einzelnen Zeichen auf der Textur herausfindet. (z.B. indem man die Zeichen als 16x16 Zeichen Matrix anordnet).
  
Benötigt wird für diese Technik eine Textur, auf dem alle 256 Zeichen untergebracht sind. Die Anordnung der Zeichen ist prinzipiell beliebig, nur sollte man dies so tun, dass man nachher leicht die Position der einzelnen Zeichen auf der Textur herausfindet. (z.B. indem man die Zeichen als 16x16 Zeichen Matrix anordnet)<br>
+
Zusätzliche Informationen über die Breite der Buchstaben, ermöglicht es gleich große Zwischenräume zwischen den einzenen Buchstaben zu haben.
Die Textur [[Matrix]] wird dann mit  [[glScale]] und [[glTranslate]] so manipuliert das das mit [[glBegin]], [[glTexCoord]] und [[glVertex]] gezeichnete Rechteck immer nur ein Zeichen enthält.  
+
Entsprechende [[Tool]]s erleichtern die Erstellung solcher Texturen.
 +
 
 +
Die Textur [[Matrix]] wird dann mit  [[glScale]] und [[glTranslate]] so manipuliert, dass das mit [[glBegin]], [[glTexCoord]] und [[glVertex]] gezeichnete Rechteck immer nur ein Zeichen enthält.  
 
('''glScale''' ist eigentlich nicht nötig, da ein mit [[glTexCoord]] abgesteckter Texturabschnitt automatisch auf die Größe des unterligenden Polygons (gezeichnet mit [[glBegin]]-[[glEnd]] und [[glVertex]]) gedehnt wird.)
 
('''glScale''' ist eigentlich nicht nötig, da ein mit [[glTexCoord]] abgesteckter Texturabschnitt automatisch auf die Größe des unterligenden Polygons (gezeichnet mit [[glBegin]]-[[glEnd]] und [[glVertex]]) gedehnt wird.)
  
Um nur die Buchstaben ohne den Hintergrund (der Textur) zu sehen sollte mittels [[Blenden|Blending]] dieser heraus gefiltert werden.
+
Um nur die Buchstaben ohne den Hintergrund (der Textur) zu sehen sollte dieser mittels [[Blenden|Blending]] oder (wenn man scharfe Kanten möchte) mittels [[glAlphaFunc]] heraus gefiltert werden.
  
 
=== Position ===
 
=== Position ===
Zeile 39: Zeile 43:
  
 
=== Farbe ===
 
=== Farbe ===
Die Farbe der Schrift auf der Textur sollte weiß sein damit man mit [[glColor]] die Textur einfärben und damit alle Farben anzeigen lassen kann.
+
Wenn man eine einfarbige Schrift möchte, so empfiehlt es sich die Textur komplett Weiß zu machen, damit man mit [[glColor]] die Textur einfärben kann und damit alle Farben anzeigen lassen kann. Dies kann beispielsweise auch mittels
 +
[[glPixelTransfer]]f( GL_RED_BIAS, 1.0 );
 +
[[glPixelTransfer]]f( GL_GREEN_BIAS, 1.0 );
 +
[[glPixelTransfer]]f( GL_BLUE_BIAS, 1.0 );
 +
vor dem Erstellen der Textur erfolgen.
 +
Der eigentliche Zeichensatz sollte (sofern man einfarbige Schrift möchte) nur den Alpha-Kanal beeinflussen, was beispielsweise mittels
 +
[[gluBuild2DMipmaps]]( GL_TEXTURE_2D, 2, Texturbreite, Texturhoehe, GL_ALPHA, GL_UNSIGNED_BYTE, Pixel );
 +
gemacht werden kann. Zu beachten ist hier, dass 2 oder 4 Farbkomponenten benötigt werden damit die Textur Alphawerte erhält.
 +
 
 +
Falls der Text nicht im dreidimensionalen Raum angezeigt werden soll, empfiehlt es sich den [[Tiefentest]] zu deaktivieren und die Projektions Matrix mit [[gluOrtho2D]] neu einzustellen.
 +
 
  
Falls der Text nicht im 3 demensionalen Raum angezeigt werden soll, empfiehlt es sich den [[Tiefentest]] zu deaktivieren und die Projektions Matrix mit [[gluOrtho2D]] neu einzustellen.
 
  
<br>
 
  
==Siehe auch==
+
== Siehe auch ==
 
[[glBegin]], [[glColor]], [[glScale]], [[glTranslate]], [[glTexCoord]], [[glVertex]]
 
[[glBegin]], [[glColor]], [[glScale]], [[glTranslate]], [[glTexCoord]], [[glVertex]]
  
[[Kategorie:Anleitung]]
+
[[Kategorie:Anleitung]][[Kategorie:Technik_oder_Algorithmus]]

Aktuelle Version vom 13. Oktober 2008, 18:43 Uhr

Allen Möglichkeiten gemein ist das die Buchstaben in Listen gespeichert werden um so per glCallLists den Text ausgeben zu können.

Buchstaben aus Pixeln

Die primitivste Art Buchtaben auszugeben besteht darin einfach glBitmap aufzurufen.

Falls das Betriebssystem Windows ist, kann mit wglUseFontBitmaps aus einer Windows Schrift glBitmap Befehle generiert, und in einer Liste abgespeichert werden.

Position festlegen

Die Position der Ausgabe erfolgt durch glRasterPos, oder besser falls verfügbar durch glWindowPos.

Farbe

Die Farbe der Schrift wird zum Zeitpunkt des letzen glRasterPos Aufrufes festgelegt. Auch wenn danach die atkive Farbe mit glColor abgeändert wird, ändert sich hierdurch nichts an der Farbe mit der die Buchstaben ausgegeben werden. (siehe glRasterPos)



3D Schriften mit Windows

Per wglUseFontOutlines wird aus einer Windows Schrift für jeden Buchstaben eine Liste erstellt, welche die entsprechenden Polygone enthält.

Das kann dann so aussehen:
WglUseFontOutlines Beispiel.png


Schrift aus Texturen

(Sogenannte Texturefonts)

Benötigt wird für diese Technik eine Textur, auf dem alle 256 Zeichen untergebracht sind. Die Anordnung der Zeichen ist prinzipiell beliebig, nur sollte man dies so tun, dass man nachher leicht die Position der einzelnen Zeichen auf der Textur herausfindet. (z.B. indem man die Zeichen als 16x16 Zeichen Matrix anordnet).

Zusätzliche Informationen über die Breite der Buchstaben, ermöglicht es gleich große Zwischenräume zwischen den einzenen Buchstaben zu haben. Entsprechende Tools erleichtern die Erstellung solcher Texturen.

Die Textur Matrix wird dann mit glScale und glTranslate so manipuliert, dass das mit glBegin, glTexCoord und glVertex gezeichnete Rechteck immer nur ein Zeichen enthält. (glScale ist eigentlich nicht nötig, da ein mit glTexCoord abgesteckter Texturabschnitt automatisch auf die Größe des unterligenden Polygons (gezeichnet mit glBegin-glEnd und glVertex) gedehnt wird.)

Um nur die Buchstaben ohne den Hintergrund (der Textur) zu sehen sollte dieser mittels Blending oder (wenn man scharfe Kanten möchte) mittels glAlphaFunc heraus gefiltert werden.

Position

Das Wo wird über die Koordinaten der Eckpunkte des unterliegenden Polygons geregelt. Welches Zeichen tatsächlich ausgegeben wird, bestimmen die Texturkoordinaten (übergeben mit glTexCoord).

Farbe

Wenn man eine einfarbige Schrift möchte, so empfiehlt es sich die Textur komplett Weiß zu machen, damit man mit glColor die Textur einfärben kann und damit alle Farben anzeigen lassen kann. Dies kann beispielsweise auch mittels

glPixelTransferf( GL_RED_BIAS, 1.0 );
glPixelTransferf( GL_GREEN_BIAS, 1.0 );
glPixelTransferf( GL_BLUE_BIAS, 1.0 );

vor dem Erstellen der Textur erfolgen. Der eigentliche Zeichensatz sollte (sofern man einfarbige Schrift möchte) nur den Alpha-Kanal beeinflussen, was beispielsweise mittels

gluBuild2DMipmaps( GL_TEXTURE_2D, 2, Texturbreite, Texturhoehe, GL_ALPHA, GL_UNSIGNED_BYTE, Pixel );

gemacht werden kann. Zu beachten ist hier, dass 2 oder 4 Farbkomponenten benötigt werden damit die Textur Alphawerte erhält.

Falls der Text nicht im dreidimensionalen Raum angezeigt werden soll, empfiehlt es sich den Tiefentest zu deaktivieren und die Projektions Matrix mit gluOrtho2D neu einzustellen.



Siehe auch

glBegin, glColor, glScale, glTranslate, glTexCoord, glVertex