Bonjour,
J'ai déjà utilisé OpenGL plusieurs fois, mais là j'avoue sécher sur un problème de géométrie. La fatigue, perte de neuronnes, etc je sais pas. J'en appele donc à vos compétences.
En gros je veux dessiner une surface 3D et être capable de la déplacer. Jusque là aucun problème.
Je veux pouvoir:
1. La faire tourner autour de (x;-y) (en vecteur). Donc je fais un
glRotatef(angle1, 1.0,-1.0,0.0);
Ce qui fonctionne seul.
2. La faire tourner autour des z. Je fais:
glRotatef(angle2, 0.0,0.0,1.0);
Ca fonctionne aussi seul.
Sauf que je voudrais combiner les deux, et là arrive mon problème. Le premier glRotetef va bien effecuter la rotation, mais il va aussi faire une rotation du repère. Ce qui fait que la seconde rotation se fait sur le repère modifié par le premier glRotate, hors je voudrais que ce soit fait par le repère de base.
(Je ne suis pas sur d'être clair).
Mon code en gros:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
void display(void)
{
...
glPushMatrix();
glTranslatef(centreX, centreY, 0.0); /*place mon repère au centre de l'objet*/
glRotatef(angle1, 1.0,-1.0,0.0);
glRotatef(angle2, 0.0,0.0,1.0);
glTranslatef(-centreX, -centreY, 0.0); /*Je replace mon repère*/
glPushMatrix();
drawmyobject();
glPopMatrix();
glPopMatrix();
...
} |
Voilà en gros le truc. J'ai tenté avec des glLoadIdentity(), mais ça annule la précédante rotation, etc. Donc là franchement je ne vois pas.
Si vous avez une solution, merci. Je suis sur que c'est tout bète en plus.
Partager