J'explique mon problème: j'ai créé une application de simulation de systèmes planétaires. Bon, tout marche bien de ce coté la, avec pour le moment, une vue (avec gluLookAt) qui est assez globale, centrée sur une planète au choix et qui peut bouger autour
Seulement, j'aimerai avoir un mode de vue 'comme si on était sur une planète', c'est à dire qui serait comme collée à la surface d'une planète en tenant compte de la rotation propre de la planète.
Mettons que le vecteur rotation de la planète s'appelle, la position du centre de la caméra serait l'origine du repère après ces transforamtions (si par exemple on est à l'equateur) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part rotation
Croyant ruser, j'ai placé dans mon code ces trasnformations puis un
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 glTranslatef(xplanete,yplanete,zplanete); glRotatef(temps,xrotation,yrotation,zrotation); glTranslatef(rayonplanete,0,0);
Qui aurait donné une caméra placée dans le prolongement d'un rayon de la planète.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 gluLookAt(0,0,0 , zoom,0,0 , xrotation,yrotation,zrotation)
Seulement, les coordonnées passés à gluLookAt semblent être absolues !
Vu que je n'ai aucune envie d'exprimer les coordonnées du centre de la caméra de manière analytique dans le repère absolu (projeter l'axe de rotation sur les 3 axes puis écrire tous les cosinus, sinus), j'aimerai savoir si on pouvait récupérer la matrice de transformation qu'OpenGL utilise et puis la multiplier par un vecteur (0,0,0) pour l'origine de la caméra et puis par (zoom,0,0) pour avoir l'endroit où elle 'lookat'
(peut-être c'est la transposée qu'il faudrait utiliser, mais c'est du détail..)
Partager