OpenClassrooms.com
Welcome to OpenClassrooms! By continuing on the site, you are agreeing to our
use of cookies. Read more OK
OpenClassrooms.com
DeutschEspañolFrançais中文Breadcrumb
Home
Course
Développez vos applications 3D avec OpenGL 3.3
Les matrices
Advertising
Medium
Introduction Créer une fenêtre avec la SDL 2.0 Premier affichage Introduction aux shaders Les
matrices La troisième dimension (Partie 1/2) La troisième dimension (Partie 2/2) Push et Pop Les
évènements avec la SDL 2.0 Les textures La caméra TP : Une relique retrouvée Les Vertex Buffer
Objects Les Vertex Array Objects La compilation de shaders OpenGL Shading Language Les
shaders démystifiés (Partie 1/2) Les shaders démystifiés (Partie 2/2) Les Frame Buffer Objects
LES MATRICES
Alors là, nous allons aborder un chapitre assez compliqué. Nous allons découvrir ce
que sont les matrices avec OpenGL, leur utilité, etc... C'est un chapitre assez
technique et surtout rempli de mathématiques . Je vous conseille de bien le relire
plusieurs fois jusqu'à que vous ayez tout compris, car les matrices sont
indispensables avec OpenGL.
Introduction
Lançons nous tout de suite dans le monde des mathématiques. Je vous rappelle
que si vous voulez développer des jeux-vidéo vous ne pouvez pas éviter les maths,
elles sont indispensables au bon fonctionnement du jeu. Les premières notions que
nous allons apprendre sont les transformations.
Qu'est-ce qu'une transformation vous allez me dire ? Au lieu d'une définition
barbante que nous n'allons point retenir ( ) je vais vous donner des exemples de
transformations et vous comprendrez tout de suite ce que c'est :
Une translation : consiste à faire "glisser" un ensemble de points sur un "rail"
(un vecteur).
Une rotation : consiste à faire pivoter un ensemble de points d'un angle
Thêta par rapport à un point.
Une homothétie : consiste simplement à agrandir ou à réduire une forme
géométrique.
Une transformation est donc grosso-modo une modification apportée à un ensemble
de points ou repère dans un espace donné (soit 2D, soit 3D, etc ...). Les 3
transformations que vous voyez là sont les principales transformations utilisées
dans OpenGL, en particulier la translation.
Ok, on sait ce qu'est une transformation maintenant, mais à quoi ça sert ?
Elles vont nous servir à placer tous nos objets (personnages, arbres, maisons, ...)
dans notre monde 3D. A chaque fois que nous voudrons placer un objet nous
utiliserons les transformations. Elles seront essentiellement utilisées sur le repère.
).
Partie théorique
Dans cette partie nous allons apprendre ce que sont les matrices et comment les
utiliser pour nos programmes. Pour simplifier cet apprentissage, je ne vais vous
montrer que la multiplication de matrices car c'est une notion que nous retrouverons
assez souvent dans ce tuto. De plus, cela vous donnera une bonne idée des calculs
matriciels sans pour autant voir les choses les plus compliquées (inversion,
déterminant, etc.).
Matrice carrée
On commence tout de suite cette partie par les matrices carrées.
Une matrice carrée est une matrice ayant le même nombres de colonnes et de
lignes :
Si nous multiplions un vecteur par une telle matrice, le vecteur ne sera absolument
pas changé :
Nous allons étudier la multiplication matricielle dans un instant. Mais vous pouvez
déjà retenir ce principe : si un vecteur est multiplié par une matrice d'identité, alors il
ne sera pas modifié.
Vous avez compris ? Je vous donne un autre exemple pour comparer les différents
résultats :
N'hésitez pas à bien relire et essayez de comprendre ces deux exemples. C'est la
base de la multiplication matricielle.
Je vous rappelle que la matrice est toujours à gauche et le vecteur est toujours à
droite.
Passons à un pseudo-exemple, vous n'avez pas oublié ce qu'est la matrice
d'identité j'espère , on sait qu'un vecteur multiplié par cette matrice ne changera
pas. Maintenant que l'on connait un peu la multiplication on va voir pourquoi le
vecteur n'est pas modifié :
Oh magie, le résultat ne change pas. Vous comprenez pourquoi cette matrice est la
plus simple à utiliser.
Je vais maintenant vous donner un exemple de multiplication avec une matrice
carrée d'ordre 4. Le principe ne change absolument pas, nous allons voir cet
exemple étape par étape pour bien comprendre. Commençons :
Exercice 2 :
Exercice 3 :
Solutions
Exercice 1 :
Exercice 2 :
La multiplication est impossible, la matrice possède 3 colonnes alors que le vecteur
possède 4 coordonnées.
Exercice 3 :
Les deux matrices ont la même taille, on peut donc les multiplier.
Prenons un autre exemple :
Ici, les deux matrices n'ont pas la même taille nous ne pouvons pas les multiplier.
Il ne devrait y avoir rien de compliqué pour le moment.
Partie 2
Pour pouvoir multiplier deux matrices carrées, nous allons utiliser une petite
combine. Nous allons couper la deuxième matrice en 3 vecteurs (ou 4 selon la
taille), puis nous appliquerons la multiplication que nous avons vue à l'instant pour
chacun de ces vecteurs. Prenons deux matrices cobayes :
Attention, l'ordre des matrices est important ! M1 x M2 ne sera pas forcément égal à
M2 x M1. Faites attention à l'ordre de votre multiplication !
Bien, coupons la seconde matrice en 3 vecteurs :
Au tour du deuxième :
Quand il y a un "0" dans une matrice ça nous facilite grandement le calcul . Bref,
on fait la même chose avec le dernier vecteur :
Nous obtenons au final 3 vecteurs fraichement calculés. Il nous suffit ensuite de les
assembler dans l'ordre de la division de la matrice !
Coupons la seconde matrice en 4 vecteurs (et oui car c'est une matrice carrée
d'ordre 4 et pas 3) :
Le troisième :
Exercice 2 :
Exercice 3 :
Solutions
Exercice 1 :
La multiplication est impossible, la première matrice possède 4 lignes et 4 colonnes
alors que la seconde matrice ne possède que 3 lignes et 3 colonnes.
Exercice 2 :
Exercice 3 :
Je vous avais dit que cette matrice était... particulière (pour vous dire, je ne la
connais pas par cœur moi-même). Grâce à elle, nous pouvons faire pivoter en
ensemble de points d'un angle thêta autour d'un axe défini par les coordonnées (x,
y, z). Nul besoin de retenir cette matrice, je le répète.
Et le revoilà après :
Vous voyez ce qui c'est passé ? Le triangle a pivoté de 90° grâce à une
transformation.
La rotation se fait selon le sens trigonométrique et non selon le sens horaire.
Illustrations
Je vais vous donner quelques exemples de transformations effectuées sur un
repère, ce sera plus simple à comprendre si vous voyez ce que donne chaque
transformation.
Le repère de base
Le repère de base est en fait un repère qui n'a pas encore été modifié, c'est sur
celui-ci que l'on effectuera notre première transformation. Graphiquement, on
représente un repère comme ceci :
La rotation
Le principe ne change pas pour la rotation, on effectue la transformation sur le
repère. Voici un exemple d'une rotation de 45° sur l'axe Z :
Pour la rotation, on multipliera la matrice modelview par la matrice de rotation
(toujours aussi effrayante ):
L'homothétie
En temps normal, avec une homothétie on modifie la taille d'une forme géométrique.
Sauf qu'ici on modifie la taille du repère, donc on modifie la taille de chaque unité de
longueur. Voici ce que donne une homothétie de coordonnées (2, 2) sur le repère :
Vous voyez que la taille du repère à changé, désormais si on fait une translation par
un vecteur(2, 1) alors la translation sera plus grande et le repère se retrouvera plus
loin.
Pour ce qui est de la matrice modelview, il suffira de la multiplier par la matrice
suivante :
Accumulation de transformations
Attention, de même que l'ordre des matrices dans la multiplication, l'ordre des
transformations a une importance capitale ! Si vous effectuez une translation puis
une rotation, vous n'obtiendrez pas la même chose que si vous faisiez une rotation
et une translation.
Comme d'habitude prenons un petit exemple. Dans un premier temps, je vais faire
une translation du repère par rapport au vecteur V(2, 1), puis une rotation de 90° sur
l'axe Z (l'axe Z est en fait pointé vers nous, c'est pour ça que nous ne le voyons pas)
:
Maintenant je vais l'inverse, une rotation de 90° puis une translation de vecteur (2,
1) :
Oh tiens ! Les repères ne sont pas les mêmes. Et oui, les repères sont différents car
l'ordre des transformations est important. Faites donc bien attention à ce que vous
voulez faire et à l'ordre dans lequel effectuer ces transformations.
Enfin ce chapitre est terminé, il nous aura fallu du temps mais n’oubliez pas que tout
ce que je vous enseigne est nécessaire pour comprendre et utiliser OpenGL.
Récapitulons ce que nous savons faire :
On sait afficher des vertices pour former des formes géométriques.
On sait utiliser les shaders pour leur donner un peu de couleurs (même si
l’on peut faire bien plus avec eux ).
On sait utiliser des matrices pour effectuer des transformations.
Bonne nouvelle ! Nous connaissons tout ce qui est nécessaire pour ajouter une
troisième dimension à nos programmes. Il est d'ailleurs temps mes amis, attaquons-
nous à cette nouvelle dimension qui s'offre à nous !
#
WOW!
We're happy to see that you're enjoying our courses (already 3 pages viewed
today)! You can keep checking out our courses by becoming a member of the
OpenClassrooms community. It's free!
You will also be able to keep track of your course progress, practice on exercises,
and chat with other members.
Register Login
Enroll in this course
How does it work?
1
day 2
days Basic enrollment 2
weeks 4
weeks 2
months
2 w e e ks
The author
Boouh
OpenClassrooms
Who we are
How our courses work
Jobs
Contact us
Professionals
Affiliation
Business
Universities and schools
Get involved
Create a course
CourseLab
Help us translate
Terms and conditions
Follow us
OpenClassrooms blog
o
o
o
o
o
o