bon on va reprendre les bases...
en openGL tu a une matrice : MODELVIEW qui contient l'ensemble des informations de positionnement dans l'espace (pour info : openGL utilise une seule matrice alors que direct3D en utilise 2 : la matrice MODEL qui contient les info du modele n cours de dessin et la matrice VIEW qui contient les info de la camera, et lors du rendu, les 2 matrice sont multipliée pour donner l'equivalent de la matrice MODELVIEW d'openGL)
mais qu'est cu que ces matrice contiennent ? simplement la position et l'orientation du monde sous cette forme
[X1,Y1,Z1,0]
[X2,Y2,Z2,0]
[X3,Y3,Z3,0]
[pX,pY,pZ,1]
ou {X1,X2,X3} representent le vecteur X de la base dans l'espace, par defaut il vaut {1,0,0}
{Y1,Y2,Y3} represente le vecteur Y de la base dans l'espace, par defaut il vaut {0,1,0}
{Z1,Z2,Z3} represente le vecteur Z de la base dans l'espace, par defaut il vaut {0,0,1}
et {pX,pY,Pz} represente la position de la camera dans l'espace.
on peut remarquer la 4eme colonne qui ne sert a rien (en tout cas pour un debutant

par la suite on peut l'utiliser pour faire des truc amusant) mais qui est necessaire pour avoir une matrice homogene (avec le même nombre de colonne et de matrice) afin de faciliter les calcules.
une fois qu'on a cette matrice MODELVIEW, chaque vertex envoyé a la carte est multiplié par la matrice pour obtenire sa position relativement à la camera, donc en fait quand tu pense deplacer un vertex avec un glTranslate() tu ne fait que modifier la matrice, et donc tout vertex envoyé par la suit passera par la matrice modifiée... d'ou l'utilitée de pouvoir sauvegarder et restaurer les matrices, car les calcules de matrices sont couteux et sans glPush/pop, on serait obligé d'effectuer les translation à l'inverse pour restaurer la matrice dans sont etat precedent (sans parler de certains calcules complexes a base de quaternions et autre qui ne sont pas trivialement inversables

)
Partager