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 d'affichage : écran noir


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 30
    Points : 13
    Points
    13
    Par défaut [OpenGL] Problème d'affichage : écran noir
    Bonjour,

    J'ai enfin réussi à débugger mon programme après 3 heures d'outils Debug de Code::Blocks, mais ma page n'affiche rien (écran noir seulement). Pourtant, dans un code à peu près similaire, j'ai fait le même ordre de fonction (glClear, glMatrixMode ... seules les structures changent, or il n'y a aucun problème avec les structures car j'ai vérifié leur valeur à l'aide d'un fprintf et les valeurs voulus correspondent bien avec les valeurs effectives).
    La fonction s'occupant réellement de l'affichage est la suivante :
    void affichage(ListeObjets *liste)
    {
    Maillon *courant = liste->premier;//Création d'un maillon courant qui commence au début de la liste

    //Chargement de l'intérieur de la page apr OpenGl
    glMatrixMode(GL_PROJECTION);//matrice dans laquelle nous définissons le mode de projection (orthogonale, perspective)
    glLoadIdentity();//Chargement d'une page vide
    gluOrtho2D(0, LARGEUR_ECRAN, 0, HAUTEUR_ECRAN);//Chargement du repère orthonormé LARGEUR_ECRAN = 640 et HAUTEUR_ECRAN = 480
    glMatrixMode(GL_MODELVIEW);//Permet d'afficher des objets
    glClear(GL_COLOR_BUFFER_BIT);//On efface l'écran


    while( courant != NULL)
    {
    switch((courant->objetGraphique).type)
    {
    case POINT:
    glColor3ub((courant->objetGraphique).point.rouge, (courant->objetGraphique).point.vert, (courant->objetGraphique).point.bleu);
    glBegin(GL_POINTS);
    glVertex2d((courant->objetGraphique).point.x, (courant->objetGraphique).point.y);
    glEnd();
    break;
    case SEGMENT:
    glColor3ub((courant->objetGraphique).segment.rouge, (courant->objetGraphique).segment.vert, (courant->objetGraphique).segment.bleu);
    glBegin(GL_LINE);
    glVertex2d((courant->objetGraphique).segment.depart.x, (courant->objetGraphique).segment.depart.y);
    glVertex2d((courant->objetGraphique).segment.arrivee.x, (courant->objetGraphique).segment.arrivee.y);
    glEnd();
    break;
    default: printf("Affichage indéfini !!");
    }
    courant = courant->suivant;
    }

    glFlush();
    SDL_GL_SwapBuffers();
    }
    La liste contient deux maillons, le premier de type POINT et le second de type SEGMENT (#define)

    typedef struct str_Point
    {
    short int rouge;
    short int vert;
    short int bleu;
    double x;//Abscisse
    double y;//Ordonnée
    }
    Point;

    typedef struct str_Segment
    {
    short int rouge;
    short int vert;
    short int bleu;
    Point depart;
    Point arrivee;
    }
    Segment;

    typedef union union_objetGraphique
    {
    int type;
    Point point;
    Segment segment;
    }
    ObjetGraphique;

    typedef struct Maillon Maillon; //Maillon composant la liste (un maillon = un type (objet) graphique

    struct Maillon
    {
    ObjetGraphique objetGraphique;
    Maillon* suivant;
    };

    typedef struct str_listeObjets //Liste d'objet graphique
    {
    Maillon* premier;//Premier objet créer
    Maillon* dernier;//Dernier objet de la liste
    }
    ListeObjets;

    Je précise que grâce à l'outils de Debug de C::B (instructions par instructions) j'ai pu vérifier que le programme effectuais bien les 2 cas de mon switch.

    Si vous avez besoin de plus d'information (ou même le code entier, qui fait 6 modules), n'hésitez pas.
    Je vous remercie à l'avance pour vos réponses.

  2. #2
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    33
    Détails du profil
    Informations personnelles :
    Âge : 32

    Informations forums :
    Inscription : Juin 2009
    Messages : 33
    Points : 43
    Points
    43
    Par défaut
    Bonjour,

    je ne sais pas si cela résoudra ton problème mais au lieu d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(0, LARGEUR_ECRAN, 0, HAUTEUR_ECRAN);
    glMatrixMode(GL_MODELVIEW);
    je te conseille plutôt d'écrire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glViewport(0,0,LARGEUR_ECRAN,HAUTEUR_ECRAN);
    gluOrtho2D(0, LARGEUR_ECRAN, 0, HAUTEUR_ECRAN);
    Voilà tout

Discussions similaires

  1. Problème d'affichage (rectangle noir)
    Par totoz dans le forum OpenGL
    Réponses: 1
    Dernier message: 23/01/2009, 00h23
  2. Java opengl problème d'affichage
    Par patmaba dans le forum Débuter
    Réponses: 1
    Dernier message: 29/09/2008, 13h41
  3. [Opengl] Problème d'affichage - carte graphique.. ?
    Par Akwel91 dans le forum OpenGL
    Réponses: 5
    Dernier message: 02/01/2007, 22h18
  4. [Cygwin et OpenGL] Problème d'affichage
    Par CandS dans le forum Autres langages
    Réponses: 2
    Dernier message: 28/04/2005, 10h31
  5. Visual C++ 6 : Problème impression d'écran noir
    Par charliejo dans le forum MFC
    Réponses: 6
    Dernier message: 24/01/2005, 09h52

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