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 :

Rotations en OpenGL


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 17
    Par défaut Rotations en OpenGL
    Bonsoir,

    Je suis en train de développer un petit programme utilisant OpenGL interfacé avec Qt.
    Cependant, je n'arrive pas à implémenter correctement la rotation de l'objet sur mes deux axes.
    J'ai up une vidéo qui montrera certainement mieux mon soucis :


    Voici le contenu de ma fonction paintGL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    glMatrixMode(GL_MODELVIEW);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();
    glTranslated(0,0,-6);
    glRotated(angleValueY,1,0,0);
    glRotated(angleValueX,0,1,0);
    // Dessin de mon objet...
    J'effectue une translation afin de centrer mon objet.
    Une rotation autour de mon axe des Y, puis autour de l'axe des X.

    Je ne vois pas vraiment comment résoudre ce problème.
    J'attends vos réponses, merci d'avance.
    kelepoc.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 131
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    C'est un problème plutôt classique qui connait solution
    En fait, cela dépend de l'ordre des rotations ...

    Sauf que changer l'ordre de rotation, ne fait que déporter le problèmes.

    Je crois que vous devriez regarder: http://jeux.developpez.com/faq/math/?page=quaternions pour trouver solution.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 219
    Par défaut
    Bonsoir

    Les fonction du types glRotated, glTranslated ne sont pas les plus conseillez aujourd'hui ... Le mieu est d'utilisé un vertex shader avec la matrice de projection et la matrice du repère de la pieces dans l'espace en uniform :
    (difficile de faire un rendu sans shaders dès que l'on veut de beau graphisme )

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
     
    #version 330
     
    // EXEMPLE
    uniform mat4 ProjMatrix ;
    uniform mat4 ModelMatrix ;
     
    in vec4 InVertex ;
    in vec3 InNormal ;
     
    out vec3 Normal ;
     
     
    void main ()
    {
    gl_Position = ProjMatrix * (ModelMatrix * InVertex);
    Normal = (ModelMatrix * vec4 (InNormal, 0.0)).xyz ;
    }
     
    // Shader codé (non testé) en opengl 3.3 mais il est possible de faire pareil avec des versions antérieur.
    Et donc ensuite, il ne vous reste plus qu'a généré la matrice de la caméra, et les matrices correspondante pour chaque objets de votre scène 3D juste avant chaque rendu. L'avantage est que vous avez un contrôle complet sur les transformation quelle effectueront, et en plus : c'est plus rapide !

    Pour encore plus de perfomance, il vous est possible de calcul la matrice ProjMatrix * ModelMatrix par le CPU et ainsi n'avoir plus qu'une multiplication matriciel sur les vertex.

  4. #4
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    27 131
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 131
    Billets dans le blog
    150
    Par défaut
    Je suis d'accord avec LastSpear, maintenant le glRotated() c'est dépassé.
    Sauf qu'il est bien beau de faire des shaders en OpenGL 3.3 mais si on ne sait pas reconstituer la matrice pour effectuer une rotation, ce n'est pas vraiment un pas en avant.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    219
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 219
    Par défaut
    Effectivement ! Ceci dit, les matrices ne sont pas inaccessible non plus. Si on dev en 3D, c'est que généralement le developer possède une bonne intuition de l'espace donc les matrices passe comme une lettre à la boite. Or il existe des apis mathématique ou même des bouts de code sur le net très efficace et facile à utilisé. Un petit tableau de 16 float, quelque fonctions par ci par là et le tour tes joué.

    Cependant, de mon expérience, il est préférable de codé sa matrice 4x4 avec une structure (voir class en C++), avec les 16 float nommé de la sorte : Matrix.m13 pour avoir accès à la première ligne, 3 ème colonne, sinon on est vite dépassé.

    Bon après ... si on veux les instructions SSE pour accéléré encore plus, il faut s'offrir un bonne journée de mal de crâne, et vous pouvez arriver à des performances au rendez vous !

    Or mi le fait d'être novice sur les matrices, cette technique n'as que des avantages, donc à préféré aux périls de quelque journées à comprendre l'utilisation de cet outil mathématique pour les plus courageux.

  6. #6
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Bonjour

    Pour rappel, vu que kelepoc utilise Qt, il existe des classes dans Qt pour manipuler les matrices et vecteurs : QMatrix4x4 et QVector4D.

Discussions similaires

  1. Rotations consécutives openGL
    Par CliffeCSTL dans le forum OpenGL
    Réponses: 2
    Dernier message: 15/09/2014, 12h10
  2. rotation Y OpenGL Monotouch
    Par snipon dans le forum Développement iOS
    Réponses: 0
    Dernier message: 05/03/2012, 08h02
  3. rotation autour d'un objet scene OpenGL
    Par hysah dans le forum OpenGL
    Réponses: 1
    Dernier message: 01/05/2006, 17h31
  4. [OpenGL] problème de rotation 3D
    Par ReiVon dans le forum OpenGL
    Réponses: 3
    Dernier message: 11/04/2005, 09h47

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