Bonjour,
J'essaye de réaliser un jeu dans le genre de kula-world en utilisant OpenGL dans lequel j'ai besoin de faire rouler une sphere selon 3 axes qui restent fixes dans l'espace (au depart : x=gauche-droite / y=avant-arriere / z=haut-bas).
Le problème que je rencontre est qu'avec la fonction glRotatef, le repère tourne : après une rotation selon X, les axes Y et Z n'ont plus la même orientation.
Je cherche un moyen de faire une rotation selon X, suivi d'une rotation selon l'axe Y (tel qu'il etait avant la rotation sur X) puis selon l'axe Z (tel qu'il était avant les rotations sur X et Y). (cela donne l'impression que l'on pousse la balle pour la faire avancer en roulant sur les différents axes)
Après moult recherches et essais, voici la technique que je pense mettre en place :
- Je définis 3 vecteurs axeX=(1,0,0) axeY=(0,1,0) et axeZ=(0,0,1)
- Je fais une rotation du repere selon axeX (avec un angle x)
- Je calcule les nouvelles coordonnées des vecteur axeY et axeZ dans ce nouveau repere afin qu'ils aient toujours "visuellement" la meme orientation qu'au départ.
- Je realise la rotation selon axeY (qui ne correspond plus au a l'axe Y du repere opengl.)
- Je calcule les nouvelles coordonnées des vecteurs axeX et axeZ pour qu'ils aient l'air de rester fixes
- Je réalise finalement la rotation selon axeZ (qui ne correspond plus du tout a l'axe Z de depart puisque ce dernier a subi 2 rotations).
- J'affiche ma gluSphere.
- Et ainsi de suite...
Pour vous donnez une idée j'ai 2 vidéos :
La première illustre le problème d'axe : dès que la sphere n'a pas fait un tour complet sur un axe avant de rouler sur un autre axe, la balle roule selon un axe faux. (puisque dans cette vidéo, j'utilise les axes du repere opengl qui subissent les rotations) http://www.youtube.com/watch?v=AdQnh7q_w7o
La deuxième vidéo donne une idée du développement actuel : avec des rotations de la balle cela serait mieux... http://www.youtube.com/watch?v=XAKLWJFElgw
Avant de partir sur une n-ième fausse piste, j'aimerais avoir votre avis sur la question. Ma méthode peut-elle fonctionner ? Y-a-t-il plus simple pour garder des axes fixes lors d'une rotation ?
Merci.
Jean-Michel.
Partager