Zum Inhalt springen

Normalentransformation

Bisher haben wir mit unseren Matrizen die Positionen der Vertices verändert. Ein 3D-Objekt besitzt aber nicht nur Vertex-Positionen, sondern auch Normalen.

Eine Normale ist ein Vektor, der senkrecht auf einer Oberfläche steht. Wenn wir ein Objekt drehen, muss sich deshalb auch die Richtung seiner Normalen ändern.

Bei einer einfachen Drehung können wir dafür dieselbe Transformation verwenden wie für die Richtungen des Objekts.

Schwieriger wird es, wenn wir ein Objekt ungleichmäßig skalieren, also beispielsweise in der Höhe stärker vergrößern als in der Breite.

Dabei verändert sich die Ausrichtung seiner Oberflächen. Wenn wir die Normalen einfach genauso transformieren wie die Vertices, stehen sie anschließend möglicherweise nicht mehr senkrecht auf den Oberflächen.

Um das zu verhindern, verwenden wir eine besondere Matrix: die Normalenmatrix.

Sie sorgt dafür, dass die transformierten Normalen weiterhin senkrecht auf den transformierten Oberflächen stehen.

Die Normalenmatrix wird aus dem Teil der Model-Matrix berechnet, der die Ausrichtung und Form eines Objekts verändert. Eine reine Verschiebung spielt dabei keine Rolle, da sie die Richtung einer Normale nicht beeinflusst.

Für die Berechnung benötigen wir die inverse transponierte Matrix. Was das bedeutet und warum wir sie brauchen, sehen wir uns bei der Skalierung anhand eines konkreten Beispiels genauer an.

ToDos: Die Normalenmatrix später mathematisch herleiten und Schritt für Schritt zeigen, warum sie als inverse transponierte Transformationsmatrix berechnet wird. Idealerweise nach Skalierung und Rotation!