2010-05-19 4 views

Répondre

1

Vous pouvez le faire en inversant l'axe y de la matrice de projection. Donc:

glMatrixMode(GL_PROJECTION); 
glPushMatrix(); 
glLoadMatrix([1 0 0 0; 
       0 -1 0 0; 
       0 0 1 0; 
       0 0 0 1]); 
      //^pseudo-code, replace with actual matrix 

Cela devrait le faire.

Vous pouvez également utiliser un glMultMatrix appel avec la même matrice (au lieu de Push puis Load), mais cette manière est plus facilement inversée (il suffit d'appeler glPopMatrix sur la pile GL_PROJECTION plus tard).

Vous pouvez également utiliser la même technique pour retourner l'un des autres axes; Il suffit de mettre des signes moins dans les endroits appropriés.

+0

GlLoadMastrix ne détruirait-il pas la projection précédemment définie? Il remplace complètement la matrice de projection, ce qui n'est pas ce qui est demandé. – ypnos

+0

C'est pour cela que l'appel de 'glPushMatrix' est pour, il pousse la matrice existante vers le bas sur la pile, en préservant la transformation existante. La nouvelle matrice se compose avec la précédente, elle ne la remplace pas. – tzaman

+0

Comme je l'ai appris, et comme tous les manuels sur Internet, j'ai trouvé, LoadMatrix remplace toujours la matrice sur la pile, et ne se compose jamais. Le PushMatrix est seulement utile pour restaurer la matrice originale (et abandonner celui chargé) avec PopMatrix après. – ypnos

2

Je dirais que le fonctionnement direct sur la matrice de projection est un moyen propre pour cette opération. Mais si par hasard vous avez besoin d'une alternative:

Vous pouvez simplement utiliser glScalef(1.f, -1.f, 1.f) pour retourner l'axe.

Il s'agit également d'une opération sur la matrice GL_MODELVIEW ou GL_PROJECTION (tout ce qui est actuellement actif).

Questions connexes