IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenGL Discussion :

Rotation d'une sphère avec axes fixes


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut Rotation d'une sphère avec axes fixes
    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.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut
    Si vous me le permettez, je tente une seconde formulation sûrement plus compréhensible :

    Comment appliquer à une sphère 3 rotations successives sur chacun des 3 axes globaux à la scène et non sur les 3 axes locaux de la sphère ?

    (et si vous ne me le permettez pas... ben tant pis, c'est fait )

  3. #3
    Membre émérite Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Par défaut
    Malheureusement je penses que c'est à toi de voir de quelle façon évolue le repère local, pour appliquer la bonne rotation.

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    je dirait (au pif) qu'il faut transformer ta matrice de rotation globale dans la matrice de rotation inversé de la balle (mais en même temps, c'est le matin et je suis pas trop réveillé
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre éprouvé Avatar de razmott
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    133
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 133
    Par défaut
    Salut !

    La solution est surement les quaternions. Tu trouveras des exemples de la FAQ de développez.com :

    http://jeux.developpez.com/faq/matqu...ge=quaternions

    Bon coding !

    @+

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 10
    Par défaut
    Merci, le problème reste le même avec les quaternions, le repere est celui de la sphere (il subit les rotations en meme temps que la sphere).

    Je crois avoir trouvé une piste et je crois que ça correspond à ce que veut dire bafman (je me suis mis très récemment à la programmation 3D (et la géométrie dans l'espace) donc j'ai un peu de mal à me faire comprendre et à comprendre)

    - je récupère la matrice modelview apres avoir fait tourner la balle
    - j'applique l'inverse de cette matrice à 3 vecteurs correspondant aux trois axes qui ne doivent pas tourner
    - la prochaine rotation aura lieu selon les axes précedemment obtenus

    en théorie ca me parait pas mal, j'attends quand même de voir le résultat avant de mettre "résolu"

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour faire la rotation d'une image(Avec ImageJ)
    Par tadjara dans le forum Débuter avec Java
    Réponses: 0
    Dernier message: 10/04/2010, 11h33
  2. [GD] rotation d'une image avec GD
    Par DiverSIG dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 09/09/2009, 09h23
  3. [Débutant] afficher une image avec axes
    Par Nideis dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 20/02/2009, 16h33
  4. Dessiner une sphère avec un vertex shader
    Par zeyous dans le forum OpenGL
    Réponses: 10
    Dernier message: 18/03/2008, 11h34
  5. Réponses: 2
    Dernier message: 19/11/2007, 16h53

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo