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⋅t=0 → nTt=0
nTM−1Mt=0
(nTM−1)(Mt)=0 (1)
Für das transformierte System gilt
(Nn)⋅(Mt)=0 → (Nn)T(Mt)=0
Vergleich mit (1) ergibt
−>(Nn)T=(nTM−1)
Nach Transponierung:
Nn=M−1Tn
Skalarprodukt mit 1|n|2n:
N=M−1T
Daraus folgt, dass Normalen mit der transponierten inversen Modellierungstransformationsmatrix N multipliziert werden müssen, damit sie weiterhin senkrecht bleiben.
Vertices werden mit der MMV transformiert und Normalen mit (MMV−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)