Navigation

Tutoriel précédent : les translations   Sommaire   Tutoriel suivant : les mises à l'échelle

II. Premier chapitre

La prochaine transformation dans notre liste est la rotation, c'est-à-dire que pour un angle et un point donnés, nous voulons tourner le point autour d'un axe. Nous changerons toujours deux des trois coordonnées et laisserons la troisième inchangée. Cela signifie que la transformation se fera sur un des trois plans majeurs : XY (quand on tourne autour de l'axe Z), YZ (quand on tourne autour de l'axe X), XZ (quand on tourne autour de l'axe Y).

Il y a des transformations de rotation plus complexes qui permettent la rotation autour d'un vecteur arbitraire mais nous n'en avons pas encore besoin à cette étape.

Définissons le problème en termes généraux.

Considérons le diagramme suivant :

Image non disponible

Nous voulons nous déplacer sur le cercle du point (x1, y1) au point (x2, y2). Autrement dit, nous voulons tourner le point (x1, y1) selon l'angle α2.

Supposons que le rayon de ce cercle soit 1, ça signifie donc ceci :

 
Sélectionnez
x1=cos(α1)
y1=sin(α1)
x2=cos(α1+α2)
y2=sin(α1+α2)

Nous allons utiliser les relations trigonométriques suivantes pour développer x2 et y2 :

 
Sélectionnez
cos(α+b) = cosα.cosβ - sinα.sinβ
sin(α+b) = sinα.cosβ + cosα.sinβ

Nous pouvons alors écrire :

 
Sélectionnez
x2=cos(α1+α2) = cosα1.cosα2 - sinα1.sinα2 = x1.cosα2 - y1.sinα2
y2=sin(α1+α2) = sinα1.cosα2 + cosα1.sinα2 = y1.cosα2 + x1.sinα2

Dans le diagramme ci-dessus, nous regardons le plan XY et Z pointe dans la page. Si X et Y font partie d'un vecteur 4D alors l'équation ci-dessus peut être écrite sous forme matricielle (sans affecter Z ni W) :

Image non disponible

Si nous voulons créer des rotations autour des axes X et Y alors les équations sont globalement les mêmes, mais la matrice est organisée de façon un peu différente. Voici la matrice de rotation autour de l'axe Y :

Image non disponible

Et la matrice de rotation autour de l'axe X :

Image non disponible

III. Explication du code

Les changements de code dans ce tutoriel sont mineurs. Nous changeons uniquement le contenu de la matrice de transformation dans le code C/C++.

 
Sélectionnez
World.m[0][0]=cosf(Scale);
World.m[0][1]=-sinf(Scale);
World.m[0][2]=0.0f;
World.m[0][3]=0.0f;
World.m[1][0]=sinf(Scale);
World.m[1][1]=cosf(Scale);
World.m[1][2]=0.0f;
World.m[1][3]=0.0f;
World.m[2][0]=0.0f;
World.m[2][1]=0.0f;
World.m[2][2]=1.0f;
World.m[2][3]=0.0f;
World.m[3][0]=0.0f;
World.m[3][1]=0.0f;
World.m[3][2]=0.0f;
World.m[3][3]=1.0f;

Comme vous pouvez le voir, nous tournons autour de l'axe Z. Vous pouvez essayer les autres rotations, mais je pense qu'à ce stade, sans une vraie projection de la 3D vers la 2D, les autres rotations vont sembler étranges.

Nous les réaliserons dans une classe de pipeline complet de transformation dans les tutoriels à venir.

Image non disponible
Résultat

IV. Sources

Vous pouvez télécharger les sources de ce projet en suivant ce lien :

Récupérer les sources

V. Remerciements

Merci à Etay Meiri de nous permettre de traduire son tutoriel.

Merci à LittleWhite pour ses corrections et à ced pour sa relecture.

Navigation

Tutoriel précédent : les translations   Sommaire   Tutoriel suivant : les mises à l'échelle