29
Rasterung von zweidimensionalen Objekten Andreas Spillner Computergrafik, WS 2018/2019

Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Embed Size (px)

Citation preview

Page 1: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Rasterung von zweidimensionalen Objekten

Andreas Spillner

Computergrafik, WS 2018/2019

Page 2: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Verortung der Rasterung in der Rendering Pipeline

darzustellende Objekte (z.B. aus Datenbank)

Anordnung der Objekte in einer Szene

Bestimmung des sichtbaren Bereichs der Szene

Berechnung des zweidimensionalen Bildes der Szene

Page 3: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Grundproblem

Kontinuierliche geometrische Objekte müssen durch eineendliche Menge von Pixeln dargestellt werden.

Dabei gibt es oft mehr als nur eine geeignete Darstellung.

Page 4: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Fallunterscheidung

(x0, y0)

(x1, y1)

g(x, y) = (y0 − y1)x+ (x1 − x0)y + x0y1 − x1y0 = 0

x0 ≤ x ≤ x1

y0 ≤ y ≤ y1

y

x

Page 5: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Grundidee

(x0, y0) ??

I Man arbeitet die Spalten von links nach rechts ab.I Man muss in jedem Schritt entscheiden, ob das Pixel in der

gleichen Zeile oder eine Zeile höher gesetzt werden soll.

Page 6: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Der Mittelpunkt-Algorithmus

1 2 3 4 5 6 70 8 1 2 3 4 5 6 70 801234

y

x

1 2 3 4 5 6 70 8

g(3, 1.5) < 0 g(4, 2.5) ≥ 0 g(5, 2.5) ≥ 0

Allgemein: HalbebenentestI Letztes Pixel gesetzt bei Koordinaten (x , y).I Nächstes Pixel bei

I (x + 1, y + 1), falls g(x + 1, y + 0.5) < 0 ist.I (x + 1, y), sonst.

Page 7: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Ein bisschen Tuning

I Die meiste Zeit wir zur Berechnung von g(x + 1, y + 0.5)benötigt.

I Das lässt sich vermeiden, indem man ausnutzt:

g(x + 1, y) = g(x , y) + (y0 − y1)

g(x + 1, y + 1) = g(x , y) + (y0 − y1) + (x1 − x0)

Page 8: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Inkrementelle Version des Mittelpunkt-Algorithmus

y := y0d := g(x0 + 1, y0 + 0.5)for x := x0 to x1 do

Setze Pixel bei (x , y)if d < 0 then

y := y + 1d := d + (y0 − y1) + (x1 − x0)

elsed := d + (y0 − y1)

Etwas unschön ist noch, dass diese Version nicht mitganzzahligen Variablen auskommt.

Page 9: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Inkrementelle Version des Mittelpunkt-Algorithmus

Das lässt sich aber leicht beheben: das Vorzeichen von g(x , y)und 2g(x , y) ist ja gleich:

y := y0d := 2(y0 − y1)(x0 + 1) + (x1 − x0)(2y0 + 1) + 2x0y1 − 2x1y0for x := x0 to x1 do

Setze Pixel bei (x , y)if d < 0 then

y := y + 1d := d + 2(y0 − y1) + 2(x1 − x0)

elsed := d + 2(y0 − y1)

Page 10: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Zusammenfassung zum Mittelpunktalgorithmus

I Der Algorithmus wurde von Pitteway 1967 vorgestellt.I Er lässt sich auch auf andere Kurvenarten (zum Beispiel

Ellipsen) anwenden.I Für Strecken werden beim Mittelpunktalgorithmus die

gleichen Pixel gesetzt wie beim Algorithmus, der 1965 vonBresenham vorgestellt wurde (Bresenham-Algorithmus).

I Der Rechenaufwand ist linear in der Anzahl der gesetztenPixel.

Page 11: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Ausnutzung sich wiederholender Muster

DHDHD

Page 12: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Konstruktion einer geeigneten Folge

Beobachtungen:I Insgesamt braucht man ∆(x) := x1 − x0 Schritte.I Davon sind ∆(y) := y1 − y0 Diagonalschritte.I Die restlichen ∆(x)−∆(y) Schritte sind Horizontalschritte.

Natürlich gibt es eine solche Folge:

H(∆(x)−∆(y))D∆(y)

Aber diese liefert in den meisten Fällen keine brauchbareDarstellung der gegebenen Strecke.

Page 13: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Der Algorithmus von Brons

Wir nehmen an: ∆(x) und ∆(y) sind teilerfremd.

∆(x) = 15

∆(y) = 9

Ansonsten zerlegen wir die Strecke in ggt(∆(x),∆(y))Abschnitte.

Page 14: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Beispiel Anwendung des Algorithmus von Brons

Endpunkte: (x0, y0) = (0,0) und (x1, y1) = (82,34)

1. ∆(x) = 82, ∆(y) = 342. ggt(82,34) = 2, also teilen wir H24D17 auf.3. 24 = 1 · 17 + 7, also teilen wir (HD)10(H2D)7 auf.4. 10 = 1 · 7 + 3, also teilen wir (HDH2D)4((HD)2H2D)3 auf.5. 4 = 1 · 3 + 1, also wird

