Tutoriel 08 - Transformations

Mise à l'échelle

Ogldev

Traducteur

Sylvain DOREMUS

Nous allons ici étudier la dernière transformation de base : la mise à l'échelle (scaling).

Commentez

- Titre : Tutoriel 08 - Transformations

- Auteur : Ogldev

- Traducteur : Sylvain DOREMUS

- Parution : 26 juin 2014

- Public visé :

- Licence : Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright ® 2014 Etay Meiri. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

Sommaire

- Navigation

- II. Contexte

- III. Explication du code

- IV. Sources

- V. Remerciements

- Navigation

Navigation

Tutoriel précédent : les rotations

Sommaire

Tutoriel suivant : interpolation

II - Contexte

La transformation d'échelle est très simple. Son but est d'augmenter ou réduire la taille de l'objet. Par exemple, vous pouvez vouloir créer une différenciation entre plusieurs objets avec le même modèle (des arbres de taille différente) ou faire correspondre la taille d'un objet avec celle du monde.

Pour les exemples ci-dessus, vous voudrez certainement mettre à l'échelle les positions des sommets pour les trois axes uniformément.

Cependant dans d'autres cas vous voudrez peut-être mettre à l'échelle seulement un ou deux axes, rendant le modèle plus gros ou plus mince.

Le développement de la matrice de transformation est très animé…

Rappelons-nous qu'avec la matrice identité, la raison pour laquelle la multiplication d'un vecteur le laisse inchangé est que chacun des 1 de la diagonale est multiplié par la composante correspondante du vecteur.

Aucune composante ne peut en affecter une autre. Ainsi, remplacer n'importe lequel de ces 1 par une autre valeur impliquera une augmentation sur cet axe, si la valeur est supérieure à 1 ou une diminution sur cet axe sinon.

III - Explication du code

World.m[0][0]=sinf(Scale);
World.m[0][1]=0.0f;
World.m[0][2]=0.0f;
World.m[0][3]=0.0f;
World.m[1][0]=0.0f;
World.m[1][1]=sinf(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]=sinf(Scale);
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;

Le seul changement depuis le tutoriel précédent est que nous remplaçons la matrice monde en concordance avec l'explication ci-dessus.

Comme vous pouvez le voir, nous effectuons la mise à l'échelle sur les trois axes avec une valeur oscillant entre -1 et 1.

Dans l'ensemble de valeurs [0, 1] la taille du triangle est entre « toute petite » et « taille originale », et quand la diagonale vaut zéro il disparaît entièrement.

Entre les bornes [-1, 0], c'est le résultat inverse, car la valeur d'échelle dans la diagonale a changé le signe de la position.

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 à jacques_jean pour sa relecture.

Navigation

Tutoriel précédent : les rotations

Sommaire

Tutoriel suivant : interpolation