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)