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 :

Probleme de texture et depth test..


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 20
    Points : 6
    Points
    6
    Par défaut Probleme de texture et depth test..
    Adiou tlm,

    Alors voila j'me suis lancé dans un projet de "Pong Revolutionnaire" en C++ et j'ai un ptit probleme de texture. J'ai a l'ecran une raquette et une balle. Lorsque j'affiche mon image de fond, ma raquette et ma balle deviennent noirs !

    Voici le code :
    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
    22
    23
    24
    AUX_RGBImageRec *texture1;
     
    bool chargerTex(void) 
    { 
        texture1 = auxDIBImageLoad("Font.bmp");
        glGenTextures (1, &texture[0]);
    }
     
     
    void afficheFond (void)
    { 
        glBindTexture (GL_TEXTURE_2D, texture[0]); 
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
        glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data); 
     
        glPushMatrix();
        glBegin(GL_QUADS); 
        glColor3f (0.2f, 1.0f, 0.2f); glTexCoord2i(1,0); glVertex3i(-1,-1,1);
        glColor3f (0.0f, 0.5f, 0.5f); glTexCoord2i(1,1); glVertex3i(-1,1,1);
        glColor3f (1.0f, 0.0f, 1.0f); glTexCoord2i(0,1); glVertex3i(1,1,1);
        glColor3f (1.0f, 1.0f, 0.0f); glTexCoord2i(0,0); glVertex3i(1,-1,1);
        glEnd();
        glPopMatrix(); 
    }

    Le rendu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    glClear(GL_DEPTH_BUFFER_BIT); glClear(GL_COLOR_BUFFER_BIT); 
                glDepthFunc(GL_LEQUAL);                 // Le type de profondeur à tester
                glEnable(GL_DEPTH_TEST);               //active le depth testing
     
     
                afficheFond();                                   //affiche limage de fond   
                raqBas.placer(0.3f, 0.2f);                  //raquette          
                raqBas.deplacerSouris();

    Une idée ? En plus quand je deplace mon plan vers le fond parfois j'ai carrement un ecran noir...je comprend rien.

    EDIT: j'arrive a voir ma raquette que lorsque je lui applique une texture...??

    Voila merci bcp !

  2. #2
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    comment initialises-tu ton affichage ?
    avec gluPerspective(...) j'imagine, tu pourrais nous montrer la ligne ?
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  3. #3
    Membre éclairé
    Avatar de Edouard Kaiser
    Profil pro
    Inscrit en
    Février 2004
    Messages
    521
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2004
    Messages : 521
    Points : 756
    Points
    756
    Par défaut
    Juste une petite remarque qui peut être n'a pas sa place mais je vois que dans ta fonction de rendu tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    glEnable(GL_DEPTH_TEST);               //active le depth testing
    Si tu ne le désactives nulle part dans ton code tu n'es pas obliger de le re activer à chaque rendu d'image.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par shenron666
    comment initialises-tu ton affichage ?
    avec gluPerspective(...) j'imagine, tu pourrais nous montrer la ligne ?
    Comment ça ? Non je ne fais rien de special, ou alors je ne vois aps de quoi tu veux parler. En tout cas je n'me sers pas de Glu..

    Ca sent la grosse boulette la ^^

  5. #5
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    Lorsque tu initialises ton affichage, tu dois définir la taille de ta fenêtre et cette information tu la transmet à OpenGL en utilisant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    glViewport(0, 0, width, height);
    Ensuite si tu veux faire de la projection 3D tu dois définir la matrice de projection, avec soit une fonction perso qui calcule la matrice à transmettre à OpenGL soit tu utilises les commandes suivantes (par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glMatrixMode(GL_PROJECTION); // Select The Projection Matrix
    glLoadIdentity(); // Reset The Projection Matrix
    // Calculate The Aspect Ratio Of The Window
    gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, zNear, zFar);
    et si le zNear ou le zFar dans gluPerspective sont trop faibles tu peux ne rien voir
    zNear déjà doit être supérieur à 0 (0.1f par exemple)
    zFar doit être supérieur à zNear, plus il est élevé plus il risque d'y avoir des erreurs d'arondi dans les tests de profondeur du zBuffer

    est-ce que cela t'éclaire un peu ?

    PS : source du code : Nehe Tutorial 01
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

  6. #6
    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
    et tu lui passe des coordonnée de texture a ta raquette ?
    si tu ne desactive pas le texturing et que tu ne passe pas de coordonnée de texture lors de l'affichage de la raquette, openGL utilisera la derniere coorodnnée de texture envoyée, c'est a dire probablement un des coins de la texture de fond dans ton cas, qui est tres probablement noir...

    ah un autre truc attroce... tu envoie l'ensemble des informations de la texture a la carte graphique a chaque frame alors que si tu fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    bool chargerTex(void) 
    { 
        texture1 = auxDIBImageLoad("Font.bmp"); 
        glGenTextures (1, &texture[0]); 
        glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR); 
        glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data); 
    } 
     
     
    void afficheFond (void) 
    { 
        glBindTexture (GL_TEXTURE_2D, texture[0]); 
        // affichage
    la texture est conservée en memoire graphique et ca va plus vite...
    * 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

  7. #7
    Futur Membre du Club
    Inscrit en
    Juillet 2004
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 20
    Points : 6
    Points
    6
    Par défaut
    Je me doutais bien que ces deux lignes netaient pas a leur place, seulement lorsque je les met dans ma fonction chargerTex, la tex de saffiche pas !

    si tu ne desactive pas le texturing
    Merci j'apprend qu'il faut le desactiver ensuite ^^

    Bon lla jpasse en coup de vent je regarderais au probleme plus en detail ce soir..
    thx

    PS: existe-il une traduction de red-book en français en ligne ?

Discussions similaires

  1. probleme de redirection apres un test
    Par kagura dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/04/2006, 19h00
  2. Problème de Texture !
    Par darkein dans le forum 2D
    Réponses: 5
    Dernier message: 21/01/2006, 23h42
  3. Problème font / depth test .
    Par Clad3 dans le forum OpenGL
    Réponses: 1
    Dernier message: 25/06/2005, 16h02
  4. Probleme de texture
    Par Dmnbp7ip dans le forum DirectX
    Réponses: 1
    Dernier message: 13/05/2005, 12h51
  5. probleme de texture sur une sphère
    Par sebpp dans le forum OpenGL
    Réponses: 2
    Dernier message: 12/04/2005, 19h46

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