retour à l'accueil dernière actualité articles interviews qcm dictionnaires bibliothèque forums inscription membre profile recherche sauvegardes contacts aides
entete 0titre de la page
menu du haut




A quoi servent les matrices dans un moteur 3D ?
 Auteur : JF Maquiné Dernière révision : 23 Juin 2005
Faire un commentaire :   0 message(s)








Introduction
   

Les matrices, ces êtres étranges venus d'ailleurs, et que l'on rencontre les soirs de brume ... Bref nous allons voir dans ce mini-article l'utilité des matrices pour le développement des applications 3D. Ce long mini-article est en deux parties. Dans la première, je donnerais des informations de base sur les repères, les points et objets dans l'espace, les vecteurs, puis dans la seconde partie les différentes représentations mathématiques d'une action comme la rotation dans l'espace dont les matrices font partie, puis des matrices elles-mêmes et de quelques unes de leurs particularités.

Bonne lecture :)





Point et objet dans un espace à 3 dimensions
   

Pour décrire un point dans l'espace 3D, il nous faut un repère 3D, c'est-à-dire 3 axes qu'on nomme généralement X,Y et Z, et une origine qui est le point d'intersection de ces trois axes et qu'on nomme O. Pour positionner un point P dans cet espace, il nous faut ses coordonnées x, y et z et on écrit P(x,y,z). Le point O a pour coordonnées O(x=0,y=0,z=0) ou O(0,0,0). Donc pour 'repérer' un point, on utilise un repère. Il existe plusieurs type de repère, mais celui dont nous parlerons est dit orthonormé, c'est a dire que les axes forment entre eux des angles de 90°.

Pour les objets, c'est un peu plus compliqué puisqu'il nous faut, en plus de ses coordonnées qui correspondent généralement au centre de l'objet, son orientation. Effectivement, si un personnage a une position P dans un espace, il a aussi une orientation : il est de face, de dos, de côté, ... Pour décrire cela, on utilise les vecteurs. Pour travailler avec les vecteurs il nous faut ajouter une base au repère. Une base est un ensemble de vecteur linéairement indépendant. En gros cela signifie qu'a partir de ces vecteurs de 'base' ont peut construire tout autre vecteurs. On ajoute au repère O,X,Y,Z une base, donc 3 vecteurs qu'on nomme généralement i,j,k.





Trois représentations mathématiques différentes d'une rotation dans l'espace
   

Nous allons prendre un exemple concret d'une opération mathématique dans l'espace ou plus exactement d'une transformation. Il s'agit de la rotation selon l'axe Z. Il existe d'autres transformations, comme la translation, l'homotéthie, ... Toutefois, pour ne pas alourdir les explications de ce mini-article, je ne démontrerais pas les formules présentées ci-dessous, mais cela fait appel essentiellement à la trigonométrie. Une autre particularité est que je ne précise pas l'axe Z dans les équations qui suivent dans la mesure où Z ne joue aucun rôle direct, ce ne sera pas le cas dans la seconde partie de ce mini-article.

Rotation par un système d'équation :
Voici le système d'équation qui permet de faire une rotation autour de l'axe Z. z1 = z représente le fait que la coordonnée z n'est pas modifiée et que c'est autour de cet axe que se fait la rotation. Si on faisait une rotation autour de Y, on aurait un autre système d'équation et Y = Y, même chose pour X.

Dans ce système x1, y1 sont les coordonnées du point P(x,y) après rotation.

Rotation par les matrices
Voici la matrice de rotation. Certains auront remarqué qu'on ne fait qu'exprimer les coefficients du système d'équation dans un tableau. C'est exact car avant tout une matrice est un tableau carré (même nombre de lignes et de colonnes) ou rectangulaire (nombre de lignes et de colonnes différent) dans lequel on met des valeurs numériques. Vous me direz que cos() n'est pas un nombre. En pratique, on réalise souvent les calculs intermédiaires en conservant les coefficients sous forme de fonction, mais comme une fonction : f(x) = y et que y est un nombre. Donc une matrice est bien constituée de nombres et au final il faudra les calculer.

Ce qu'il faut bien comprendre, c'est que les matrices ne sont qu'une représentation de quelque chose, ce peut être un système d'équation linéaire, d'application linéaire liée au calcul vectoriel, ... Les matrices ne sont qu'une notation, la représentation de quelque chose qui a un sens mathématique, mais c'est une notation qui simplifie considérablement l'approche qu'on peut avoir de certains problèmes qui peuvent devenir complexes. Ainsi le système d'équation vu plus haut, peut se résumer à :

