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 :

[OpenGL] problème de rotation 3D


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut [OpenGL] problème de rotation 3D
    Bonjour. Voila, j'ai un problème qui peut paraitre bénin et pourtant je m'embourbe totalement dans les problèmes, je sollicite donc votre aide précieuse .

    Je travaille donc en 3D en OpenGL, je posséde une display liste qui grosso modo créé une pointe de fleche. Cette fleche est créé pointe sur l'origine et le reste en bas, la fleche pointe donc sur l'axe Y vers le haut.

    Maintenant dans ma fonction qui dessine j'ai deux points (que je nommerai pour ici p1 et p2) qui a eux deux forme une direction. Je voudrais maintenant afficher la display list avec la pointe pointant sur p1 et suivant la direction du vecteur créé par (p1,p2).

    Seulement voila comment faire ? j'ai essayé avec des projetés pour calculer les angles un a un mais cela ne fonctionne pas. J'ai lu alors qu'il y avait des formules pour créé des matrices de transformations, je crois qu'elles utilisent les angles d'Euler. Seulement si jai bien compris on a besoin de l'angle de rotation total, et moi je ne l'ai pas ! J'ai juste une direction ...

    Je suis donc perdu n'arrivant pas a faire suivre a une fleche une simple direction ... j'ai essayé d'utiliser la fonction gluLookAt ainsi :

    void gluLookAt( p1.x , p1.y , p1.z , p2/x , p2.y , p2.z , 0.0 , 1.0 , 0.0)

    pour replacer la scene au point et dans la bonne direction, ce qui devrait fonctionner non ? et bien pourtant non ...

    N'existe t'il pas une fonction qui sache faire les rotations 3D ? Ou quelqu'un pourrait il tout simplement m'aiguiller gentillement .

    Merci pour toute aide, et si j'ai mal expliqué n'hésitez pas a demander plus d'information .

    ReiVon

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    regarde du coté deq quaternion qui permettent d'effectuer des rotation en fonction d'un vecteur, sinon avec des glTranslate et des glRotate tu doit pouvoir t'en tirer pour effectuer des transformations de bases...
    * 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

  3. #3
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Salut,


    Comme tu as deux points, tu obtients une direction que tu peux stocker dans un vecteur (dir1). Avec un seul vecteur tu ne peux pas définir une base donc il faut en rajouter deux autres pour avoir une base. Pour trouver un deuxième vecteur "qui fonctionne", il faut que celui-ci et dir1 ne soient pas collinéaires (et de même pour le troisième). Par exemple tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    c tel que (dir1.c <> 0)   (c qui vaut x, y ou z)
    temp.c = dir1.~c          (~c : coordonnée différente de c)
    temp.~c = -dir1.c
    temp.a = dir1.a           (a : coordonnée restante)
    dir2 = dir1^temp          (^ : produit vectoriel)
    dir3 = dir1^dir2
    Tu obtients donc trois vecteurs qui te permettent de définir une base. Il est préférable de les normaliser. En les insérant dans une matrice tu as la matrice de transition de la base de la flêche dans la nouvelle base (de la direction).
    Pour ce qui est de la construction de la matrice, je ne sais plus dans quel sens il faut le faire avec openGL, mais ça donnerait à peu près : première colonne : dir3, deuxième : dir1, troisième : dir2 (Si ce n'est pas dans ce sens, remplace colonne par ligne ; j'imagine aussi que quelqu'un pourra me corriger ...).

    J'ai testé (mais pas avec openGL) vite fait et ça à l'air de fonctionner.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    44
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 44
    Points : 24
    Points
    24
    Par défaut
    merci pour vos réponses. J'ai regarder du coté des quaternons mais apparemment il me manque également des données pour effectuer la rotation.

    Sinon je vais essayer ta solution pascal_damien, le problème est effectivement que je nai qu'un seul vecteur. Je vous tient au courant .

Discussions similaires

  1. Réponses: 10
    Dernier message: 08/06/2009, 11h30
  2. [OpenGl] Problème rotation d'un rectangle
    Par dib258 dans le forum SDL
    Réponses: 2
    Dernier message: 20/12/2006, 17h02
  3. [OpenGL] Problème d'éclairage
    Par Dev48 dans le forum OpenGL
    Réponses: 4
    Dernier message: 24/02/2005, 09h32
  4. [OpenGL] Problème de Vitesse d'éxécution
    Par stick059 dans le forum OpenGL
    Réponses: 9
    Dernier message: 19/11/2004, 13h57
  5. Problème de rotation
    Par Francky033 dans le forum DirectX
    Réponses: 1
    Dernier message: 17/07/2003, 16h38

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