Interpolation in Dreiecken


Gradienten

Wenn wir effizient durch ein Dreieck die Parameter berechnen wollen, stellt sich die Frage, wie man effizient die Deltawerte berechnet. Eine Möglichkeit wäre es, wie beim Gouraudshading vorzugehen und erst auf den Kanten die Werte zu interpolieren und im Anschluss zwischen zwei Kanten jeweils immer für eine Zeile. Dieses ist bereits Effizient aber geht es noch besser ? Ja natürlich geht es. Wir berechnen einfach die Gradienten des Dreiecks.

Angenommen wir haben, wie im Bild zu sehen ist, das Dreieck bestehend aus den Punkten P0, P1 und P2. Jeder Punkt hat zu dem einen Parameter (Farbwert, Texturkoordinate, etc. ) den wir jeweils mit C0, C1 und C2 beschreiben. Wir wollen nun die y – Koordinate festhalten und schauen sie der Parameter C ändert, wenn wir uns in x Richtung bewegen. Dazu stellen wir folgende Verhältnisgleichungen auf.

Wie man leicht sieht hat Y4 den gleichen Wert wie Y0, also substituieren wir und erhalten somit:

Da wir ja schauen wollten, wie sich der Parameter C ändert, wenn wir y konstant halten und uns in x Richtung bewegen, berechnen wir nun den Deltawert.

Das selbe machen wir jetzt noch einmal, in dem wir x konstant halten und uns in y Richtung bewegen.

Rastern wir nun unser Dreieck von oben nach unten und haben als Startwert C0, so können wir für jeden Schritt in y Richtung einfach den Wert dc / dy und für jeden Schritt in x Richtung den Wert dc / dx addieren bzw. subtrahieren.



Index

Interpolation in Dreiecken und Rasterisierung

Rasterisierung von Dreiecken