glPointSize: Unterschied zwischen den Versionen
DGLBot (Diskussion | Beiträge) K (GlPointSize wurde nach glPointSize verschoben) |
Flash (Diskussion | Beiträge) K (→Beispiel) |
||
Zeile 51: | Zeile 51: | ||
== Beispiel == | == Beispiel == | ||
− | Eine Kugel im Polygon Modus '''GL_POINTS''' mit | + | Eine Kugel im [[glPolygonMode|Polygon Modus]] '''GL_POINTS''' mit |
{| border="1" rules="all" | {| border="1" rules="all" | ||
Zeile 62: | Zeile 62: | ||
<br> | <br> | ||
+ | |||
== Fehlermeldungen == | == Fehlermeldungen == | ||
'''GL_INVALID_VALUE''' wird generiert wenn ''size'' kleiner oder gleich 0 ist.<br> | '''GL_INVALID_VALUE''' wird generiert wenn ''size'' kleiner oder gleich 0 ist.<br> |
Version vom 13. März 2006, 14:35 Uhr
Inhaltsverzeichnis
glPointSize
Name
glPointSize - legt den Durchmesser von Punkten fest.
Delphi-Spezifikation
Syntax der Funktion (bitte an die dglOpenGL.pas halten), vorerst auch nur Delphi-Syntax. Bitte haltet euch dabei an folgende Vorgabe, die der Formatierung der glMan-Pages entspricht, und die für das Wiki wichtigen Teile der Syntax hervorhebt :
procedure glPointSize(size : GLfloat);
Parameter
size | Bestimmt die Größe der gerasterten Punkte. Der Vorgabewert ist 1.0. |
---|
Beschreibung
Mit glPointSize wird der Durchmesser in Pixeln von aliased und antialiased Punkten festgelegt. Zeichnen mit von 1 unterschiedlichen Punktgrössen hat je nachdem ob Punkt-Antialiasing aktiviert ist verschiedene Effekte. Punkt-Antialiasing wird mit glEnable bzw. glDisable und dem Argument GL_POINT_SMOOTH an- bzw. ausgeschaltet.
Ohne Anti-Aliasing
Die tatsächliche Größe wird durch runden auf den nächsten Integer-Wert bestimmt (Werte < 0.5 werden auf 1 gerundet). Falls der gerundete Wert ungerade ist (n=2k+1), dann wird der Mittelpunkt (x,y) der PixelMenge wie folgt berechnet:
wobei w für Fenster-Koordinaten steht. Der Punkt besteht aus allen Pixeln, die innerhalb des Quadrats der festgelegten Grösse um den Mittelpunkt (x,y) liegen. Falls der gerundete Wert gerade ist (n=2k), berechnet sich der Mittelpunkt (x,y) wie folgt:
Der Punkt besteht aus allen Pixeln, die innerhalb des Quadrats der festgelegten Grösse um den Mittelpunkt (x,y) liegen. Alle Pixel bekommen bei abgeschalteten Aliasing den selben Wert zugewiesen (Den des korrespondierenden Vertex).
Mit aktiviertem Antialiasing werden alle Pixel angeschaltet, die innerhalb des Kreises mit Durchmesser der aktuellen Punktgrösse um den Mittelpunkt (x(w), y(w)) liegen. Die Verdeckung für jedes Fragment wird durch die Fensterkoordinaten des Schnittpunktes mit dem entsprechenden Pixel berechnet. Jedes Fragment erhält die Daten des Punktes mit dem es gerendert wird.
Mit aktiviertem Antialiasing sind nicht alle Punktgrössen zulässig. Falls eine unzulässige Grösse angegeben wird, wird die nächste verfügbare Punktgrösse verwendet. Welche Grössen verwendbar sind ist abhängig von der Implementierung. Lediglich 1.0 ist als verwendbare Grösse vorgeschrieben. Die Spanne der verwendbaren Grössen und die Differenz zwischen den einzelnen Grössen kann mit glGet und den Konstanten GL_POINT_SIZE_RANGE und GL_POINT_SIZE_GRANULARITY abgefragt werden.
Mit GL_POINT_SIZE als Argument für glGet wird die durch glPointSize spezifizierte Punktgrösse abgefragt. Rundungen (bei aliased und antialiased Punkten) sowie Beschränkung auf zulässige Punktgrössen haben keinen Einfluss auf den Rückgabewert.
Die Grösse für Aliased-Punkt kann auf ein Implementationsspezifisches Maximum reduziert werden. Dieses kann nicht abgefragt werden, darf aber nicht kleiner sein als das auf den nächsten Integerwert gerundete Maximum für Antialiased-Punkte.
Beispiel
Eine Kugel im Polygon Modus GL_POINTS mit
glPointSize(1) | glPointSize(5) |
---|---|
Fehlermeldungen
GL_INVALID_VALUE wird generiert wenn size kleiner oder gleich 0 ist.
GL_INVALID_OPERATION wird generiert wenn glPointSize innerhalb eines glBegin-glEnd Blocks aufgerufen wird.
Zugehörige Wertrückgaben
glGet mit Token GL_POINT_SIZE
glGet mit Token GL_POINT_SIZE_RANGE
glGet mit Token GL_POINT_SIZE_GRANULARITY
glIsEnabled mit Token GL_POINT_SMOOTH