Computergrafik

Baryzentrische Interpolation im Dreieck

Z-Buffer Fighting | | Bresenham

FĂĽr jedes aus einem projizierten Dreieck generierte (d.h. rasterisierte) Fragment mĂĽssen die assoziierten Attribute der Eckpunkte (Farbe, Normale, Texturkoordination, etc.) interpoliert werden → baryzentrische Interpolation.

Innerhalb eines Dreiecks ergibt die baryzentrische Interpolation aus den Eckwerten $s_{1/2/3}$ an den Eckpunkten $\vec{v}_{1/2/3}$ den Skalarwert am Punkt $\vec{v}$.

$ f(\vec{v}) = f(w_1,w_2,w_3) = w_1s_1 + w_2s_2 + w_3s_3 $ mit
$ w_1 = det(\vec{v_3}-\vec{v},\vec{v_2}-\vec{v}) D^{-1} $
$ w_2 = det(\vec{v_1}-\vec{v},\vec{v_3}-\vec{v}) D^{-1} $
$ w_3 = det(\vec{v_2}-\vec{v},\vec{v_1}-\vec{v}) D^{-1} $
$ D = det(\vec{v_3}-\vec{v_1},\vec{v_2}-\vec{v_1}) $

Bemerkung: Die Determinate $det(\vec{v1},\vec{v2},\vec{v3})$ kann man sich als das Doppelte des Flächeninhalts des Dreiecks $A_{123}$ vorstellen:

$A_{123} = \frac{1}{2} det(\vec{v1},\vec{v2},\vec{v3})$

Damit ergeben sich die Faktoren $w_1$, $w_2$, $w_3$ jeweils als Verhältnis von Flächeninhalten wie im Folgenden am Fall $w_1 = A_{23} / A_{123}$ illustriert (der Faktor $\frac{1}{2}$ kürzt sich heraus):

Rechenbeispiel:

$\vec{v_1} = \left( \begin{array}{c} 2 \\ 0 \end{array} \right)$
$\vec{v_2} = \left( \begin{array}{c} 3 \\ 0 \end{array} \right)$
$\vec{v_3} = \left( \begin{array}{c} 2 \\ 2 \end{array} \right)$
$\vec{v} = \left( \begin{array}{c} 2 \\ 1 \end{array} \right)$
$ w_1 = 0.5 $
$ w_2 = 0.0 $
$ w_3 = 0.5 $
Kontrolle: $\vec{v} = w_1\vec{v_1} + w_2\vec{v_2} + w_3\vec{v_3} $


Z-Buffer Fighting | | Bresenham

Options: