glLineWidth
Inhaltsverzeichnis
glLineWidth
Name
glLineWidth - definiert die Breite mit der Linien gezeichnet werden
Delphi-Spezifikation
procedure glLineWidth(width : TGLfloat);
Parameter
width | Definiert die Breite mit der Linien gezeichnet werden sollen. Der Vorgabewert ist 1. |
---|
Beschreibung
glLineWidth setzt die Breite, mit der Linien gezeichent werden. Dies gilt unabhängig davon, ob Antialiasing eingeschaltet ist. Bei einer Breite, die nicht dem Standardwert von 1 entspricht, kann es bei aktiviertem Antialiasing zu unterschiedlichen Darstellungen kommen. Antialiasing kann für Linien mittels glEnable und dem Token GL_LINE_SMOOTH eingeschaltet und mittels glDisable (und GL_LINE_SMOOTH) wieder ausgeschaltet werden.
Antialiasing für Linien ist bei der Initalisierung deaktiviert.
Wenn Antialiasing für Linien deaktiviert ist, wird die tatsächliche Breite durch Runden auf den nächstgelegenen Integer-Wert ermittelt. (Wenn das Rundungsergebnis den Wert 0 ergeben sollte, wird so weiter gearbeitet als sei die Linienbreite 1). Falls | Δx | >= | Δy |, werden i Pixel in jeder Spalte gefüllt, wobei i der Rundungswert der Breite ist. Ansonsten wird jede gezeichnete Reihe mit i Pixel gefüllt.
Wenn Antialiasing allerdings eingeschaltet wurde, wird ein Rechteck mit der Breite und Länge der Linie um die Linie herum berechnet. Jedes Pixel, das teilweise oder vollständig in dem Rechteck liegt wird dann gezeichnet, es wird also ein Fragment erzeugt. Zusätzlich wird berechnet wieviel Prozent dieses Pixels in dem Rechteck liegen. Dieser Wert wird dann als "Coverage Value" (Überdeckungsgrad) je nach Antialias Modus weiterverarbeitet. Bei einigen Modi wird dieser Wert, z.B. in den Alpha Kanal kopiert und kann zum Blenden benutzt werden. (Bei der NVidia Demo Dawn wurden auf diese Weise die Haare gezeichnet.)
Wenn Antialiasing aktiviert ist können nicht alle Breiten unterstützt werden. Wenn eine nicht unterstützte Breite angefordert wird, wird die nächste unterstützte Breite verwendet. Nur die Breite "1.0" wird garantiert unterstützt, andere Breiten sind abhängig von der jeweiligen Implementierung. Um die Spanne der möglichen Breiten und die Größenabstände zwischen den unterstützen Breiten abzufragen, kann glGet mit den Tokens GL_LINE_WIDTH_RANGE bzw. GL_LINE_WIDTH_GRANULARITY benutzt werden.
Hinweise
Die eingestellte Breite der Linien wird immer zurückgegeben, wenn GL_LINE_WIDTH abgefragt wird. Clamping und Runden beim Antialising kann eine Auswirkung auf die dargestellte Breite haben. Dies wird jedoch bei dem Rückgabewert nicht berücksichtigt.
Bei Linien die nicht kantengeglättet werden, wird die Breite auf ein implementationsabhängiges Limit beschränkt. Obwohl dieses Maximum nicht abgefragt werden kann, darf es nicht kleiner sein als das Maximum für kantengeglättete Linien, gerundet auf den nächsten Ganzzahlwert.
Beispiele
Auf dem folgenden Bild ist die Verwendung von glLineWidth demonstriert. Unter Verwendung von glBegin(GL_LINES) werden drei Linien untereinander gezeichnet. Jede erhält jedoch eine andere Breite zugewiesen. Deutlich erkennt man, wie die Dicke der Linie zunimmt.
Fehlermeldungen
GL_INVALID_VALUE wird generiert, wenn die Breite kleiner oder gleich Null ist.
GL_INVALID_OPERATION wird generiert, wenn glLineWidth zwischen einem glBegin und dem dazugehörigen glEnd ausgeführt wird.
Zugehörige Wertrückgaben
glGet mit Token GL_LINE_WIDTH
glGet mit Token GL_LINE_WIDTH_RANGE
glGet mit Token GL_LINE_WIDTH_GRANULARITY
glGet mit Token GL_LINE_SMOOTH