glLineWidth: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
(Beschreibung)
(Beschreibung)
Zeile 31: Zeile 31:
 
Wenn Antialiasing für Linien deaktiviert ist, wird die tatsächliche Breite durch Runden auf den nächst gelegenen 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 für Linien deaktiviert ist, wird die tatsächliche Breite durch Runden auf den nächst gelegenen 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. Jeden Pixel, der teilweise oder vollständig in dem Rechteck liegt wird dann gezeichnet, also ein Fragment erzeugt, und zusätzlich wird berechnet wieviel Prozent dieses Pixels in dem Rechteck liegen. Dieser Wert wird dann als "Coverage Value" je nach AntiAlias Modus weiterverarbeitet. Bei einigen Modi wird dieser Wert, z.B. in den Alpha Kanal kopier und kann zum Blenden benutzt werden. Bei der NVidia Demo Dawn wurden auf diese Weise die Haare gezeichenet.
+
Wenn Antialiasing allerdings eingeschaltet wurde, wird ein Rechteck mit der Breite und Länge der Linie um die Linie herum berechnet. Jeden Pixel, der teilweise oder vollständig in dem Rechteck liegt wird dann gezeichnet, also ein Fragment erzeugt, und zusätzlich wird berechnet wieviel Prozent dieses Pixels in dem Rechteck liegen. Dieser Wert wird dann als "Coverage Value" je nach AntiAlias Modus weiterverarbeitet. Bei einigen Modi wird dieser Wert, z.B. in den Alpha Kanal kopier 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.
 
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.

Version vom 3. September 2004, 15:22 Uhr

ACHTUNG DIESER ARTIKEL IST NOCH UNFERTIG

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 Standardwert 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ächst gelegenen 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. Jeden Pixel, der teilweise oder vollständig in dem Rechteck liegt wird dann gezeichnet, also ein Fragment erzeugt, und zusätzlich wird berechnet wieviel Prozent dieses Pixels in dem Rechteck liegen. Dieser Wert wird dann als "Coverage Value" je nach AntiAlias Modus weiterverarbeitet. Bei einigen Modi wird dieser Wert, z.B. in den Alpha Kanal kopier 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.


Übersetzung folgt.(phobeus) Non-antialiased line width may be clamped to an implementation-dependent maximum. Although this maximum cannot be queried, it must be no less than the maximum value for antialiased lines, rounded to the nearest integer value. Auch wenn der maximale Wert hierfür nicht abgefragt werden kann, so darf er nicht geringer sein als der maximale Wert für antialiased Linien gerundet auf den nächsten Integer-Wert.

Fehlermeldungen

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.


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