Thema: Delphi Textausgabe in OpenGL

Einzelnen Beitrag anzeigen

Benutzerbild von Mr_T
Mr_T

Registriert seit: 7. Jun 2002
Ort: Eilsum
136 Beiträge
 
Delphi 2005 Personal
 
#3

Re: Textausgabe in OpenGL

  Alt 29. Aug 2004, 08:10
Das ist so nicht ganz richtig!
Man kann durchaus Text in OpenGL darstellen, sogar als 3D-Text mit Tiefe, usw.
Dazu muss man an sich zunächst mal eine Displayliste mit alles Buchstaben drin erzeugen, welches etwa so aussieht:

Delphi-Quellcode:
procedure BuildFont; // Build Our Font
var font: HFONT; // Windows Font ID
gmf : array [0..255] of GLYPHMETRICSFLOAT; // Address Buffer For Font Storage
begin
displayliste := glGenLists(256); // Storage For Characters
font := CreateFont(12, // Height Of Font
0, // Width Of Font
0, // Angle Of Escapement
0, // Orientation Angle
0, // Schrift Fett? Nein!
0, // Schrift Kursiv? Nein!
0, // Auch nicht unterstrichen….
0, // … oder gar durchgestrichen
ANSI_CHARSET, // Character Set Identifier
OUT_TT_PRECIS, // Output Precision
CLIP_DEFAULT_PRECIS, // Clipping Precision
ANTIALIASED_QUALITY, // Output Quality
FF_DONTCARE or DEFAULT_PITCH, // Family And Pitch
'Arial Black'); // Font Name
SelectObject(form1.myDC, font); // Die Schriftart Wählen
wglUseFontOutlines( form1.myDC, // Der Aktuelle DC
0, // Der erste “Buchstabe”
255, // Die gesamte Anzahl der Buchstaben
displayliste, // Die Displayliste
0.0, // Deviation From The True Outlines
0.3, // Die “Dicke” der Schrift in Z-Richtung
WGL_FONT_POLYGONS, // Wir wollen ganze Polygone, keine Linien
@gmf); // Unserer Puffer
end;
Dieser Code erzeugt in eine Displayliste den Font "Arial Black" in Schriftgröße 12 mit ansonsten Normalen Attributen.
Darstellen kann man den Text dann so:

Delphi-Quellcode:
procedure glPrint(text : pchar); // Custom GL "Print" Routine
begin
if (text = '') then // If There's No Text
Exit; // Do Nothing
glPushAttrib(GL_LIST_BIT); // Pushes The Display List Bits
glListBase(displayliste); // Sets The Base Character
glCallLists(length(text), GL_UNSIGNED_BYTE, text); // Draws The Display List Text
glPopAttrib(); // Pops The Display List Bits
end;
So, damit hat man denn auch schon alles zusammen (die erste Prozedur muss ganz am Anfang einmal ausgeführt worden sein... dazu braucht es noch eine globale Variable vom Typ "tglint", welche unsere Displayliste speichert). Nun kann man während des Renderns relativ leicht einen beliebeigen Text darstellen:

Delphi-Quellcode:
gltranslatef(-3,0,-9);
glcolor3f(0,0,1);
glprint('OGL mit Mr_T ;-)');
Aussehen tut das ganze denn (in diesem Falle) so, wie auf dem Bild, welches hier im Anhang ist.

Nähere Informationen, sowie ein kleines Beispielprogramm gibts auf meiner HP ... Kursteil 12 - 6 (Also 6. Kapitel des Kursteiles 12) müsste das sein
Miniaturansicht angehängter Grafiken
ogl_text.jpg  
Mein neuer, 13 Teiliger Open GL - Kurs (Samples in Delphi):
www.dcw-group.net
Neu! Ein großer Teil der Demos nach Kylix übersetzt!
Neu! Teil 2b: Initialisierung von OpenGL unter Kylix ist fertig!
  Mit Zitat antworten Zitat