wglUseFontBitmaps: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Siehe auch)
 
(16 dazwischenliegende Versionen von 8 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 
= wglUseFontBitmaps =
 
= wglUseFontBitmaps =
  
 +
 +
 +
== Name ==
 +
'''wglUseFontBitmaps''' - Erzeugt aus der Schrifteinstellungen des [[Device Context]] eine Reihe von [[glBitmap]] Befehlen für die Buchstaben und speichert diese in [[Displaylisten]].
 
<br>
 
<br>
== Name ==
 
'''wglUseFontBitmaps''' - Erzeugt aus der Schrifteinstellungen des [[Display Context]] eine Reihe von [[glBitmap]] Befehlen für die Buchstaben und speichert diese in Display Listen.
 
  
<br>
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  
  <b>function</b> wglUseFontBitmaps (<b><i>DC</i></b>: HDC; <b><i>p2</i></b>, <b><i>p3</i></b>, <b><i>p4</i></b>: DWORD): BOOL;
+
  '''function''' wglUseFontBitmaps ('''''DC''''': HDC; '''''first''''', '''''count''''', '''''listBase''''': DWORD): BOOL;
 +
 
 +
 
 +
 
  
{| border = 10 cellspacing=0
 
|'''''Parameter sind nicht gerade aussagekräfig und stimmen nicht mit der Delphi Hilfe überein. Nur leider stehen sie so in der DGLopenGL.pas'''''
 
|}
 
<br>
 
  
 
== Parameter ==
 
== Parameter ==
Zeile 21: Zeile 21:
 
| Ein Display Context mit entsprechenden Font-Einstellungen.
 
| Ein Display Context mit entsprechenden Font-Einstellungen.
 
|-
 
|-
! ''p1 / first''
+
! ''first''
 
| Mit welchen Zeichen soll begonnen werden
 
| Mit welchen Zeichen soll begonnen werden
 
+
|-
! ''p2 / count''
+
! ''count''
 
| Anzahl der zu erzeugenden Listen/Zeichen
 
| Anzahl der zu erzeugenden Listen/Zeichen
 
+
|-
! ''p3 / listBase''
+
! ''listBase''
 
| Der Name/Index der Liste für das erste Zeichen
 
| Der Name/Index der Liste für das erste Zeichen
 
|}
 
|}
  
<br>
 
  
== Beschreibung ==
 
Die Schrifteinstellungen des [[Display Context]]es werden genutzt, um mit [[glBitmap]]-Befehlen die angebenen Zeichen in [[Display Listen]] zu speichern.
 
Wenn ein Fehler auftritt wird statt '''true''', '''false''' zurückgegeben und der Fehler kann über GetLastError abgerufen werden.
 
  
<br>
+
 
 +
== Beschreibung ==
 +
Die Schrifteinstellungen des [[Device Context]]es werden genutzt, um mit [[glBitmap]]-Befehlen die angebenen Zeichen in [[Displaylisten]] zu speichern.
 +
Wenn ein Fehler auftritt, wird statt '''true''', '''false''' zurückgegeben und der Fehler kann über [[GetLastError]] abgerufen werden.
 +
 
 
== Hinweise ==
 
== Hinweise ==
 
Jede Display Liste erhält logischerweise nur einen [[glBitmap]] Aufruf.
 
Jede Display Liste erhält logischerweise nur einen [[glBitmap]] Aufruf.
Zeile 49: Zeile 49:
 
== Beispiel ==
 
== Beispiel ==
  
<b>var</b>
+
Zum Erstellen der Bitmapfonts gibt es wie üblich mehrere Wege. Einmal den Weg direkt über die Windowsapi oder den Weg über die Delphiklasse TFont. Das Zeichnen bleibt bei beiden gleich. Aus diesem Grund ist es auch vom Rest ein wenig getrennt.
  FontLists:Cardinal;
+
 
<br>
+
=== Procedural ===
<b>procedure </b>CreateLists;<font color="#000080"><i>// Wird einmal am Anfang aufgerufen</i></font>
+
<source lang="pascal">
<b>var</b>
+
var
  CustomFont:HFont;
+
  FontLists: Cardinal;
<b>begin
+
 
  </b>FontLists := glGenLists(<font color="#000080">256</font>);
+
 
  <font color="#000080"><i>(*CustomFont := GetStockObject (SYSTEM_FONT);*)//Eine Alternative zu CreateFont</i></font>
+
procedure CreateLists; // Wird einmal am Anfang aufgerufen
  CustomFont := CreateFont(
+
var
                            <font color="#000080">32</font>,                  <font color="#000080"><i>// H&ouml;he</i></font>
+
  CustomFont: HFont;
                            0,                  <font color="#000080"><i>// Breite 0=Keine Vorgabe</i></font>
+
begin
                            0,
+
  FontLists := glGenLists(256);
                            0,
+
 
                            0,                  <font color="#000080"><i>// Fett?</i></font>
+
 
                            0,                  <font color="#000080"><i>// Kursiv?</i></font>
+
  // CustomFont := GetStockObject (SYSTEM_FONT);
                            0,                  <font color="#000080"><i>// Unterstrichen?</i></font>
+
  // Eine Alternative mit der man die Systemschriftart zurück bekommt.
                            0,                  <font color="#000080"><i>// Durchgestrichen?</i></font>
+
 
                            ANSI_CHARSET,
+
 
                            OUT_TT_PRECIS,
+
  CustomFont := CreateFont(
                            CLIP_DEFAULT_PRECIS,
+
                          32,                  // Höhe
                            NONANTIALIASED_QUALITY,
+
                          0,                  // Breite 0=Keine Vorgabe
                            FF_DONTCARE <b>or </b>DEFAULT_PITCH,
+
                          0,
                            <font color="#FF2222">'Times New Roman'</font>); <font color="#000080"><i>// Name der Schrift</i></font>
+
                          0,
  SelectObject(glControl1.DC, CustomFont);
+
                          0,                  // Fett?
  wglUseFontBitmaps (glControl1.DC, 0, 255, FontLists);
+
                          0,                  // Kursiv?
  <b>end</b>;
+
                          0,                  // Unterstrichen?
<br>
+
                          0,                  // Durchgestrichen?
<b>procedure</b> ShowText(pText:<b>String</b>);
+
                          ANSI_CHARSET,
<b>begin
+
                          OUT_TT_PRECIS,
    </b>glListBase(FontLists); <font color="#000080"><i>//Liste auswählen</i></font>
+
                          CLIP_DEFAULT_PRECIS,
    glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText));<font color="#000080"><i>//Entsprechende Listen aufrufen</i></font>
+
                          NONANTIALIASED_QUALITY,
<b>end</b>;
+
                          FF_DONTCARE or DEFAULT_PITCH,
<br>
+
                          'Times New Roman');  // Name der Schrift
<b>procedure </b>Draw;<font color="#000080"><i>//Zeichen Routine</i></font>
+
 
<b>begin</b>
+
 
  glClear(GL_COLOR_BUFFER_BIT <b>or </b>GL_DEPTH_BUFFER_BIT);
+
  SelectObject(DC, CustomFont);              // Font auf einen Device Context benutzen
  glColor3f(1,0.5,0);<font color="#000080"><i>//Aktuelle Farbe f&uuml;r glRasterPos festlegen</i></font>
+
  wglUseFontBitmaps (DC, 0, 255, FontLists);  // Mit selektiertem Font Zeichen erstellen
  glRasterPos3f(-0.1,0,-1); <font color="#000080"><i>//(sichtbare) Rasterposition eintellen</i></font>
+
end;
  ShowText(<font color="#FF2222">'OpenGL'</font>);
+
</source>
  ShowText(<font color="#FF2222">' Wiki'</font>);<font color="#000080"><i>//Steht nach &quot;OpenGL&quot; da glBitmap die Rasterposition verschiebt.</i></font>
+
 
<b>end</b>;
+
=== Objekt orientiert ===
 +
 
 +
<source lang="pascal">
 +
var
 +
  Font: TFont;
 +
 
 +
 
 +
procedure CreateLists; // Wird einmal am Anfang aufgerufen
 +
begin
 +
  FontLists := glGenLists(256);
 +
 
 +
 
 +
  Font := TFont.Create;  // Instanz einer Fontklasse erstellen
 +
  try
 +
    Font.Name := 'Times New Roman'; // Name
 +
    Font.Size := 32;                // Schriftgröße
 +
    Font.Style := [fsBold];        // Styles (fsBold, fsItalic, ...)
 +
   
 +
 
 +
    SelectObject(DC, Font.Handle);             // Font auf einen Device Context benutzen
 +
    wglUseFontBitmaps (DC, 0, 255, FontLists); // Mit selektiertem Font Zeichen erstellen
 +
  finally
 +
    FreeAndNil(Font); // erstellte Instanz wieder frei geben
 +
  end;
 +
end;
 +
</source>
 +
 
 +
=== Bitmapfonts benutzen ===
 +
 
 +
<source lang="pascal">
 +
procedure ShowText(pText: AnsiString);
 +
begin
 +
  glListBase(FontLists); // Liste auswählen
 +
  glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText)); // Entsprechende Listen aufrufen
 +
end;
 +
 
 +
 
 +
procedure Draw; // Zeichen Routine
 +
begin
 +
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
 +
  glColor3f(1,0.5,0);       // Aktuelle Farbe für glRasterPos festlegen
 +
  glRasterPos3f(-0.1,0,-1); // (sichtbare) Rasterposition eintellen
 +
  ShowText('OpenGL ');
 +
  ShowText('Wiki');         // Steht nach "OpenGL" da glBitmap die Rasterposition verschiebt.
 +
