www.wikidata.de-de.nina.az
Die Rasterung von Polygonen und aneinandergereihten Liniensegmenten Polygonzugen ist eine Aufgabe der Computergrafik Das Rastern von Polygonzugen basiert auf der Rasterung von Linien erfordert jedoch bei dicker Strichbreite zusatzlichen Aufwand Dem Rastern von gefullten Polygonen kommt in der 3D Computergrafik eine grosse Rolle zu da 3D Szenen gerendert werden konnen indem man die auf die Bildebene projizierten Polygone farbig fullt Inhaltsverzeichnis 1 Verbinden von Liniensegmenten 2 Artefakte 3 Aneinanderliegende Dreiecke 4 Fullung 4 1 Kantenlisten Algorithmen 4 1 1 Grundprinzip 4 1 2 Aktive Kantenliste 4 2 Edge fill Algorithmus 4 3 Fence fill Algorithmus 4 4 Edge flag Algorithmus 5 Siehe auch 6 Literatur 7 EinzelnachweiseVerbinden von Liniensegmenten Bearbeiten nbsp Verschiedene Arten der Rasterung von Polygonecken a stumpfe Enden b abgerundete Enden c Mitering d Mitering mit abgeschnittenen Spitzen Beim Rastern dicker Liniensegmente muss entschieden werden wie sie miteinander verbunden werden Dicke Linien als Rechtecke zu betrachten liefert unschone Ergebnisse Besser ist es Linien mit runden Enden zu zeichnen Eine andere Moglichkeit ist Mitering Gehrung bei der die Linienenden schrag gezeichnet werden sodass sie aneinander angrenzen Bei sehr spitzen Winkeln ragen die Linienenden zu sehr uber die eigentliche Polygonecke heraus weshalb sie besser abgeschnitten werden Artefakte Bearbeiten nbsp Zwei verschiedene Arten der Rasterung eines RechtecksBei der Rasterung von Polygonen muss entschieden werden wie deren Koordinaten interpretiert werden Wenn beispielsweise ein Rechteck mit den Endpunktkoordinaten 1 1 und 5 4 gerastert wird so werden im Normalfall 5 4 Pixel eingefarbt obwohl das Rechteck nur 4 3 Einheiten gross ist Dieser unerwunschte Effekt ist eine Konsequenz der endlichen Bildauflosung Wenn nebeneinanderliegende Polygone gezeichnet werden so fuhrt das dazu dass einige Pixel mehrfach eingefarbt werden Eine Moglichkeit dieses Problem zumindest bei ganzzahligen Koordinaten zu umgehen besteht darin sie bei der Rasterung um einen halben Pixelabstand nach links und nach unten zu verschieben sodass in Wirklichkeit das Rechteck mit den Koordinaten 0 5 0 5 und 4 5 3 5 gerastert wird siehe Bild Dadurch wird vermieden dass bei nebeneinanderliegenden Polygonen Kanten doppelt eingefarbt werden was bei bestimmten Rasteroperationen wie XOR unerwunschte Resultate hervorrufen wurde Eine alternative Methode die Gleitkommazahlen vermeidet ist das jeweils letzte Pixel einer Zeile oder einer Spalte nicht zu rastern Dabei wird in Kauf genommen dass das Polygon etwas verschoben erscheint Auch sehr spitzwinklige Polygonecken konnen dazu fuhren dass Pixel jeweils von mehreren Segmenten eingefarbt werden Ein weiteres Beispiel fur Artefakte sind Slivers Polygonteile die so dunn sind dass sie keine Pixel einschliessen und bei denen einige Rasteralgorithmen nur einzelne oder gar keine Pixel zeichnen Wenn ein gerasterter Winkel durch eine weitere Linie halbiert werden soll etwa um Pfeile darzustellen so ist es im Allgemeinen nicht moglich ein exakt symmetrisches Resultat zu erreichen 1 Aneinanderliegende Dreiecke Bearbeiten nbsp Wahl der Farbe eines Pixels das genau auf einer von zwei Dreiecken geteilten Kante liegt Hier ist Punkt a dem Referenzpunkt naher also werden derartige Pixel hellblau eingefarbt Polygone mit mehr als drei Ecken als Teil von Polygonnetzen werden vor der Rasterung oft in Dreiecke umgewandelt Dabei teilen sich sehr viele Dreiecke ihre Kanten Wenn diese aneinanderliegenden Dreiecke unterschiedlich gefarbt sind und jede Kante als einfarbige Linie gerastert wird so hangt das Erscheinungsbild von der Reihenfolge ab in der die Dreiecke gerastert werden Um dieses Problem zu umgehen farbt man ein Pixel dann und nur dann ein wenn es innerhalb des zu zeichnenden Dreiecks liegt Dazu konnen baryzentrische Koordinaten verwendet werden Bezogen auf ein Dreieck kann jeder Punkt der Ebene durch die Koordinaten a b g displaystyle alpha beta gamma nbsp beschrieben werden Ein Punkt oder Pixel befindet sich genau dann strikt innerhalb dieses Dreiecks wenn sich jede dieser Koordinaten im Intervall 0 1 displaystyle 0 1 nbsp befindet Diese Methode ist auch fur nicht ganzzahlige Eckpunktkoordinaten gultig Einen Sonderfall stellen Pixel dar die sich genau auf einer Kante befinden und somit nicht trivial einem der beiden anliegenden Dreiecke zugewiesen werden konnen Fur diese Falle wahlt man einen ausserhalb des Bildes liegenden Referenzpunkt und wahlt die Farbe desjenigen Dreiecks dessen nicht auf der Kante befindlicher Eckpunkt naher an diesem Punkt liegt Diese Methode funktioniert immer dann wenn der Referenzpunkt nicht auf der durch die Kante verlaufenden Geraden liegt Fullung BearbeitenAm einfachsten werden gefullte Dreiecke und damit Polygone gerastert indem fur jedes Pixel des Bildes der oben beschriebene Test angewendet wird Pixel werden nur dann eingefarbt wenn sie innerhalb eines Dreiecks liegen Eine etwas effizientere Methode testet nur diejenigen Pixel innerhalb eines Rechtecks welches das zu rasternde Dreieck einschliesst Neben diesen einfachen Methoden sind jedoch schnellere Verfahren entwickelt worden die im Folgenden beschrieben werden Kantenlisten Algorithmen Bearbeiten Grundprinzip Bearbeiten nbsp Mit dem Kantenlisten Algorithmus gerastertes PolygonKantenlisten Algorithmen bestimmen fur jede Kante des Polygons die Schnittpunkte mit den Bildzeilen Diese konnen direkt berechnet werden oder es konnen Algorithmen zur Rasterung von Linien verwendet werden Horizontale Kanten werden ignoriert Die so ermittelten Schnittpunkte werden in einer Liste abgelegt Um wie weiter oben beschrieben zu vermeiden dass zu viele Pixel an den Kanten eingefarbt werden werden in Wirklichkeit die Schnittpunkte mit genau zwischen zwei Bildzeilen verlaufenden Geraden berechnet Fur das rechts im Bild dargestellte Beispielpolygon werden somit folgende Schnittpunkte in der Liste abgelegt Kante Gespeicherte Schnittpunkte 1 1 8 1 Ignoriert da horizontale Kante 8 1 8 6 8 1 5 8 2 5 8 3 5 8 4 5 8 5 5 8 6 5 3 7 5 5 5 6 5 4 5 5 5 3 5 5 3 1 7 4 5 3 5 3 5 4 5 2 5 5 5 1 5 6 5 1 7 1 1 1 6 5 1 5 5 1 4 5 1 3 5 1 2 5 1 1 5 Diese Schnittpunkte werden nun nach y Koordinaten absteigend sortiert Unter Werten mit gleichen y Koordinaten wird aufsteigend nach x Koordinaten sortiert Nach der Sortierung sieht die Liste folgendermassen aus 1 6 5 1 5 6 5 1 5 5 2 5 5 5 7 5 5 5 8 5 5 1 4 5 3 5 4 5 6 5 4 5 8 4 5 1 3 5 4 5 3 5 5 5 3 5 8 3 5 1 2 5 8 2 5 1 1 5 8 1 5 In dieser Liste gibt es immer eine gerade Anzahl von Werten mit gleicher y Koordinate Das Polygon wird gezeichnet indem nacheinander Punktpaare aus der Liste betrachtet werden Sie sind stets von der Form x1 y x2 y beide Punkte haben also die gleiche y Koordinate Es werden nun alle Pixel der entsprechenden Bildzeile gezeichnet deren x Koordinate sich im Intervall x 1 0 5 x 2 0 5 displaystyle x 1 0 5 x 2 0 5 nbsp befindet Das erste Punktpaar ist 1 6 5 1 5 6 5 Das einzige Pixel das die eben genannte Bedingung erfullt ist hier 1 6 Anschliessend wird das nachste Punktpaar 1 5 5 2 5 5 5 betrachtet Hier gibt es zwei Pixel die eingefarbt werden namlich 1 5 und 2 5 Das Polygon ist fertig gerastert wenn alle Punktpaare der sortierten Liste abgearbeitet wurden Aktive Kantenliste Bearbeiten Die Vorausberechnung der Schnittpunkte von Polygonkanten und zwischen den Bildzeilen verlaufenden Geraden ist unnotig zeitaufwandig und kann erheblichen Speicherplatz erfordern Mit einer so genannten aktiven Kantenliste lasst sich die Berechnung der Schnittpunkte inkrementell durchfuhren und der Speicherplatz reduzieren Dieses Verfahren wird gelegentlich Scanline Algorithmus genannt 2 allerdings werden mit Scanline Algorithmen auch darauf aufbauende Verfahren bezeichnet um im Rahmen der 3D Computergrafik aus Polygonen aufgebaute Szenen Zeile fur Zeile zu rastern Bei diesem Algorithmus werden fur jede Polygonkante nicht die Schnittpunkte mit allen Geraden sondern nur mit der Geraden mit der grossten y Koordinate die die Kante schneidet ermittelt Zusatzlich zur x Koordinate des Schnittpunkts werden folgende Daten ermittelt Dx die Differenz zwischen den x Koordinaten der Schnittpunkte zweier vertikal benachbarter Geraden der Kehrwert der Steigung der Kante ny die Anzahl der Geraden die von der Polygonkante geschnitten werden Die Daten werden in einer Tabelle gespeichert deren Eintrage nach der Bildzeile sortiert sind Fur das Beispielpolygon ergibt sich folgende Tabelle Bildzeile Kante x Dx ny876 5 3 1 7 1 5 1 3 1 7 1 1 1 0 55 8 1 8 6 8 0 4 8 6 5 3 7 5 1 24 0Die Grundidee des Algorithmus besteht darin von diesen vorberechneten Daten auszugehen und mit Hilfe der Dx Werte die Koordinaten der anderen Schnittpunkte fortlaufend zu berechnen Dabei wird von der hochsten Bildzeile ausgegangen und schrittweise zur niedrigeren Bildzeile gewechselt Eine aktive Kantenliste speichert die Kanten die die zur Bildzeile gehorende Gerade schneiden sowie fur jede Kante die aktuellen x Dx und ny Werte Zu Beginn ist die aktive Kantenliste leer Ausgegangen wird von der hochsten Bildzeile Fur jede Bildzeile wird in der vorberechneten Tabelle gesucht ob sie Kanten enthalt die noch nicht in der aktiven Kantenliste enthalten sind und wenn ja werden die entsprechenden Daten in die aktive Kantenliste kopiert Nun werden die x Werte aller in der aktiven Kantenliste befindlichen Kanten aufsteigend sortiert Die resultierenden Punktpaare werden wie im grundlegenden Kantenlisten Algorithmus dazu verwendet Pixel einzufarben Anschliessend werden die ny Werte in der aktiven Kantenliste um 1 erniedrigt fallt ein Wert unter 0 so wird die entsprechende Kante aus der aktiven Kantenliste entfernt Schliesslich werden zu allen x Werten in der aktiven Kantenliste Dx addiert und die Prozedur wird mit der nachsten niedrigeren Bildzeile wiederholt Die Rasterung ist fertig sobald alle Bildzeilen abgearbeitet wurden Beim Beispielpolygon verandert sich die aktive Kantenliste in den ersten vier Bildzeilen wie folgt Bildzeile Aktive Kantenliste x Dx ny Sortierte Schnittpunkt Koordinaten876 1 5 1 31 0 5 1 6 5 1 5 6 5 5 2 5 1 21 0 48 0 47 5 1 2 1 5 5 2 5 5 5 7 5 5 5 8 5 5 Edge fill Algorithmus Bearbeiten Der grosste Nachteil der Kantenlisten Algorithmen ist der Aufwand zur Sortierung und Manipulation der Listen Der sehr einfache Edge fill Algorithmus 3 kommt ohne diesen Aufwand aus Beim Edge fill Algorithmus werden fur jede Bildzeile die bei x S c h n i t t p u n k t displaystyle x mathrm Schnittpunkt nbsp eine Polygonkante schneidet alle Pixel dieser Bildzeile mit einer x Koordinate strikt grosser als x S c h n i t t p u n k t 0 5 displaystyle x mathrm Schnittpunkt 0 5 nbsp invertiert Invertierung bedeutet hier dass eingefarbte Pixel in den Ausgangszustand zuruckgesetzt werden und umgekehrt Die Reihenfolge in der die Polygonkanten abgearbeitet werden ist beliebig Wenn der Algorithmus die Kanten des Beispielpolygons gegen den Uhrzeigersinn abarbeitet so ergeben sich folgende Schritte nbsp Das gerasterte Polygon unterscheidet sich von dem der Kantenlisten Algorithmen denn drei Pixel werden nicht eingefarbt Der Nachteil des Algorithmus ist dass viele Pixel mehrmals geandert werden mussen Fence fill Algorithmus Bearbeiten Der Fence fill Algorithmus 4 ist eine Weiterentwicklung des Edge fill Algorithmus der die Zahl der notigen Pixelinvertierungen verringert Dabei wird ein Zaun engl fence eine durch den Schnittpunkt zweier Polygonkanten verlaufende vertikale Gerade genutzt Fur alle Schnittpunkte auf der linken Seite des Zauns werden alle Pixel vom Schnittpunkt bis links vom Zaun invertiert Fur alle Schnittpunkte auf der rechten Seite des Zauns werden alle Pixel vom Zaun bis links vom Schnittpunkt invertiert Dadurch ergeben sich folgende Schritte nbsp Edge flag Algorithmus Bearbeiten nbsp Eingefarbte Kontur nach dem ersten Schritt des Edge flag AlgorithmusDer Edge flag Algorithmus 5 besteht aus zwei Schritten Im ersten Schritt wird die Kontur des Polygons gezeichnet Dazu wird fur jeden Schnittpunkt einer Polygonkante mit einer Bildzeile das erste Pixel mit der Koordinate x gt x S c h n i t t p u n k t 0 5 displaystyle x gt x mathrm Schnittpunkt 0 5 nbsp eingefarbt siehe Bild Fur jede Polygonkante linie des Polygons punkt1 linie punkt1 punkt2 linie punkt2 wenn punkt1 y gt punkt2 y dann tausche punkt1 mit punkt2 Fur jede Bildzeile y des Bildes steigung inv punkt1 x punkt2 x punkt1 y punkt2 y schnittpunkt y y 0 5 schnittpunkt x punkt1 x steigung inv schnittpunkt y punkt1 y x abrunden schnittpunkt x wenn x 0 5 lt schnittpunkt x dann x x 1 Randpunkt des Schnittpunktes mit der Bildzeile umkehren einfarben oder zurucksetzen Pixel x y Pixel x y Im zweiten Schritt werden die Pixel innerhalb dieser Kontur eingefarbt Dazu wird eine boolesche Variable verwendet die angibt ob man sich aktuell innerhalb des Polygons befindet oder nicht Als Pseudocode lasst sich dieser Schritt folgendermassen beschreiben Fur jede Bildzeile y die das Polygon schneidet Innerhalb Falsch Fur jedes x von links bis rechts Wenn Pixel x y eingefarbt ist Innerhalb negieren Wenn Innerhalb Pixel x y einfarben ansonsten Pixel x y auf Hintergrundfarbe zurucksetzen Als Softwareimplementierung sind der Kantenlisten Algorithmus und der Edge flag Algorithmus vergleichbar schnell 6 implementiert in Hardware ist letzterer jedoch erheblich schneller Siehe auch BearbeitenRasterung von Linien Rasterung von KreisenLiteratur BearbeitenJames D Foley u a Computer Graphics Principles and Practice Addison Wesley Reading 1995 ISBN 0 201 84840 6 David F Rogers Procedural Elements for Computer Graphics WCB McGraw Hill Boston 1998 ISBN 0 07 053548 5 Peter Shirley u a Fundamentals of Computer Graphics AK Peters Wellesley 2005 ISBN 1 56881 269 8 Einzelnachweise Bearbeiten Donald E Knuth A note on digitized angles In Electronic Publishing Origination Dissemination and Design 3 2 Mai 1990 S 99 104 ISSN 0894 3982 James D Foley u a Computer Graphics Principles and Practice S 97 Bryan Ackland Neil Weste Real time animation playback on a frame store display system In ACM SIGGRAPH Computer Graphics 14 3 Juli 1980 S 182 188 ISSN 0097 8930 Michael Dunlavey Efficient polygon filling algorithms for raster displays In ACM Transactions on Graphics 2 4 Oktober 1983 S 264 273 ISSN 0730 0301 Bryan Ackland Neil Weste The edge flag algorithm a fill method for raster scan displays In IEEE Transactions on Computers 30 1 Januar 1981 S 41 48 ISSN 0018 9340 Turner Whitted David Weimer A software test bed for the development of 3 D raster graphics systems In ACM SIGGRAPH Computer Graphics 15 3 August 1981 S 271 277 Abgerufen von https de wikipedia org w index php title Rasterung von Polygonen amp oldid 225472362