wglUseFontOutlines: Unterschied zwischen den Versionen
DGLBot (Diskussion | Beiträge) K (Bot: konvertiere/korrigiere <BR>) |
DGLBot (Diskussion | Beiträge) K (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.) |
||
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt) | |||
Zeile 50: | Zeile 50: | ||
== Beschreibung == | == Beschreibung == | ||
− | Aus einer True Font Schrifteinstellung eines Device Contextes werden [[ | + | Aus einer True Font Schrifteinstellung eines Device Contextes werden [[Displayliste]]n generiert. Diese enthalten dann die gewünschten Zeichen als [[Polygone]] oder als Linen. Wobei immer ein Zeichen in einer Displayliste enthalten ist. |
Falls ein Fehler auftritt wird false statt true zurückgeben und keine Display Listen erzeugt. Nähere Informationen zum aufgetretenen Fehler erhält man mit der Funktion GetLastError. | Falls ein Fehler auftritt wird false statt true zurückgeben und keine Display Listen erzeugt. Nähere Informationen zum aufgetretenen Fehler erhält man mit der Funktion GetLastError. | ||
Zeile 63: | Zeile 63: | ||
=== Quelltext === | === Quelltext === | ||
− | <pascal> | + | <source lang="pascal"> |
var | var | ||
FontLists:Cardinal; | FontLists:Cardinal; | ||
Zeile 118: | Zeile 118: | ||
ShowText('Test'); | ShowText('Test'); | ||
end; | end; | ||
− | </ | + | </source> |
== Hinweise == | == Hinweise == | ||
Zeile 127: | Zeile 127: | ||
Die '''wglUseFontOutlines'''-Funktion nähert sich den Schriftumrissen an, indem eine quadratischs B-Spline Kurve des Umrisses in Liniensegmente unterteilt wird, und zwar solange bis die Distanz zwischen den Umrissen und dem interpolierten Mittelpunkt nahe dem in ''deviation'' angegebenen Wert ist. Dies ist dann das finale Ausgabeformat, wenn ''format'' gleich '''GL_FONT_LINES''' ist. | Die '''wglUseFontOutlines'''-Funktion nähert sich den Schriftumrissen an, indem eine quadratischs B-Spline Kurve des Umrisses in Liniensegmente unterteilt wird, und zwar solange bis die Distanz zwischen den Umrissen und dem interpolierten Mittelpunkt nahe dem in ''deviation'' angegebenen Wert ist. Dies ist dann das finale Ausgabeformat, wenn ''format'' gleich '''GL_FONT_LINES''' ist. | ||
Wenn jedoch '''WGL_FONT_OUTLINES''' als Format gewählt wird, dann enthalten die Displaylisten keinerlei Normalen, Beleuchtung wird dann also nicht funktionieren. Um korrekte Beleuchtung zu erhalten, muss man die Fonts dann mit '''WGL_FONT_POLYGONS''' erstellen und mit [[glPolygonMode]]('''GL_FRONT''', '''GL_LINE''') darstellen. Wenn als Format '''WGL_FONT_POLYGONS''' angegeben wird, werden die Umrisse in Dreicke, Dreieck-Fächer, Dreieck-Anreihungen oder Rechtecke unterteilt. Mit '''WGL_FONT_POLYGONS''' erstellte Displaylisten rufen [[glFrontFace]]('''GL_CW''') oder [[glFrontFace]]('''GL_CCW''') auf, so dass die aktuelle Einstellung für Vorderseiten verändert werden kann. Um die beste Darstellung für diesen Schrifttyp zu gewährleisten, sollten die Rückseiten gecullt werden : | Wenn jedoch '''WGL_FONT_OUTLINES''' als Format gewählt wird, dann enthalten die Displaylisten keinerlei Normalen, Beleuchtung wird dann also nicht funktionieren. Um korrekte Beleuchtung zu erhalten, muss man die Fonts dann mit '''WGL_FONT_POLYGONS''' erstellen und mit [[glPolygonMode]]('''GL_FRONT''', '''GL_LINE''') darstellen. Wenn als Format '''WGL_FONT_POLYGONS''' angegeben wird, werden die Umrisse in Dreicke, Dreieck-Fächer, Dreieck-Anreihungen oder Rechtecke unterteilt. Mit '''WGL_FONT_POLYGONS''' erstellte Displaylisten rufen [[glFrontFace]]('''GL_CW''') oder [[glFrontFace]]('''GL_CCW''') auf, so dass die aktuelle Einstellung für Vorderseiten verändert werden kann. Um die beste Darstellung für diesen Schrifttyp zu gewährleisten, sollten die Rückseiten gecullt werden : | ||
− | <pascal> | + | <source lang="pascal"> |
glCullFace(GL_BACK); | glCullFace(GL_BACK); | ||
glEnable(GL_CULL_FACE); | glEnable(GL_CULL_FACE); | ||
− | </ | + | </source> |
Eine '''GLYPHMETRICSFLOAT'''-Struktur enthält Informationen über die Platzierung und Ausrichtung eines jeden Charakters. Der ''lpgmf''-Parameter ist ein Zeiger auf eine Reihe von diesen Strukturen, um den kompletten Zeichensatz halten zu können. Jede Displayliste endet daher mit einer über ''gmfCellIncX'' und ''gmfCellIncY'' (Eigenschaften von '''GLYPHMETRICSFLOAT''') angebebenen Translation. | Eine '''GLYPHMETRICSFLOAT'''-Struktur enthält Informationen über die Platzierung und Ausrichtung eines jeden Charakters. Der ''lpgmf''-Parameter ist ein Zeiger auf eine Reihe von diesen Strukturen, um den kompletten Zeichensatz halten zu können. Jede Displayliste endet daher mit einer über ''gmfCellIncX'' und ''gmfCellIncY'' (Eigenschaften von '''GLYPHMETRICSFLOAT''') angebebenen Translation. |
Aktuelle Version vom 10. März 2009, 19:22 Uhr
Inhaltsverzeichnis
wglUseFontOutlines
Name
wglUseFontOutlines - Erzeugt Displaylisten mit 3D Buchstaben.
Delphi-Spezifikation
function wglUseFontOutlines(DC: HDC; first, count, listBase: DWORD; deviation, extrusion: Single; format: Integer; lpgmf : PGlyphMetricsFloat): 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 |
deviation | Gibt die maximale Abweichung zur True Schrift vor |
extrusion | Tiefe der Zeichen(muss positiv sein) |
format | Legt fest ob die Buchstaben aus Linen oder Polygonen bestehen. |
lpgmf | Optionaler Puffer in den zusätliche Informationen zu den Zeichen geschrieben werden.(Siehe GLYPHMETRICSFLOAT) |
Beschreibung
Aus einer True Font Schrifteinstellung eines Device Contextes werden Displaylisten generiert. Diese enthalten dann die gewünschten Zeichen als Polygone oder als Linen. Wobei immer ein Zeichen in einer Displayliste enthalten ist.
Falls ein Fehler auftritt wird false statt true zurückgeben und keine Display Listen erzeugt. Nähere Informationen zum aufgetretenen Fehler erhält man mit der Funktion GetLastError.
Beispiel
Bild
Quelltext
var
FontLists:Cardinal;
agmf:array [0..255] of GLYPHMETRICSFLOAT ;
procedure NachAktivierung;
var
CustomFont:HFont;
begin
FontLists := glGenLists(256);
(*CustomFont := GetStockObject (SYSTEM_FONT);*)//Eine Alternative zu CreateFont
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
glEnable(GL_POINT_SMOOTH);
SelectObject(glControl1.DC, CustomFont);
wglUseFontOutlines(glControl1.DC,
0, //Von Zeichen #0
255, //Bis Zeichen #255
FontLists,
0, //So genau wie möglich
0.2, //0.2 LE tiefe Buchstaben
WGL_FONT_LINES,//Linen keine Polygone
@agmf);//Speichere dort die Informationen
end;
procedure ShowText(pText:String);
begin
glListBase(FontLists);// Liste auswählen
glCallLists(Length(pText), GL_UNSIGNED_BYTE, Pointer(pText));
end;
procedure Zeichne;
begin
glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT);
glLoadIdentity;
glColor3f(1,1,0);//Farbe Gelb
glTranslatef(-1,0,-2);//Position festlegen
ShowText('Test');
end;
Hinweise
Die wglUseFontOutlines-Funktion definiert die Zeichen eines Umrissfonts mit Displaylisten im aktuellen Renderkontext. Genutzt werden können dazu jedoch nur TrueType-Fonts, alle anderen Font-Typen werden nicht unterstützt.
Jede Displayliste besteht entweder aus Liniensegementen oder Polygonen, und hat eine eindeutige Identifizierungsnummer, die bei listBase beginnt.
Die wglUseFontOutlines-Funktion nähert sich den Schriftumrissen an, indem eine quadratischs B-Spline Kurve des Umrisses in Liniensegmente unterteilt wird, und zwar solange bis die Distanz zwischen den Umrissen und dem interpolierten Mittelpunkt nahe dem in deviation angegebenen Wert ist. Dies ist dann das finale Ausgabeformat, wenn format gleich GL_FONT_LINES ist. Wenn jedoch WGL_FONT_OUTLINES als Format gewählt wird, dann enthalten die Displaylisten keinerlei Normalen, Beleuchtung wird dann also nicht funktionieren. Um korrekte Beleuchtung zu erhalten, muss man die Fonts dann mit WGL_FONT_POLYGONS erstellen und mit glPolygonMode(GL_FRONT, GL_LINE) darstellen. Wenn als Format WGL_FONT_POLYGONS angegeben wird, werden die Umrisse in Dreicke, Dreieck-Fächer, Dreieck-Anreihungen oder Rechtecke unterteilt. Mit WGL_FONT_POLYGONS erstellte Displaylisten rufen glFrontFace(GL_CW) oder glFrontFace(GL_CCW) auf, so dass die aktuelle Einstellung für Vorderseiten verändert werden kann. Um die beste Darstellung für diesen Schrifttyp zu gewährleisten, sollten die Rückseiten gecullt werden :
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE);
Eine GLYPHMETRICSFLOAT-Struktur enthält Informationen über die Platzierung und Ausrichtung eines jeden Charakters. Der lpgmf-Parameter ist ein Zeiger auf eine Reihe von diesen Strukturen, um den kompletten Zeichensatz halten zu können. Jede Displayliste endet daher mit einer über gmfCellIncX und gmfCellIncY (Eigenschaften von GLYPHMETRICSFLOAT) angebebenen Translation.