Partage
  • Partager sur Facebook
  • Partager sur Twitter

OpenGL afficher un triangle

    22 février 2018 à 23:12:16

    Bonjour, je viens de commencer le cours Developper vos applications 3D avec openGL 3.3.

    J'ai bien avance jusqu'au troisieme chapitre mais la-bas j'ai eu probleme avec le code afficher le triangle.

    j'ai bien ecrit le code mais le resultat affiche juste une fenetre noire et sans triangle je n'ai rien compris.

    voici le code et d'ailleurs le meme dans le cours

    //#ifdef WIN32
    //#include <GL/glew.h>
    
    //#else
    #define GL3_PROTOTYPES 1
    #include <GL3/gl3.h>
    
    //#endif
    
    #include <SDL2/SDL.h>
    #include <iostream>
    
    
    int main(int argc, char **argv)
    {
        // Notre fenêtre
    
        SDL_Window* fenetre(0);
        SDL_GLContext contexteOpenGL(0);
    
        SDL_Event evenements;
        bool terminer(false);
    
    
        // Initialisation de la SDL
    
        if(SDL_Init(SDL_INIT_VIDEO) < 0)
        {
            std::cout << "Erreur lors de l'initialisation de la SDL : " << SDL_GetError() << std::endl;
            SDL_Quit();
    
            return -1;
        }
    
    
        // Version d'OpenGL
    
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3);
        SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 1);
    
    
        // Double Buffer
    
        SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
        SDL_GL_SetAttribute(SDL_GL_DEPTH_SIZE, 24);
    
    
        // Création de la fenêtre
    
        fenetre = SDL_CreateWindow("Test SDL 2.0", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, 800, 600, SDL_WINDOW_SHOWN | SDL_WINDOW_OPENGL);
    
        if(fenetre == 0)
        {
            std::cout << "Erreur lors de la creation de la fenetre : " << SDL_GetError() << std::endl;
            SDL_Quit();
    
            return -1;
        }
    
    
        // Création du contexte OpenGL
    
        contexteOpenGL = SDL_GL_CreateContext(fenetre);
    
        if(contexteOpenGL == 0)
        {
            std::cout << SDL_GetError() << std::endl;
            SDL_DestroyWindow(fenetre);
            SDL_Quit();
    
            return -1;
        }
    
    
        /*#ifdef WIN32
    
            // On initialise GLEW
    
            GLenum initialisationGLEW( glewInit() );
    
    
            // Si l'initialisation a échouée :
    
            if(initialisationGLEW != GLEW_OK)
            {
                // On affiche l'erreur grâce à la fonction : glewGetErrorString(GLenum code)
    
                std::cout << "Erreur d'initialisation de GLEW : " << glewGetErrorString(initialisationGLEW) << std::endl;
    
    
                // On quitte la SDL
    
                SDL_GL_DeleteContext(contexteOpenGL);
                SDL_DestroyWindow(fenetre);
                SDL_Quit();
    
                return -1;
            }
    
        #endif*/
    
    
        // Vertices et coordonnées
    
        float vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5};
    
    
        // Boucle principale
    
        while(!terminer)
        {
            // Gestion des évènements
    
            SDL_WaitEvent(&evenements);
    
            if(evenements.window.event == SDL_WINDOWEVENT_CLOSE)
                terminer = true;
    
    
            // Nettoyage de l'écran
    
            glClear(GL_COLOR_BUFFER_BIT);
    
    
            // On remplie puis on active le tableau Vertex Attrib 0
    
            glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
            glEnableVertexAttribArray(0);
    
    
            // On affiche le triangle
    
            glDrawArrays(GL_TRIANGLES, 0, 3);
    
    
            // On désactive le tableau Vertex Attrib puisque l'on n'en a plus besoin
    
            glDisableVertexAttribArray(0);
    
    
            // Actualisation de la fenêtre
    
            SDL_GL_SwapWindow(fenetre);
        }
    
    
        // On quitte la SDL
    
        SDL_GL_DeleteContext(contexteOpenGL);
        SDL_DestroyWindow(fenetre);
        SDL_Quit();
    
        return 0;
    }
    

    si quelqu'un peut me dire cela est dit a quoi.

    Et merci d'avamce

    • Partager sur Facebook
    • Partager sur Twitter
      24 février 2018 à 10:41:54

      j'ai le même problème que toi mais avec un code plus complexe et sous linux , je suis presque sur qu'il manque une ligne mais je sais plus quoi :(. Dans ton cas vérifie que tes extensions de glew sont bien fonctionnel. Et pourquoi mettre en commentaire ton initialisation a glew (qui d’ailleurs n'est pas que propre a windows) ?

      -
      Edité par Matheau85gyque 24 février 2018 à 10:47:02

      • Partager sur Facebook
      • Partager sur Twitter
        24 février 2018 à 11:29:25

        Si tu n'initialises pas GLEW, effectivement ça va poser problème.

        Ensuite, si ce cours préconise cette forme d'utilisation d'OpenGL, il vaut mieux l'abandonner tout de suite.

        Il existe des cours plus à jour : OGLdev, learnopengl

        (parce que suivre des cours obsolètes d'une API en cours d'obsolescence...)

        -
        Edité par dragonjoker 24 février 2018 à 11:30:35

        • Partager sur Facebook
        • Partager sur Twitter

        Si vous ne trouvez plus rien, cherchez autre chose.

          26 février 2018 à 13:05:07

          Merci Matheau85gyqu, 

          effectivement je suis aussi sur linux et comme dans le cours il a dit que cette initialisation de GLEW est propre a Windows alors je suis aussi sur linux. Je me demande si ce n'est pas a cause de cette library de GLEW qui me pose probleme.

          Mais, si c'est le cas comment fait-on pour initialiser la library GLEW sous linux ? et comment installer cette library parce que j'ai l'impression que ce n'est pas installer chez moi.

          merci

          cordialement

          • Partager sur Facebook
          • Partager sur Twitter
            26 février 2018 à 20:15:52

            Ben Keita a écrit:

             comme dans le cours il a dit que cette initialisation de GLEW est propre a Windows

            heu change de cours.

            pour les extentions mais ya plein d'autre site et tuto

            https://openclassrooms.com/courses/les-extensions-5

            et

            sudo apt-get install libglew-dev
            sudo apt-get install libglew1 //deprecier je crois

            puis pour verifier les extention et version ogl

             glxinfo


            sous linux pour evité un segment fault passe aussi cette ligne dans ton debut de code

            glewExperimental=GL_TRUE; //cette ligne
                GLenum code=glewInit();
            
                if(code != GLEW_OK)
                   cout<<"Initialisation glew echouer"<<endl<<endl;
             else
                    cout<<"Glew "<<GLEW_VERSION_MAJOR <<'.'<<GLEW_VERSION_MINOR<<" initialiser avec succes"<<endl<<endl;
            





            -
            Edité par Matheau85gyque 26 février 2018 à 20:49:46

            • Partager sur Facebook
            • Partager sur Twitter
              1 mars 2018 à 14:37:20

              dragonjoker a écrit:

              Si tu n'initialises pas GLEW, effectivement ça va poser problème.

              Ensuite, si ce cours préconise cette forme d'utilisation d'OpenGL, il vaut mieux l'abandonner tout de suite.

              Il existe des cours plus à jour : OGLdev, learnopengl

              (parce que suivre des cours obsolètes d'une API en cours d'obsolescence...)

              -
              Edité par dragonjoker 24 février 2018 à 11:30:35

              ici vous avez indique ces cours, ils travaillent avec vicual studio 2015, comment poourrait-on installer ceci sur linux ? puisque je nai pas trouve et on dit dans beaucoup, que j'ai consulte, que cette version il n'y en a pas pour linux. la seule version pour linux est visual code qui est aussi different de visual studio 2015 en realite.

              merci de me guider, svp



              • Partager sur Facebook
              • Partager sur Twitter
                1 mars 2018 à 18:21:17

                Euh ... OGLdev ce n'est pas du Visual Studio, à la base, mais du bon vieux Makefile.

                LearnOpenGL quant à lui utilise CMake donc de multiplateforme, à priori.

                Et non, Visual Studio n'est pas disponible sous Linux. (j'utilise tout ce qui me tombe sous la main, sous Linux)

                • Partager sur Facebook
                • Partager sur Twitter

                Si vous ne trouvez plus rien, cherchez autre chose.

                OpenGL afficher un triangle

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown