glLineWidth: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K (Weitere Beispiele)
K (Kategorisierung)
 
(4 dazwischenliegende Versionen von einem anderen Benutzer werden nicht angezeigt)
Zeile 18: Zeile 18:
 
{| border="1" rules="all"
 
{| border="1" rules="all"
 
! ''width''
 
! ''width''
| Definiert die Breite mit der Linien gezeichnet werden sollen. <br> Der '''Vorgabewert''' ist 1.
+
| Definiert die Breite mit der Linien gezeichnet werden sollen. <br> Der Vorgabewert ist 1.
 
|}
 
|}
  
Zeile 24: Zeile 24:
  
 
== Beschreibung ==  
 
== Beschreibung ==  
'''glLineWidth''' setzt die Breite mit der Linien gezeichent werden. Dies gilt unabhängig davon, ob Antialiasing eingeschaltet ist.
+
'''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.
 
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. <br>
+
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.
 
Antialiasing für Linien ist bei der Initalisierung deaktiviert.
  
Zeile 35: Zeile 36:
 
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.
 
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.
  
 
 
==Weitere 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.
 
 
[[Bild:GlLineWidth.png]]
 
  
 
== Hinweise ==
 
== Hinweise ==
Zeile 48: Zeile 43:
  
  
 +
 +
==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.
 +
 +
[[Bild:GlLineWidth.png|center|framed|Auswirkung von '''glLineWidth''']]
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
'''GL_INVALID_VALUE''' wird generiert wenn die Breite kleiner oder gleich Null ist.<br>
+
'''GL_INVALID_VALUE''' wird generiert, wenn die Breite kleiner oder gleich Null ist.
'''GL_INVALID_OPERATION''' wird generiert wenn glLineWidth zwischen einem [[glBegin]] oder dem dazugehörigen [[glEnd]] ausgeführt wird.
+
 
 +
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glLineWidth''' zwischen einem [[glBegin]] und dem dazugehörigen [[glEnd]] ausgeführt wird.
  
  
  
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGet]] mit Token [[glGet#GL_LINE_WIDTH|GL_LINE_WIDTH]]<br>
+
[[glGet]] mit Token [[glGet#GL_LINE_WIDTH|GL_LINE_WIDTH]]
[[glGet]] mit Token [[glGet#GL_LINE_WIDTH_RANGE|GL_LINE_WIDTH_RANGE]]<br>
+
 
[[glGet]] mit Token [[glGet#GL_LINE_WIDTH_GRANULARITY|GL_LINE_WIDTH_GRANULARITY]]<br>
+
[[glGet]] mit Token [[glGet#GL_LINE_WIDTH_RANGE|GL_LINE_WIDTH_RANGE]]
 +
 
 +
[[glGet]] mit Token [[glGet#GL_LINE_WIDTH_GRANULARITY|GL_LINE_WIDTH_GRANULARITY]]
 +
 
 
[[glGet]] mit Token [[glGet#GL_LINE_SMOOTH|GL_LINE_SMOOTH]]
 
[[glGet]] mit Token [[glGet#GL_LINE_SMOOTH|GL_LINE_SMOOTH]]
  
Zeile 67: Zeile 71:
  
 
[[Kategorie:GL|LineWidth]]
 
[[Kategorie:GL|LineWidth]]
 +
[[Kategorie:GL1.0|LineWidth]]

Aktuelle Version vom 22. Juni 2011, 03:50 Uhr

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.

Auswirkung von glLineWidth

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


Siehe auch

glEnable