il est évident que cette forme (Y = A.X) est extrêmement simple, mais il ne faut pas oublier que derrière cela il existe un arsenal mathématique conséquent que je déconseille à toute personne n'ayant pas un niveau bac+1 de se lancer dans l'apprentissage approfondi des matrices. Un dernier point sur les matrices. Si la notation matricielle n'est finalement qu'une notation, celle-ci n'est vraiment utile que quand on effectue des modifications sur des groupes de valeurs numériques, vectorielles, ... qui représentent des objets dans l'espace. On nomme ces modifications des transformations. La rotation, la translation, l'homotéthie ... sont des transformations. Autrement dit, la notation matricielle et les calculs qui peuvent lui être associés n'ont d'utilité que si on change de place un objet, la position du regard sur un objet, etc ...

Rotation par les nombres complexes :
Si vous avez fait une terminale scientifique ou équivalent, vous avez étudier les nombres complexes. Pour les autres, les nombres complexes sont en premier une réponse à la question : quelle est la solution à l'équation x² = -1. Les nombres complexes sont de la forme z = a + bi (i pour imaginaire). Même si c'est avant tout un artifice de calcul, les nombres complexes permettent souvent d'arriver à une solution concrète et il existe même une représentation géométrique des nombres complexes où 'a' représente l'axe des X et 'b' l'axe des Y. A partir de là, on peut utiliser le cercle trigonométrique, et définir une trigonométrie des complexes. Les formules vues précédemment étant issues de la trigonométrie classique et comme il existe des liens entre trigonométrie classique et complexe, on trouve donc une représentation par les nombres complexes de la rotation.

Nous ne parlerons plus des nombres complexes dans la suite de ce mini-article mais avant d'en avoir terminé avec eux, je souhaiterais vous donner une information complémentaire. Dans la seconde partie de cet article, nous allons voir que la forme la plus utile de représentation matricielle s'effectue dans un espace en 4 dimensions. Or nous avons vu que les complexes permettent de travailler dans un espace à deux dimensions. La question est : existe-t-il une formulation des nombres complexes pour une dimension 4, comme les complexes le sont pour une dimension 2 ? La réponse est oui et se nomme les quaternions. Conçus par le mathématicien Hamilton, ils se représentent sous la forme z = a + bi + cj + dk. De plus, les quaternions, s'ils n'ont pas pour vocation de remplacer la représentation matricielle, jouent un rôle de plus en plus important en infographie 3D, dans la mesure où leurs propriétés particulières permettent d'effectuer des combinaisons de transformation (rotations) qui nécessitent moins d'opérations mathématiques que la représentation matricielle.


Nous allons voir dans la suite comment les matrices peuvent être utilisées pour effectuer les différentes opérations mathématiques, et quelles sont les plus importantes.





Représentation en coordonnées homogènes : Introduction
   

Les coordonnées homogènes sont issues du domaine des mathématiques nommé géométrie projective qui est aujourd'hui une partie de l'important domaine mathématique nommé algèbre linéaire. D'un point de vue pratique, les coordonnées homogènes impliquent d'ajouter une dimension. Ainsi dans un espace 2D, la matrice d'une transformation est composée de deux lignes et deux colonnes, ou matrice 2x2. En coordonnées homogènes, les matrices de transformation dans un espace 2D, seront de type 3x3 (trois lignes, trois colonnes). Dans un espace 3D, les matrices de transformation sont de type 3x3 et en coordonnées homogènes en format 4x4, puisqu'on ajoute une dimension. Bref les développeurs 3D travaillent dans la quatrième dimension ;).





Représentation en coordonnées homogènes : Pourquoi ?
   

Je vais répondre ici à deux questions essentielles. La première est pourquoi a-t-on besoin des coordonnées homogènes pour faire des transformations ? Toutes les transformations matricielles comme les rotations, l'homothétie, la symétrie, ... sont des transformations linéaires et respectent ce qu'on nomme les axiomes de linéarité. D'où leur nom de transformation linéaire. Toutes ? Toutes, sauf une ! La translation. Or on ne peut envisager de faire des transformations sans avoir besoin à un moment ou à un autre de la translation. L'utilisation des coordonnées homogènes permet une représentation de la translation qui est 'compatible' avec les autres transformations, c'est-à-dire qu'on rend homogènes toutes les transformations dans leur mode de fonctionnement.

Vu sous un autre angle, il faut savoir que les transformations linéaires, doivent se conformer aux axiomes de linéarité, si elles ne le faisaient, le résultat d'une transformation pourrait tout simplement être indéterminé. En particulier, la composition de transformation linéaire, c'est-à-dire le fait d'associer plusieurs transformations doit produire une transformation linéaire. Ainsi si l'on fait la transformation A.B = C, C est une transformation linéaire qui pourra être utilisée par la suite pour faire d'autres combinaisons telles que C.D = E. D'un point de vue mathématique, le fait que A,B C D soient des transformations linéaires assure qu'il en sera de même pour E. La translation en tant que transformation n'est pas linéaire et donc associée a des transformations linéaires n'assure pas que le résultat sera une transformation linéaire. C'est par l'utilisation des coordonnées homogènes qu'on donne à la translation les propriétés de transformation linéaire.

