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 :

Quelques questions..


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 91
    Par défaut Quelques questions..
    Bonjour,
    J'ai commencé à travailler sur opengl et la librairie glfw (sous Delphi). Je voudrait faire tourner un cube sur lui même lorsqu'il se déplace mais la fonction glRotate le fait toujours tourner par rapport à l'origine 0,0,0..
    Comment dois-je faire pour deplacer l'origine de la rotation ?

    Une autre question : opengl affiche les textures dans l'ordre donné mais je voudrais quelles s'affichent dans l'ordre de POSITION. Imaginons j'ai dessiné en premier la face arrière de mon cube et en dernier celle d'avant : Si je regarde mon cube de face il sera "normal" mais si je le fait tourner je vois les textures qui s'imbriquent, c'est normal ???

    Merci d'avance et joyeuses fêtes !

  2. #2
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    SAlut,
    pour les transformation (rotation, translation,scale) l'ordre est important, un rotation suivi d'une translation n'aura pas le meme effet qu'une transaltion puis une rotation, verrifie l'ordre des transformation. tu peu aussi jeter un coup d'oeuil à gPushMatrix et gl PopMatrix.

    pour ton probleme de texture detaille un peu plus ce que tu fait et ce ke tu obtien

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 91
    Par défaut
    Comment j'utilise glPushmatrive, popMatrice?

    voila mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
          glTranslatef(0, 0, 0);
          glRotatef( X , 0, 1, 0 );
     
          glBindTexture(GL_TEXTURE_2D, texture2);
          glEnable(GL_TEXTURE_2D);
          cube(0,0,0,3);
          glDisable(GL_TEXTURE_2D);
    Mon cube tournera toujours par rapport à Y en 0,0 même si je met Rotate avant Translate.


    Pour les textures je fais : loadTexture, glBind, gl enable et Avant chaque coordonnée du cube je met : glTexCoord2f();

    Le probleme est que ces textures s'affichent dans l'ordre avec lequel elles ont été dessinée. Cad si je dessine un cubeX avant un cubeY (dans le temps) et que je deplace le cubeY derrière le cubeX (dans l'espace) je verrai toujours le cube Y devant le X. En fait il affiche dans l'ordre de la creation et non de l'espace.

    Je sais, j'explique mal XD

  4. #4
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    essaye ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     glTranslatef(0, 0, 0);
    glPushMatrix()  // sauvegarde la matrice de transformation actuelle 
    glRotatef( X , 0, 1, 0 );
    ...
    cube(0,0,0,3);
     
    ...
     
    glPopMatrix()   // restaure la matrice de transformation
    Le Pushmatrix() marche comme si tu faisait un changement de repere et que tu te retrouve en 0, la ta rotation s'effectue par raport au centre , puis un PopMatrix() "te ramene" dans ton repere avant la rotation
    (j c pas si l'explication est claire, mais bon, ça fait un petit moment que j''ai pas fait d'openGl )

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 91
    Par défaut
    C'est bon merci, j'ai reussi pour le cube, par contre pour les texturesje comprend toujours pas

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 91
    Par défaut
    En fait g pas utiliser glPush et Pop pcq j'y arrive pas mais j'ai fe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glTranslate(X,Y,Z) // position du centre du cube
    glRotate(X,0,1,0)
    glTranslate(-X,-Y,-Z) //je remet la position comme avant la rotation
     
    //je dessine le cube ici.

  7. #7
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    detaille ce ke tu fait pour tes textures, comment tu les plaques( coordonnées de textures).

  8. #8
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    Citation Envoyé par Dr@ke
    En fait g pas utiliser glPush et Pop pcq j'y arrive pas mais j'ai fe :

    glTranslate(X,Y,Z) // position du centre du cube
    glRotate(X,0,1,0)
    glTranslate(-X,-Y,-Z) //je remet la position comme avant la rotation

    //je dessine le cube ici.
    j'opterai pour une solution qui à mon avis est plus propre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glPushMatrix(); // te ramene à l'origine
     
    // dessin du cube
     
    glPopMatrix(); // restaure l'origine precedant le PushMatrix()

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 91
    Par défaut
    Pour les textures voila un exemple :

    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
          //en dehors de la boucle
          LoadTexture('texture.bmp', ciel, FALSE);
     
          //dans la boucle : dessin d'un carre 
          glBindTexture(GL_TEXTURE_2D, Ciel);
          glEnable(GL_TEXTURE_2D);
     
          glBegin ( GL_QUADS );
            glTexCoord2f( 0, 0);
            glVertex3f (largeur, 25, - profondeur);
            glTexCoord2f( 1, 0);
            glVertex3f (largeur, 25, profondeur);
            glTexCoord2f( 1, 1);
            glVertex3f (-largeur, 25, profondeur);
            glTexCoord2f( 0, 1);
            glVertex3f (-largeur, 25, - profondeur);
          glEnd;
     
          glDisable(GL_TEXTURE_2D);

    [Balises CODE rajoutées par Loulou24, merci d'y penser à l'avenir]

  10. #10
    Membre éprouvé Avatar de Blowih
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 122
    Par défaut
    ton plaquage de textures a l'air bon, tu peu m'envoyer ton exe ( par msn ,adresse ds mon profil) pour que je puisse voir ce que ça donne

  11. #11
    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
    alors pour les matrice, un tres bon cours pour debutant qui aide a bien tout comprendre : sur http://www.javamus.fr.st/

    pour le probleme des texture, il faut juste activer le Zbuffer avec un petit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    glEnable(GL_DEPTH_TEST);
    glDepthFunc(GL_LESS); // ou GL_LEQUAL util pour certains effets (lightmaps par exemple)
    a l'initialisation d'openGL et voila ca marche...

    en fait le principe du Zbuffer, c'est que pour chaque pixel affiché à l'ecran, openGL stock dans le Zbuffer la profondeur de ce pixel, et si apres tu essaye d'afficher un nouveau pixel a cet endroit, openGL regarde la profondeur du pixel precedent, et si le nouveau pixel et plus proche, alors il l'affiche, sinon il n'est pas affiché. ainsi tu est sur que seul les pixels les plus prochent de la camera sont affiché...

    Par contre ca peut poser des probleme si tu veut faire de la transparence, la tu sera obligé d'afficher toutes les faces transparentes de la plus lointaine vers la plus proche...
    * 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

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 91
    Par défaut
    Merci pour ces reponses et le site bafman. En effet je n'avais pas activé de Zbuffer, j'ai testé et la...catastrophe, l'ecran est devenu tout noir et ya des bouts de pixels qui apparaissent de temps en temps si je bouge ds le decor.

    Que ce que ca peut-etre ???

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu dois oublier d'effacer ton Z-Buffer à chaque frame.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

  14. #14
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 91
    Par défaut
    Merci Loulouuuuuuu, ca marche Je m'en rapelerai de cette fonction ^^ elle m'a bien souler. Merci à tous !

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

Discussions similaires

  1. Quelques question sur Win 32 Appli
    Par lvdnono dans le forum Windows
    Réponses: 5
    Dernier message: 15/06/2004, 12h37
  2. [Débutant]Quelques questions de principe sur l'API win32
    Par silver_dragoon dans le forum Windows
    Réponses: 4
    Dernier message: 19/03/2004, 18h38
  3. [install]Install sous windows... quelques questions
    Par omega dans le forum Eclipse Java
    Réponses: 5
    Dernier message: 26/02/2004, 09h50
  4. [MFC] Quelques questions de débutant...
    Par Sephi dans le forum MFC
    Réponses: 4
    Dernier message: 20/02/2004, 17h25
  5. Quelques questions sur le TWebBrowser...
    Par CorO dans le forum Web & réseau
    Réponses: 3
    Dernier message: 17/01/2003, 21h23

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