end;
  
 +
</source>
  
 
==Siehe auch ==
 
==Siehe auch ==

Aktuelle Version vom 16. November 2010, 18:57 Uhr

wglUseFontBitmaps

Name

wglUseFontBitmaps - Erzeugt aus der Schrifteinstellungen des Device Context eine Reihe von glBitmap Befehlen für die Buchstaben und speichert diese in Displaylisten.

Delphi-Spezifikation

function wglUseFontBitmaps (DC: HDC; first, count, listBase: DWORD): BOOL;



Parameter

DC Ein Display Context mit entsprechenden Font-Einstellungen.
first Mit welchen Zeichen soll begonnen werden
count Anzahl der zu erzeugenden Listen/Zeichen
listBase Der Name/Index der Liste für das erste Zeichen



Beschreibung

Die Schrifteinstellungen des Device Contextes werden genutzt, um mit glBitmap-Befehlen die angebenen Zeichen in Displaylisten zu speichern. Wenn ein Fehler auftritt, wird statt true, false zurückgegeben und der Fehler kann über GetLastError abgerufen werden.

Hinweise

Jede Display Liste erhält logischerweise nur einen glBitmap Aufruf.

Da der glBitmap Befehl genutzt wird ändert sich die Rasterposition nach aufruf einer Liste.

Falls für ein Zeichen in der gewählten Schrift keine Daten vorliegen wird für dieses Zeichen eine leere Displayliste zurückgegeben.

Die durch diese Funktion unter Windows zur Verfügung stehende Schrift hat eine festgelegte Größe und ist logischerweise nur 2D. Möchte man eine 3D-Schrift haben so kann man dafür den Befehl wglUseFontOutlines benutzen.

Beispiel

Zum Erstellen der Bitmapfonts gibt es wie üblich mehrere Wege. Einmal den Weg direkt über die Windowsapi oder den Weg über die Delphiklasse TFont. Das Zeichnen bleibt bei beiden gleich. Aus diesem Grund ist es auch vom Rest ein wenig getrennt.

Procedural

var
  FontLists: Cardinal;


procedure CreateLists; // Wird einmal am Anfang aufgerufen
var
  CustomFont: HFont;
begin
  FontLists := glGenLists(256);
  

  // CustomFont := GetStockObject (SYSTEM_FONT);
  // Eine Alternative mit der man die Systemschriftart zurück bekommt.
  

  CustomFont := CreateFont(
                           32,                  // Höhe
                           0,                   // Breite 0=Keine Vorgabe
                           0,
                           0,
                           0,                   // Fett?
                           0,                   // Kursiv?
                           0,                   // Unterstrichen?
                           0,                   // Durchgestrichen?
                           ANSI_CHARSET,
                           OUT_TT_PRECIS,
                           CLIP_DEFAULT_PRECIS,
                           NONANTIALIASED_QUALITY,
                           FF_DONTCARE or DEFAULT_PITCH,
                           'Times New Roman');  // Name der Schrift
  

  SelectObject(DC, CustomFont);               // Font auf einen Device Context benutzen
  wglUseFontBitmaps (DC, 0, 255, FontLists);  // Mit selektiertem Font Zeichen erstellen
end;

Objekt orientiert

var
  Font: TFont;


procedure CreateLists; // Wird einmal am Anfang aufgerufen
begin
  FontLists := glGenLists(256);
  

  Font := TFont.Create;  // Instanz einer Fontklasse erstellen
  try
    Font.Name := 'Times New Roman'; // Name
    Font.Size := 32;                // Schriftgröße
    Font.Style := [fsBold];         // Styles (fsBold, fsItalic, ...)
    

    SelectObject(DC, Font.Handle);              // Font auf einen Device Context benutzen
    wglUseFontBitmaps (DC, 0, 255, FontLists);  // Mit selektiertem Font Zeichen erstellen
  finally
    FreeAndNil(Font);  // erstellte Instanz wieder frei geben
  end;
end;

Bitmapfonts benutzen

procedure ShowText(pText: AnsiString);
begin
   glListBase(FontLists);  // Liste auswählen
   glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText));  // Entsprechende Listen aufrufen
end;


procedure Draw;  // Zeichen Routine
begin
  glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
  glColor3f(1,0.5,0);        // Aktuelle Farbe für glRasterPos festlegen
  glRasterPos3f(-0.1,0,-1);  // (sichtbare) Rasterposition eintellen
  ShowText('OpenGL ');
  ShowText('Wiki');          // Steht nach "OpenGL" da glBitmap die Rasterposition verschiebt.
end;

Siehe auch

glBitmap, glListBase, glCallLists, wglUseFontOutlines