La deuxième question est : pourquoi le fait d'ajouter une dimension supplémentaire rend-il la translation homogène avec les autres transformations et donc en fait une transformation linéaire ? Je ne vous cacherais pas que la réponse précise à dépasse largement le niveau de cet article, mais ce que je peux vous dire c'est qu'il existe dans l'arsenal mathématique de l'algèbre linéaire des outils qui montrent qu'il est possible de donner les propriétés de linéarité à une transformation, si on l'exprime dans un espace de dimension N+1 (au lieu de N).





Matrices de transformation linéaire
   

Voici les matrices de transformation linéaire les plus couramment utilisées pour des opérations dans un espace 3D, et leur représentation utilise les coordonnées homogènes c'est-à-dire qu'on travaille avec des matrices 4x4.





Multiplication matricielle et composition de transformation
   

Quand on découvre la multiplication matricielle, ça a l'air un peu compliqué mais en fait il s'agit d'une règle de composition qu'on répète à chaque ligne et chaque colonne. Une fois cette règle maîtrisée, la multiplication matricielle ne nécessite qu'une seule chose, de l'attention. Mais bon comme c'est l'ordinateur qui s'en charge, vous ne risquez pas grand chose, mais savoir le faire manuellement vous évitera d'avoir l'air bête si un jour vous en avez besoin ;). Le principe de la multiplication matricielle est de multiplier chaque élément d'une ligne d'une matrice A, à chaque élément d'une colonne d'une matrice B et d'additionner ces résultats pour produire le résultat d'un coefficient de la matrice C. Voici un graphique qui résume cela :



En ce qui concerne la composition de transformation, le problème est le suivant. Soit Y = A.X, et Y' = B.Y alors Y' = B.(A.X) = (B.A).X. Prenons un exemple. Si l'on souhaite faire une rotation, puis une translation à un objet, on ne va pas calculer les coordonnées (Y) résultat de la rotation puis calculer Y' à partir de Y. On va d'abord combiner les matrices de rotation et de translation tel C = A.B, puis on fera directement le calcul Y' = C.X. Attention la multiplication matricielle n'est pas commutative !, c'est à dire que B.A n'est pas égale à A.B, donc respectez toujours l'ordre d'exécution des opérations.

On trouve dans la composition de transformation, la principale réponse à la question que pose ce long mini-article à savoir, que les matrices sont un outil facile à utiliser et parfaitement adapté pour effectuer des combinaisons de transformation.





Comment utiliser les matrices ?
   

Deux voies sont possibles. La première consiste à utiliser les fonctions que l'API met à votre disposition. Dans le cas d'OpenGL, vous disposez de fonctions comme glTranslate(), glrotate(), glScale(). Vous disposez aussi du contrôle de la perspective qui contrôle essentiellement le champ de vision ou FOV en anglais pour Field Of View. Il existe aussi des fonctions de calcul matriciel pour les textures qui permettent de contrôler l'orientation, la position et l'échelle.

En fonction de la carte, l'API va utiliser ou non les instructions mathématiques du processeur graphique ou du processeur principal.

Vous pouvez aussi faire vos propres calculs matriciels, cela peut être utile quand on souhaite un contrôle plus important (plus précis) sur les transformations ou pour des effets spéciaux sur les textures que ne pourraient pas gérer les fonctions de l'API. Vous trouvez dans le lien ci-dessous, entre autre, des exemples de programmation directe du processeur graphique pour des opérations mathématiques.





Conclusion
   

Voilà j'espère que cette petite introduction aux calculs matriciels en infographie 3D aura éclairci votre lanterne et peut-être même éveillé votre intérêt pour vous lancer dans la programmation d'applications 3D. Une remarque toutefois, les américains utilisent de préférence les repères indirects, donc ne soyez pas étonné que les API et les articles anglais sur le sujet présentent les choses sous un autre angle (ah, sacrés américains).

Bien entendu, il ne s'agit que d'un survol d'un domaine en évolution constante et rapide, mais si vous voulez être bon vous devrez passer par l'algèbre linéaire, et un niveau de premier cycle universitaire en mathématique est un minimum. Je souhaite remercier Tanguy Fautré et Patrice Arrighi pour leur relecture. Ce dernier devrait d'ailleurs vous proposer d'ici peu un mini-article sur l'utilisation des quaternions en développement 3D :).




YOUM
(analyseur syntaxique temps réel)
Nombre de définitions trouvées
23
Multi-dico par texte : actif   -   Multi-mots par définition : 4






fonction
menu de droite
fin de menu

qcm du mois
Télescope spatial Hubble
fin qcm


Page générée en : 0.024 secondes
ligne
Technologies Onversity : Hydrogen 1.0 (moteur de base de données) - SE.EN 1.0 (moteur de recherche) - YOUM 2.0 (analyseur syntaxique temps réel)
Tous droits réservés à Jean-François MAQUINÉ
ligne