Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Textausgabe in OpenGL (https://www.delphipraxis.net/28689-textausgabe-opengl.html)

erniepb 28. Aug 2004 11:49


Textausgabe in OpenGL
 
Hallo liebe leuts

Ich hätte da mal n wahrscheinlich ganz einfach Frage: Aber wie kann ich in OpenGL an einer Koordinate (x,y,z) einen Text ausgeben?

Mfg ..

Jörn 28. Aug 2004 23:09

Re: Textausgabe in OpenGL
 
Kann man so direkt gar nicht. Man kann nur Quads im Orthogonalen Modus anzeigen lassen, wo die Schrift als Textur drauf ist. Schau mal nach delphigl.com, die haben da Templates für OGL 1.5, da steht das auch drin.

Mr_T 29. Aug 2004 08:10

Re: Textausgabe in OpenGL
 
Liste der Anhänge anzeigen (Anzahl: 1)
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 ;)

Jörn 29. Aug 2004 11:53

Re: Textausgabe in OpenGL
 
So ungefähr machens ja auch die Leute von delphigl.com

MfG

Mr_T 29. Aug 2004 13:37

Re: Textausgabe in OpenGL
 
:wiejetzt: Öhm ... und wenn du das so genau weißt, weiso behaupteste denn oben noch das ginge so direkt nicht?
Ich mein, es geht ja sehr gut ... man kann die Anfangsmarke für den text sich aussuchen und da den Text darstellen ... :gruebel: :?:

Jörn 29. Aug 2004 15:52

Re: Textausgabe in OpenGL
 
Sorry ist nur ein Missverständnis - ich wollte damit nur sagen, dass es keine vorgefertigte Funktion in OGL gibt, sondern das es selbst gebastelt werden muss.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:11 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz