OpenGL Smooth: Unterschied zwischen den Versionen
Lyr (Diskussion | Beiträge) |
Flash (Diskussion | Beiträge) K |
||
Zeile 1: | Zeile 1: | ||
− | [[OpenGL]] besitzt eine weitere Möglichkeit Kanten-Antialiasing zu realisieren. Diese können mit [[glEnable]] mit den Parametern GL_POINT_SMOOTH, GL_LINE_SMOOTH bzw. GL_POLYGON_SMOOTH aktiviert werden. | + | [[OpenGL]] besitzt, neben den unter [[Antialiasing]] vorgestellten Methoden, eine weitere Möglichkeit Kanten-Antialiasing zu realisieren. Diese können mit [[glEnable]] mit den Parametern GL_POINT_SMOOTH, GL_LINE_SMOOTH bzw. GL_POLYGON_SMOOTH aktiviert werden. |
=Technik= | =Technik= |
Version vom 21. Mai 2006, 17:31 Uhr
OpenGL besitzt, neben den unter Antialiasing vorgestellten Methoden, eine weitere Möglichkeit Kanten-Antialiasing zu realisieren. Diese können mit glEnable mit den Parametern GL_POINT_SMOOTH, GL_LINE_SMOOTH bzw. GL_POLYGON_SMOOTH aktiviert werden.
Inhaltsverzeichnis
Technik
Wenn der Smooth-Wert für ein Primitive aktiviert ist, so werden im Fall von Punkten und Linien bereits andere Pixel vom Rasterizer generiert. Zusätzlich wird für jedes generierte Fragment noch ein Deckungs-Wert berechnet, welcher angibt wie viel Prozent des Fragmentes von dem entsprechenden Primitive bedeckt werden.
Dieser Deckungs-Wert wird nach allen anderen Berechnungen mit dem Alpha-Wert des Fragmentes multipliziert. Aus diesem Grund hängt diese Art von Antialiasing auch mit Blending zusammen, wodurch das Zeichnen üblicherweise mit Tiefensortierung erfolgen muss (was gleichzeitig der größte Nachteil an dieser Methode ist).
Punkte
Werden (größere) Punkte mit aktiviertem GL_POINT_SMOOTH gerendert, so wird offensichtlich aus dem Quadrat ein richtiger Kreis. Auch ohne aktiviertem Blending (mittels glEnable( GL_BLEND ) ) hätte man hier also bereits ein Kreisform, aber natürlich ohne geglätteten Rand.
4-Fach vergrößterter Punkt links ohne und recht mit GL_POINT_SMOOTH.
Linien
Werden Linien mit aktiviertem GL_LINE_SMOOTH gerendert, so wird offensichtlich aus dem Trapez (mehrere 1-Pixel Linien entweder nebeneinander oder übereinander) ein Quader. Dies hat (vor allem bei breiteren Linien) ebenfalls auch Auswirkungen wenn Blending deaktiviert ist.
4-Fach vergrößterte Linie links ohne und recht mit GL_LINE_SMOOTH.
Polygone
Polygone (also Triangles, Quads, Triangle-Strips, Triangle-Fans und Polygone) verändern ihr Erscheinungsbild mit deaktivierten Blending kaum. Mit aktiviertem Blending werden aber natürlich die Kanten geglättet.
Probleme
Bei Polygonen tauchen die größten Problem auf, und zwar so große, dass es von vielen Grafikkarten gar nicht unterstützt wird. Vor allem bei aktiviertem GL_POLYGON_SMOOTH kommt es also des öfteren vor, dass in den Softwaremodus umgeschalten wird, und nicht einmal dann kann man sicher sein dass es funktioniert. Und wenn es doch funktioniert so erwartet einem häufig bereits die nächste Überraschung.
Das Problem ist, dass zwei aneinanderliegende Dreiecke häufig einen Spalt aufweisen. Da die Primitiven GL_QUADS, GL_TRIANGLE_STRIP, GL_TRIANGLE_FAN und GL_POLYGON üblicherweise ebenfalls in Dreiecke aufgeteilt werden, entsteht dieser Spalt auch dort. Und wäre dies nicht schon genug so kann ein einzelnes Dreieck an einer Clipping Plane oder dem Frustum ebenfalls noch in 4 kleiner Dreiecke aufgesplittet werden, wo wir wiederum diesen Spalt antreffen.
Also GL_POLYGON_SMOOTH ist mit äusserster Vorsicht zu geniesen.