2010-12-05 20 views
0

Rotation autour de l'axe Z 45 degrés: glRotatef(45.0,0.0,0.0,1.0); Pour la rotation autour de l'axe Z de 45 degrés autour du point (10.0, -5.0,0.0), dois-je traduire?Rotation OpenGL autour de l'axe z

+0

pour la rotation autour d'un point, oui, vous auriez aussi besoin de traduire. C'est à vous de décider si vous voulez traduire, faire pivoter votre objet, puis revenir à la prochaine transformation, ou mettre les deux entre les appels glPushMatrix() et glPopMatrix() –

+0

push, gltranslatef, glrotatef, pop. Merci! – rotate

Répondre

1

Ce qui est important dans la fonction glRotatef(), c'est qu'elle ne peut tourner que vers l'origine. Donc, pour une rotation autour d'un point spécifique, il faut traduire ce point en origine, effectuer la rotation, et traduire en arrière. Donc, pour votre point (10, -5, 0) vous faire:

glPushMatrix(); // you do this to avoid disturbing the transformation matrices for any code following the below lines 

glTranslatef(-10, +5, 0); // translate so that (10, -5, 0) lies at the origin 
glRotatef(45, 0, 0, 1); // now rotate 
glTranslatef(10, -5, 0); // translate back 

// now you have rotated the scene by 45 degrees arround z-axis, at point (10, -5, 0) 

// (draw your object *here*) 

glPopMatrix(); // the old matrix is back 

// now it is as if nothing happened 

La matrice push/pop est souvent mal compris, c'est pourquoi j'exemplifié. Dans le nouveau OpenGL, il n'y a pas de pile de matrice implicite, il faut donc gérer ses matrices à la main. Cela devient un peu plus compliqué, mais en retour, il n'y a pas de confusion.