Tutoriel 8 - Transformations d'échelle

Par OGLdev, traduit par DragonJoker

Récupérer les sources



Introduction

Troisième et dernière transformation: la mise à l'échelle.

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érence 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 de la uniformément sur les trois axes.

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

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

Avec la matrice identité, rappelons nous que 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 affecter une autre. Ainsi, remplacer n'importe quel de ces 1 par unee autre valeur impliquera une augmentation sur cet axe si la valeur est supérieure à 1 ou une diminution sur cet axe sinon.

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 précédente.

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

Dasn l'ensemble de valeurs [0, 1] le triangle est entre tout petit et sa taille originale et quand la diagonale vaut zéro il disparaît entièrement.

Entre les bornes [-1, 0], c'est la même chose sauf qu'il est inversé car la valeur d'échelle dans la diagonale a changé le signe de la position.

Remerciements

Merci à Etay Meiri de me permettre de traduire ses tutoriels.

Résultat :
resultat

Article d'origine