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.0
f;
World.m[0
][2
]=
0.0
f;
World.m[0
][3
]=
0.0
f;
World.m[1
][0
]=
0.0
f;
World.m[1
][1
]=
sinf(Scale);
World.m[1
][2
]=
0.0
f;
World.m[1
][3
]=
0.0
f;
World.m[2
][0
]=
0.0
f;
World.m[2
][1
]=
0.0
f;
World.m[2
][2
]=
sinf(Scale);
World.m[2
][3
]=
0.0
f;
World.m[3
][0
]=
0.0
f;
World.m[3
][1
]=
0.0
f;
World.m[3
][2
]=
0.0
f;
World.m[3
][3
]=
1.0
f;
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.
IV. Sources▲
Vous pouvez télécharger les sources de ce projet en suivant ce lien :
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 |