Computergrafik

Normalen

Per-Vertex Attribute | | Interpolierte Parameter

Ebenso wie die Eckpunkte der Geometrie, mĂĽssen die Normalen z.B. fĂĽr eine Beleuchtungsberechnung spezifiziert und ins Beobachterkoordinatensystem transformiert werden.

Problem: Normalen lassen sich nicht mit Hilfe der gleichen Matrix transformieren wie die Vertices.

Weiteres Problem: Nach der Transformation einer Normale mit einer Matrix M, hat die Normale nicht notwendigerweise mehr die selbe Länge wie vor der Transformation (Skalierung).

Sei t der Tangentenvektor an die Fläche, und n der Normalenvektor der Fläche.

Trick: $n\cdot t = 0$$n^Tt = 0$

$n^TM^{-1}Mt = 0$

$(n^TM^{-1})(Mt) = 0$ (1)

FĂĽr das transformierte System gilt
$ (Nn)\cdot (Mt) = 0$$(Nn)^T (Mt) = 0$

Vergleich mit (1) ergibt
$-> (Nn)^T = (n^TM^{-1})$

Nach Transponierung:
$Nn = {M^{-1}}^Tn$

Skalarprodukt mit $\frac{1}{|n|^2}n$:
$N = {M^{-1}}^T$

Daraus folgt, dass Normalen mit der transponierten inversen Modellierungstransformationsmatrix N multipliziert werden mĂĽssen, damit sie weiterhin senkrecht bleiben.

Vertices werden mit der $M_{MV}$ transformiert und Normalen mit $({M_{MV}}^{-1})^T$.

Zusätzlich muss die Normale nach der Transformation renormalisiert werden, wenn die Matrix $M$ nicht orthonormal war.

Live Demo: GLSL Normal Transformation (T11c)

Per-Vertex Attribute | | Interpolierte Parameter

Options: