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 et les math !


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut OpenGL et les math !
    Bonjour à tous,

    J'ai passé ma soirée d'hier à essayer de comprendre les math sous sous-jacents à openGL. Je vous explique ce qui m'intrigue :

    Je vais appeler My la matrice de rotation sur Y d'un angle de pi/2 et Mz la matrice de rotation sur Z du même angle.

    Si je choisis un point P de coordonnées (1, 1, 0) et que je lui applique les 2 transformations (rotY puis rotZ) j'obtiens par les calculs (-1 0 1) = Mz*My*P. Graphiquement ça donnerait :



    Donc a priori on effectue les 2 rotations à la suite par rapport au repère d'origine, confirmez vous ?


    Si maintenant je crée un point en opengl en faisant :

    LoadIdentity
    glRotate(90, 0, 1, 0)
    glRotate(90, 0, 0, 1)
    glPoint(1, 1, 0)

    Alors j'obtiens un point de coordonnées (0, 1, 1) dans le repère d'origine. De ce que j'ai compris d'openGL ce qui est fait est :



    Mon problème est que je n'arrive pas à faire le lien entre les 2. D'un coté avec les matrices on tourne toujours par rapport au repère d'origine, et en openGL le repère change (comment ?). J'ai du mal à saisir la subtilité, s'il y en a une.


    Si vous pensez pouvoir m'expliquer le pti truc qui coince j'en serais ravis !

    Merci d'avance,

    Alex

  2. #2
    Membre averti

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Points : 422
    Points
    422
    Par défaut
    salut

    Citation Envoyé par AlexandreH Voir le message
    D'un coté avec les matrices on tourne toujours par rapport au repère d'origine
    non !

    ce que tu calcules avec
    LoadIdentity
    glRotate(90, 0, 1, 0)
    glRotate(90, 0, 0, 1)
    glPoint(1, 1, 0)

    c'est My * Mz * p = My * (Mz * p) = (My * Mz) * p

    le produit d'un vecteur par des matrices est associatif (et non commutatif)

    le plus simple à mon avis c'est de voir les choses comme ça:

    tu calcules My * (Mz * p) = p''

    c'est à dire que tu fais Mz * p = p' = (-1,1,0)
    puis My * p' = p'' = (0,1,1)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 8
    Points : 5
    Points
    5
    Par défaut
    Pourquoi est ce que l'on dit alors en math qu'appliquer une rotation en Y puis en Z à un point P s'écrit dans le sens P" = Mz*My * P ?

  4. #4
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    Ben oui, c'est bien ça...

    P' = Mz * My * P

    Mais il n'y a QU'UNE matrice 'object->world' (M)
    et quand tu fais:
    glIdentity => M := I
    glRotate(90, 0, 1, 0) => M := M * My = I * My = My
    glRotate(90, 0, 0, 1) => M := M * Mz = (My * Mz)


    Donc quand tu appeles
    glPoint
    c'est My * Mz * P que tu fais !

  5. #5
    Membre confirmé Avatar de TNT89
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Âge : 34

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 615
    Points
    615
    Par défaut
    Donc a priori on effectue les 2 rotations à la suite par rapport au repère d'origine, confirmez vous ?
    non, la seconde transformation se fait dans le repère obtenu après la première en toute logique mathématique (et si je ne me plante pas)...

Discussions similaires

  1. Réponses: 1
    Dernier message: 11/05/2007, 19h36
  2. Créer du Soft pour les Maths
    Par bnadem35 dans le forum C++
    Réponses: 7
    Dernier message: 01/03/2006, 23h36
  3. OpenGL et les cartes multi-écrans
    Par jcs2 dans le forum OpenGL
    Réponses: 1
    Dernier message: 14/02/2006, 14h08
  4. Recherche site sur les maths 1er S
    Par argon dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 02/01/2006, 20h19
  5. OpenGL et les ATI ?
    Par Twofy dans le forum OpenGL
    Réponses: 4
    Dernier message: 11/09/2002, 16h13

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