glLineStipple: Unterschied zwischen den Versionen

Aus DGL Wiki
Wechseln zu: Navigation, Suche
K ()
 
K (Ergebniss -> Ergebnis)
 
(15 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
{{Offline}}
+
{{Excellent}}
 
= glLineStipple =
 
= glLineStipple =
  
<br>
+
 
 +
 
 
== Name ==
 
== Name ==
'''glLineStipple''' - Definiert mit welchem Muster eine Linie getüpfelt wird.
+
'''glLineStipple''' - Definiert, mit welchem Muster eine Linie getüpfelt/gestrichelt wird.
 +
 
 +
 
  
<br>
 
 
== Delphi-Spezifikation ==
 
== Delphi-Spezifikation ==
  
  procedure '''glLineStipple'''(''factor'' : TGLInt; ''pattern'' : TGLUSort);
+
  procedure '''glLineStipple'''(''factor'' : GLint; ''pattern'' : GLushort);
 +
 
  
<br>
 
  
 
== Parameter ==
 
== Parameter ==
Zeile 17: Zeile 19:
 
{| border="1" rules="all"
 
{| border="1" rules="all"
 
! ''factor''
 
! ''factor''
|  Spezifiziert einen Multiplikator für jedes Bit im Tüpfelmuster einer Linie. Wenn der Faktor beispielsweise 3 ist, wird jedes Bit im Muster drei Mal genutzt, bevor das nächste Bit im Muster verwendet wird. Der factor ist festgesetzt zwischen dem Bereich von 1 bis 256 und der Standardwert ist 1'''. If factor is 3, for example, each bit in the pattern is used three times before the next bit in the pattern is used. factor is clamped to the range[1,256] and defaults to 1.'''
+
|  Spezifiziert einen Multiplikator für jedes Bit im Tüpfelmuster einer Linie. Wenn der Faktor beispielsweise 3 ist, wird jedes Bit im Muster drei Mal genutzt, bevor das nächste Bit im Muster verwendet wird. <br>
 +
Faktor ist für Zahlen aus dem Intervall [1,256] definiert.<br>
 +
Der '''Standardwert''' ist '''1'''.
 
|-
 
|-
 
! ''pattern''
 
! ''pattern''
| '''Specifies a 16-bit integer whose bit pattern determines which fragments of a line will be drawn when the line is rasterized. Bit zero is used first; the default pattern is all 1's.'''
+
| Ist eine 16 Bit Integerzahl deren Binärdarstellung als Bitmuster für die Fragmente von Linien benutzt werden soll. (1 = Zeichnen, 0 = nicht zeichnen). Das Bitmuster wird beginnend bei Bit 0 gelesen.<br>
 +
Das '''Vorgabemuster''' besteht nur aus Einsen (= die größtmögliche 16Bit Integerzahl).
 
|}
 
|}
  
<br>
+
 
  
 
== Beschreibung ==  
 
== Beschreibung ==  
'''Line stippling masks out certain fragments produced by rasterization; those fragments will not be drawn. The masking is achieved by using three parameters: the 16-bit line stipple pattern pattern, the repeat count factor, and an integer stipple counter s.
+
Linienmusterung maskiert bestimmte, von der [[Rasterisierung]] produzierte Fragmente aus, sie werden also nicht gezeichnet. Die Maskierung wird über folgende drei Parameter erreicht: Das 16-Bittige Muster, den Wiederholungsfaktor und den Ganzzahl-Musterzähler ''s''.
 +
 
 +
Der Zähler ''s'' wird bei jedem Aufruf von [[glBegin]] auf 0 zurückgesetzt, und bevor jedes Liniensegment eines [[glBegin]](GL_LINES)/[[glEnd]]-Blockes generiert wird. Erhöht wird dieser nach jedem Fragment einer Einheit des Liniensegmentes, oder nachdem alle ''i'' Fragmente einer Linie mit einer Breite von ''i'' Einheiten generiert wurden. Diese ''i'' Fragmente verknüpft mit dem Zählwert ''s'' werden ausmaskiert, wenn das Musterbit (''s''/''factor'') modulo 16 gleich null ist, andernfalls werden die Fragmente in den Framepuffer geschrieben. Bit 0 des Musters ist das niederwertigste Bit.
 +
 
 +
Kantengeglättete Linien werden für die Musterung als eine Sequenz von 1xBreite-Rechtecken behandlet. Ob das Rechteck ''s'' dann rasterisiert wird oder nicht, hängt von den Fragmentregeln für kantengeglättete Linien ab, ob dort Rechtecke gezählt werden, oder Fragmentgruppen.
 +
 
 +
Um Linien tüpfeln zu lassen, benutzt [[glEnable]] und [[glDisable]] mit dem Token '''GL_LINE_STIPPLE'''. Wenn dies aktiviert ist, werden die Linien mit dem Muster getüpfelt, dass oben beschrieben wurde. Wenn es deaktiviert ist, werden alle Muster so behandelt als seien sie auf 1 gesetzt. Standardgemäß ist das Tüpfeln von Linien deaktiviert.
 +
 
  
Counter s is reset to zero whenever glBegin is called, and before each line segment of a glBegin(GL_LINES)/glEnd() sequence is generated. It is incremented after each fragment of a unit width aliased line segment is generated, or after each i fragments of an i width line segment are generated. The i fragments associated with count s are masked out if
 
  
pattern bit (s / factor) mod 16
 
  
is zero, otherwise these fragments are sent to the frame buffer. Bit zero of pattern is the least significant bit.
+
== Beispiel ==
 +
<div align="center">
 +
{|{{Prettytable_B1}}
 +
!Code
 +
!Ergebnis
 +
|-
 +
|<source lang="pascal">
 +
procedure rendereStippleLine;
 +
var y      : integer;
 +
    factor  : GLint;
 +
    pattern : GLushort;
 +
begin
 +
  factor := 1;
 +
  pattern := $3FC9;
  
Antialiased lines are treated as a sequence of 1xwidth rectangles for purposes of stippling. Whether rectangle s is rasterized or not depends on the fragment rule described for aliased lines, counting rectangles rather than groups of fragments.'''
+
  //Stippling aktivieren
 +
  glEnable(GL_LINE_STIPPLE);
 +
  for y := -9 to 9 do
 +
  begin
 +
      if y>0 then pattern := $5555;
  
Um Linien tüpfeln zu lassen, benutzt [[glEnable]] und [[glDisable]] mit dem Token GL_LINE_STIPPLE. Wenn dies aktiviert ist, werden die Linien mit dem Muster getüpfelt, dass oben beschrieben wurde. Wenn es deaktiviert ist, werden alle Muster so behandelt als seien sie auf 1 gesetzt. Standardgemäß ist das Tüpfeln von Linien deaktiviert.
+
      glLineStipple(factor, pattern);
 +
      glBegin(GL_LINES);
 +
        glVertex3f(-8,y,0);
 +
        glVertex3f( 8,y,0);
 +
      glEnd;
 +
      factor := factor+1;
 +
  end;
 +
end;</source>
 +
|[[Bild:GlLineStipple.jpg]]
 +
|}</div>
  
<br>
+
Das verwendete Muster (''pattern'') $3FC9 hat folgende Bitdarstellung:
 +
  3    F    C    9
 +
0011 1111 1100 1001
 +
Das zweite Muster $5555 hat die folgende Bitdarstellung:
 +
  5    5    5    5
 +
0101 0101 0101 0101
  
 
== Fehlermeldungen ==
 
== Fehlermeldungen ==
GL_INVALID_OPERATION wird generiert wenn glRect innerhalb eines glBegin-glEnd Blocks aufgerufen wird.  
+
'''GL_INVALID_OPERATION''' wird generiert, wenn '''glLineStipple''' innerhalb eines [[glBegin]]-[[glEnd]]-Blocks aufgerufen wird.  
 +
 
 +
 
  
<br>
 
 
==  Zugehörige Wertrückgaben ==
 
==  Zugehörige Wertrückgaben ==
[[glGet]] mit Token [[glGet#GL_MEIN_TOKEN|GL_MEIN_TOKEN]]
+
[[glGet]] mit Token [[glGet#GL_LINE_STIPPLE_PATTERN|GL_LINE_STIPPLE_PATTERN]]
[[glGet]] mit Token [[glGet#GL_LINE_STIPPLE_PATTERN]]
+
 
[[glGet]] mit Token [[glGet#GL_LINE_STIPPLE_REPEAT]]
+
[[glGet]] mit Token [[glGet#GL_LINE_STIPPLE_REPEAT|GL_LINE_STIPPLE_REPEAT]]
[[glIsEnabled]] mit Token [[glIsEnabled#GL_LINE_STIPPLE]]
+
 
<br>
+
[[glIsEnabled]] mit Token [[glIsEnabled#GL_LINE_STIPPLE|GL_LINE_STIPPLE]]
 +
 
 +
 
  
 
== Siehe auch ==
 
== Siehe auch ==
 
[[glLineWidth]], [[glPolygonStipple]]
 
[[glLineWidth]], [[glPolygonStipple]]
 +
 +
[[Kategorie:GL|LineStipple]]
 +
[[Kategorie:GL1.0|LineStipple]]

Aktuelle Version vom 20. März 2012, 15:31 Uhr

Hinweis: Dieser Artikel wurde von den Benutzern des Wikis zum exzellenten Artikel berufen!
(weitere exzellente Artikel)
Excelent.jpg

glLineStipple

Name

glLineStipple - Definiert, mit welchem Muster eine Linie getüpfelt/gestrichelt wird.


Delphi-Spezifikation

procedure glLineStipple(factor : GLint; pattern : GLushort);


Parameter

factor Spezifiziert einen Multiplikator für jedes Bit im Tüpfelmuster einer Linie. Wenn der Faktor beispielsweise 3 ist, wird jedes Bit im Muster drei Mal genutzt, bevor das nächste Bit im Muster verwendet wird.

Faktor ist für Zahlen aus dem Intervall [1,256] definiert.
Der Standardwert ist 1.

pattern Ist eine 16 Bit Integerzahl deren Binärdarstellung als Bitmuster für die Fragmente von Linien benutzt werden soll. (1 = Zeichnen, 0 = nicht zeichnen). Das Bitmuster wird beginnend bei Bit 0 gelesen.

Das Vorgabemuster besteht nur aus Einsen (= die größtmögliche 16Bit Integerzahl).


Beschreibung

Linienmusterung maskiert bestimmte, von der Rasterisierung produzierte Fragmente aus, sie werden also nicht gezeichnet. Die Maskierung wird über folgende drei Parameter erreicht: Das 16-Bittige Muster, den Wiederholungsfaktor und den Ganzzahl-Musterzähler s.

Der Zähler s wird bei jedem Aufruf von glBegin auf 0 zurückgesetzt, und bevor jedes Liniensegment eines glBegin(GL_LINES)/glEnd-Blockes generiert wird. Erhöht wird dieser nach jedem Fragment einer Einheit des Liniensegmentes, oder nachdem alle i Fragmente einer Linie mit einer Breite von i Einheiten generiert wurden. Diese i Fragmente verknüpft mit dem Zählwert s werden ausmaskiert, wenn das Musterbit (s/factor) modulo 16 gleich null ist, andernfalls werden die Fragmente in den Framepuffer geschrieben. Bit 0 des Musters ist das niederwertigste Bit.

Kantengeglättete Linien werden für die Musterung als eine Sequenz von 1xBreite-Rechtecken behandlet. Ob das Rechteck s dann rasterisiert wird oder nicht, hängt von den Fragmentregeln für kantengeglättete Linien ab, ob dort Rechtecke gezählt werden, oder Fragmentgruppen.

Um Linien tüpfeln zu lassen, benutzt glEnable und glDisable mit dem Token GL_LINE_STIPPLE. Wenn dies aktiviert ist, werden die Linien mit dem Muster getüpfelt, dass oben beschrieben wurde. Wenn es deaktiviert ist, werden alle Muster so behandelt als seien sie auf 1 gesetzt. Standardgemäß ist das Tüpfeln von Linien deaktiviert.



Beispiel

Code Ergebnis
procedure rendereStippleLine;
var y       : integer;
    factor  : GLint;
    pattern : GLushort;
begin
  factor := 1;
  pattern := $3FC9;

  //Stippling aktivieren
  glEnable(GL_LINE_STIPPLE);
  for y := -9 to 9 do
  begin
       if y>0 then pattern := $5555;

       glLineStipple(factor, pattern);
       glBegin(GL_LINES);
         glVertex3f(-8,y,0);
         glVertex3f( 8,y,0);
       glEnd;
       factor := factor+1;
  end;
end;
GlLineStipple.jpg

Das verwendete Muster (pattern) $3FC9 hat folgende Bitdarstellung:

  3    F    C    9
0011 1111 1100 1001

Das zweite Muster $5555 hat die folgende Bitdarstellung:

  5    5    5    5
0101 0101 0101 0101

Fehlermeldungen

GL_INVALID_OPERATION wird generiert, wenn glLineStipple innerhalb eines glBegin-glEnd-Blocks aufgerufen wird.


Zugehörige Wertrückgaben

glGet mit Token GL_LINE_STIPPLE_PATTERN

glGet mit Token GL_LINE_STIPPLE_REPEAT

glIsEnabled mit Token GL_LINE_STIPPLE


Siehe auch

glLineWidth, glPolygonStipple