(HDH2D(HD)2H2D)2((HDH2D)2(HD)2H2D)

ausgegeben.

Page 15: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Zusammenfassung Algorithmus von Brons

I Im Wesentlichen handelt es such um den euklidischenAlgorithmus zur Berechnung des größten gemeinsamenTeilers.

I Bei entsprechend kompakter Speicherung der Ausgabeerreicht man somit theoretisch eine Laufzeit dielogarithmisch in der Anzahl der zu setzenden Pixel ist.

I Praktisch ergeben sich dann aber eine Reihe vonSchwierigkeiten: Wie kommt man z.B. schnell von derkompakt gespeicherten Folge zur gerasterten Strecke?

Page 16: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Pixeldichte einer Strecke

99 = 1 9√

85≈ 0.976 9√

29≈ 0.707

Pixeldichte allgemein:

∆(x)√∆(x)2 + ∆(y)2

Page 17: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Problem unterschiedlicher Pixeldichte

I Eine teilweise Lösung des Problems ist die Verwendungvon verschiedenen Intensitäten für verschiedeneSteigungen.

I Das hat aber auch Nachteile. Zum Beispiel wird dadurchdie Gesamtintensität des Bildes gemindert.

Page 18: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Unterschiedliche Linienstile

Eine sehr einfache Möglichkeit zur Beschreibung vonLinienstilen sind Bitmasken:

1 1 0 0 1 1 0 0 1 1 1 0 0 1 1 0 0 1

Dabei treten aber ähnliche Probleme auf wie bei derPixeldichte.

Page 19: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Aliasing

Durch das Rastern entstehen manchmal Strukturen, die imbesten Falle einfach unschön aussehen, im schlimmsten FallMuster vorgaukeln, die es im ungerasterten Objekt gar nichtgab.

Page 20: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Antialiasing

Auch diesem Effekt kann man durch Verwendung von Pixelnunterschiedlicher Intensität entgegenwirken.

Page 21: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Antialiasing durch unweighted area sampling

R

pQ(p)

Die Intensität ist proportional dem Flächeninhalt desDurchschnitts von:

I Sampling-Quadrat Q(p) undI Rechteck R, welches die gegebene Strecke umschließt

Page 22: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Heuristik zum unweighted area sampling

I Die Berechnung des exakten Flächeninhalts ist in derPraxis oft zu aufwendig.

I Heuristik: Überziehe Q(p) mit einem Punktegitter undzähle Gitterpunkte in R.

RQ(p)

Page 23: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Zeichnen breiter Linien durch Pixelreplikation

Einfachster Ansatz: Man setzt oberhalb und unterhalb jedesgesetzten Pixels weitere k Pixel.

Dabei hat man auch mit den schon besprochenen ProblemenPixeldichte und Aliasing zu kämpfen.

Page 24: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Weitere Ansätze zum Zeichnen breiter LinienI Verwendung eines Zeichenstifts (Verallgemeinerung der

Pixelreplikation).Die Spitze des Zeichenstifts, insbesondere seine Breite,sind beliebig wählbar.Gesetzt werden alle Pixel, die die Spitze erreicht, wennman sie entlang der gegebenen Strecke führt.

Spitze

I Strecken können auch gleich als auszufüllenden Polygonebetrachtet werden.

Page 25: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Rasterung von Polygonen

Welche Pixel sollen gesetzt werden?

?

?ungerade: Pixel setzen

gerade: Pixel nicht setzen

Verwendung der Odd-Parity-Regel.

Page 26: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Scan-line Algorithmus

I Für jedes Pixel extra festzustellen, ob es gesetzt werdensoll oder nicht, ist zu aufwendig.

I Man arbeitet zeilenweise von links nach rechts und merktsich den gegenwärtigen Zustand (gerade oder ungerade)

Page 27: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Technische Details

I Korrekte Bestimmung und Behandlung der Schnittpunktezwischen scan-line und gegebenem Polygon.

I Aliasing

Page 28: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Spezialfall Dreiecke

Für Dreiecke bietet es sich manchmal an, sogenanntebaryzentrische Koordinaten zu verwenden.

a

b

cp

I Für jeden Punkt p in der Ebene gibt es eindeutigbestimmte α, β, γ ∈ R mit α + β + γ = 1 undp = αa + βb + γc (affine Kombination).

I p liegt liegt im Dreieck mit Ecken a,b, c genau dann, wennα, β, γ alle nicht negativ sind (konvexe Kombination).

Page 29: Rasterung von zweidimensionalen Objektenweb.hs-merseburg.de/~spillner/lehre/ws2018/computergrafik/foliensatz01.pdf · Aliasing Durch das Rastern entstehen manchmal Strukturen, die

Einfache Anwendung: Interpolation der Pixelintensität

Jede der Ecken a,b, c hat eine Intensität Ia, Ib, Ic .

for all x dofor all y do

Berechne Koordinaten (α, β, γ) für den Punkt p = (x , y)if (α ≥ 0 and β ≥ 0 and γ ≥ 0) then

Ip := αIa + βIb + γIcSetze das Pixel am Punkt p mit Intensität Ip.

Effizienter: Schleifen nur über (x , y) im kleinstenumschließenden Rechteck (bounding box):