02 — Produit scalaire et produit vectoriel
Ce que tu vas apprendre
- L'addition, la soustraction et la mise à l'échelle de vecteurs
- Le produit scalaire : ce qu'il calcule et pourquoi il est partout
- Le produit vectoriel : la perpendiculaire, et pourquoi l'ordre compte
- Comment ces opérations servent concrètement au rendu
Prérequis
Deux opérations sur les vecteurs reviennent dans absolument tout le code de rendu : le produit scalaire et le produit vectoriel. Si tu ne devais retenir que deux formules de cette série, ce seraient celles-là. Mais d'abord, les opérations triviales.
Les opérations de base
L'addition et la soustraction de vecteurs se font composante par composante :
A + B = (A.x + B.x, A.y + B.y, A.z + B.z)
A − B = (A.x − B.x, A.y − B.y, A.z − B.z)
La soustraction de deux points donne un vecteur : B − A est la flèche qui va de A vers B. C'est l'opération la plus fréquente pour fabriquer une direction (« du point touché vers la lumière », par exemple). Multiplier un vecteur par un nombre (scalaire) l'allonge ou le raccourcit sans changer sa direction.
Le produit scalaire : un angle
Le produit scalaire (dot product) prend deux vecteurs et renvoie un seul nombre :
A · B = A.x·B.x + A.y·B.y + A.z·B.z
Ce nombre cache une mine d'or, car il vaut aussi :
A · B = ‖A‖ · ‖B‖ · cos(θ)
où θ est l'angle entre les deux vecteurs. Trois conséquences immédiates, omniprésentes en rendu :
- Si A et B sont unitaires, alors
A · B = cos(θ)directement. C'est exactement ce qui sert à calculer l'éclairage diffus : la lumière reçue par une surface est proportionnelle au cosinus de l'angle entre la normale et la direction de la lumière. Un simple produit scalaire, et on a l'ombrage de Lambert. - Le signe dit l'orientation : positif → les vecteurs pointent globalement dans le même sens ; négatif → sens opposés ; zéro → ils sont perpendiculaires. Tester l'orthogonalité, c'est tester
A · B == 0. - Pour récupérer l'angle lui-même, on prend l'arc cosinus du produit scalaire de deux vecteurs unitaires.
Le produit scalaire est commutatif : A · B = B · A.
Le produit vectoriel : une perpendiculaire
Le produit vectoriel (cross product) prend deux vecteurs et renvoie un vecteur, perpendiculaire aux deux à la fois :
C = A × B
C.x = A.y·B.z − A.z·B.y
C.y = A.z·B.x − A.x·B.z
C.z = A.x·B.y − A.y·B.x
Son usage premier : fabriquer une perpendiculaire. Tu as deux directions sur une surface (deux côtés d'un triangle) ? Leur produit vectoriel te donne la normale. Tu as une direction de visée et un « haut » approximatif ? Leur produit vectoriel te donne le « côté droit » — c'est exactement ce qui fera marcher la fonction LookAt (article 10).
Deux mises en garde cruciales :
- Le produit vectoriel est anticommutatif :
A × B = −(B × A). L'ordre change le sens du résultat. Inverser deux arguments retourne la normale ; c'est une cause classique de surfaces éclairées à l'envers. - Le sens du résultat dépend de la main du repère (article 01). Droitier et gaucher donnent des perpendiculaires opposées pour les mêmes vecteurs.
C = A × B (perpendiculaire au plan de A et B)
↑
|
+———→ B
/
A
Récapitulatif des usages
| Opération | Renvoie | Sert à… |
|---|---|---|
A − B (points) |
un vecteur | fabriquer une direction |
A · B |
un nombre | angle, éclairage diffus, test de perpendicularité |
A × B |
un vecteur | normale, repère local, « côté droit » |
| normalisation | un vecteur unitaire | garder la direction, jeter la longueur |
Ces quatre gestes couvrent l'écrasante majorité du calcul vectoriel d'un moteur de rendu. L'article suivant change d'échelle : au lieu d'opérer vecteur par vecteur, on encode une transformation entière dans un objet unique — la matrice.
Sources
- Scratchapixel. Geometry — Math Operations on Points and Vectors. scratchapixel.com
- Sanderson, G. (3Blue1Brown). Dot products et Cross products, dans Essence of Linear Algebra. 3blue1brown.com
- Marschner, S., & Shirley, P. (2021). Fundamentals of Computer Graphics (5ᵉ éd.), chap. « Vectors ». CRC Press.