Lors du rendu de scènes 3D avec des transformations appliquées aux objets, les normales doivent être transformées avec l'inverse transposé de la matrice de vue du modèle. Donc, avec un normal , modelViewMatrix , la normale transformée estM n ′
Lors de la transformation des objets, il est clair que les normales doivent être transformées en conséquence. Mais pourquoi, mathématiquement, est-ce la matrice de transformation correspondante?
Réponses:
Je vais réécrire ceci avec les produits scalaires exprimés en notation matricielle (en considérant les vecteurs comme des matrices à 1 colonne):
Maintenant, pour satisfaire cela pour tout , nous devons avoir:X
Maintenant, résolvant pour en termes de , nn′ n
Il s'agit essentiellement d'une propriété du produit scalaire. Pour que le produit scalaire reste invariant lorsqu'une transformation est appliquée, les deux vecteurs en pointillés doivent se transformer de manière correspondante mais différente.
Mathématiquement, cela peut être décrit en disant que le vecteur normal n'est pas un vecteur ordinaire, mais une chose appelée covecteur (aka vecteur covariant, vecteur dual ou forme linéaire). Un covecteur est fondamentalement défini comme "une chose qui peut être parsemée d'un vecteur pour produire un scalaire invariant". Pour y parvenir, il doit se transformer en utilisant la transposition inverse de toute matrice opérant sur des vecteurs ordinaires. Cela vaut dans un certain nombre de dimensions.
Notez qu'en 3D spécifiquement, un bivecteur est similaire à un covecteur. Ils ne sont pas tout à fait les mêmes car ils ont des unités différentes: un covecteur a des unités de longueur inverse tandis qu'un bivecteur a des unités de longueur au carré (surface), donc ils se comportent différemment sous l'échelle. Cependant, ils se transforment de la même manière en ce qui concerne leur orientation, ce qui est important pour les normales. Nous ne nous soucions généralement pas de l'ampleur d'une normale (nous les normalisons toujours de toute façon à la longueur unitaire), nous n'avons donc généralement pas besoin de nous soucier de la différence entre un bivecteur et un covecteur.
la source
C'est tout simplement parce que les normales ne sont pas vraiment des vecteurs! Ils sont créés par des produits croisés, ce qui donne des bivecteurs et non des vecteurs. L'algèbre fonctionne très différemment pour ces coordonnées, et la transformation géométrique n'est qu'une opération qui se comporte différemment.
Une excellente ressource pour en savoir plus à ce sujet est la présentation d'Eric Lengyel sur Grassman Algebra .
la source