Das Signed-Distance-Rasterisierungsverfahren ist der quasi-Standard zum Rasterisieren von Dreiecken.
Voraussetzungen
Die Verticies der Dreiecke sind gegen den Uhrzeigersinn angeordnet. Dies entspricht auch dem Standard in der Mathematik.
Grundidee
Wir malen ein Pixel an, wenn dessen Mittelpunkt im Dreieck liegt. Zum bestimmen, ob ein Punkt in einem Dreieck liegt, geht man die Vektoren des Dreiecks ab. Wenn ein Punkt links von jedem der Vektoren des Dreiecks liegt, dann ist er innerhalb des Dreiecks.
Beispiel
- Der Punkt
ist innerhalb des Dreiecks, denn er ist links von jedem der Dreiecksvektoren , und . - Der Punkt
ist nicht innerhalb des Dreiecks. Er ist zwar links von den Vektoren und , aber nicht links vom Vektor .
Mathematische Bestimmung
Ein Punkt
Dabei ist
Siehe auch
Beispiel
Gebeben:
Der Punkt
Algorithmisch
Wendet man diese Regel für alle 3 Kanten des Dreiecks an, kann man bestimmen, ob ein Punkt im Dreieck ist.
Optimierung
Bounding Box, die das Dreieck so enganliegend umschließt wie möglich
Notizen aus der VL
Signed-Distance Rasterisierungsverfahren
- Standard
Dreiecke rotieren standardmäßig in der Mathematik gegen den Uhrzeigersinn.
Idee des Algorithmus: Man geht die Vektoren des Dreiecks ab. Wenn bei jedem der 3 Vektoren der Punkt links von dem Vektor ist, dann ist er innerhalb. Ist der Punkt nicht an allen Vektoren links, ist er außerhalb.
Idee (tafel): Wir gehen den (konvexen) Polygonzug entlang und prüfen, ob der gegebene Punkt immer auf der Seite “nach innen” ist. Heißt: Polygonzug -> gerichtete Kanten:
algorithmisch:
Oft hilft es Richtungen zu Normalisieren:
“Die Richtung von a nach b ist der Vektor b-a geteilt durch seine Länge (=> normalisiert)”
Aus einer Richtung in 2D kann direkt eine orthogonale Richtung, eine Normale, abgedeckt werden:
“Die Normale von einer Richtung.”
Man tauscht die Komponenten und bei einer streut man ein negatives Vorzeichen rein
Skalarprodukt
Wir haben 2 Vektoren
Auch gut zu Wissen:
Dementsprechend ist das Skalarprodukt von 2 orthogonalen Richtungen = 0.
=> Wann ist der Punkt p links von der Kante b-c ?
Wenn
Also wenn
Performance Optimierung
-> Bounding Box, die das Dreieck so enganliegend umschließt wie möglich