Partage
  • Partager sur Facebook
  • Partager sur Twitter

problème avec les shaders sur openGL

    11 février 2018 à 19:12:46

    Bonjour,
    Je poste ce message car j'ai commencé le tutor sur openGL (https://openclassrooms.com/courses/developpez-vos-applications-3d-avec-opengl-3-3/introduction-21), mais je rencontre un problème que, malgré de nombreuses recherches, je ne parviens pas à résoudre.
    J'ai réussi sans problème à faire les 3 premiers chapitres, j'arrive à créer une fenêtre avec SDL et à dessiner un triangle en 2D. C'est quand on commence à utiliser les shaders (https://openclassrooms.com/courses/developpez-vos-applications-3d-avec-opengl-3-3/introduction-aux-shaders-1) que mon programme ne fonctionne plus très bien. Il compile sans problème, sans me signaler d'erreur, il crée une fenêtre mais le triangle n'apparait pas. J'ai l'impression que le problème vient des shaders, il y a peut-être un problème d'incompatibilité avec ma carte graphique (NVIDIA GeForce 9400M), j'ai cherché mais je n'ai pas trouvé de solution.
    J'ai testé différente version de shaders, à part me dire qu'il y a un problème de compatibilité (ce qui n'arrive pas avec la version 150 core), cela ne change rien. Ayant un mac, je suis allée voir le tutoriel un peu plus loin afin de pouvoir coder sur mon ordinateur (https://openclassrooms.com/courses/developpez-vos-applications-3d-avec-opengl-3-3/les-vertex-array-objects#/id/r-964710), donc normalement cela ne devrait pas venir de là.
    Si vous pouvez m'aider, je vous en serez fort reconnaissante ^^
    • Partager sur Facebook
    • Partager sur Twitter
      11 février 2018 à 20:08:44

      Sans code on peut difficilement t'aider.

      Le cours que tu suis est obsolète, dirige toi vers ce cours : https://learnopengl.com/ c'est mieux.

      • Partager sur Facebook
      • Partager sur Twitter
        11 février 2018 à 20:10:32

        je vais aller regarder le lien :) merci ^^

        voilà la boucle qui crée la fenêtre et dessine le triangle ;) si y'a besoin que je mette un autre code, dis moi =)

        void SceneOpenGL::bouclePrincipale() {
         
            // Variables
           
            bool terminer(false);
            float vertices[] = {-0.5, -0.5,   0.0, 0.5,   0.5, -0.5};
            float couleurs[] = {0.0, 204.0 / 255.0, 1.0,    0.0, 204.0 / 255.0, 1.0,    0.0, 204.0 / 255.0, 1.0};
           
           
            Shader shaderCouleur("Shaders/couleur2D.vert", "Shaders/couleur2D.frag");
            shaderCouleur.charger();
           
           
            // Boucle principale
           
            while(!terminer) {
               
                // Gestion des évènements
               
                SDL_WaitEvent(&m_evenements);
               
                if(m_evenements.window.event == SDL_WINDOWEVENT_CLOSE)
                    terminer = true;
               
               
                // Nettoyage de l'écran
               
                glClear(GL_COLOR_BUFFER_BIT);
               
               
                // Activation du shader
               
                glUseProgram(shaderCouleur.getProgramID());
               
               
                // Envoi des vertices
               
                glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, vertices);
                glEnableVertexAttribArray(0);
               
               
                // Envoi des couleurs
               
                glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, 0, couleurs);
                glEnableVertexAttribArray(1);
               
               
                // Affichage du triangle
               
                glDrawArrays(GL_TRIANGLES, 0, 3);
               
               
                // Désactivation des tableaux Vertex Attrib
               
                glDisableVertexAttribArray(1);
                glDisableVertexAttribArray(0);
               
               
                // Désactivation du shader
               
                glUseProgram(0);
               
               
                // Actualisation de la fenêtre
               
                SDL_GL_SwapWindow(m_fenetre);
            }

        -
        Edité par Elodie1018 11 février 2018 à 20:11:47

        • Partager sur Facebook
        • Partager sur Twitter
          11 février 2018 à 21:41:37

          ça compile oui, mais quand j'exécute, je n'obtiens qu'une fenêtre noire et pas de triangle...
          • Partager sur Facebook
          • Partager sur Twitter
            12 février 2018 à 16:05:47

            Salut!

            Je suppose que tu as activé les extensions de débogage, parce que je ne vois pas un seul appel à glGetError, dans ta boucle de rendu...

            Question subsidiaire : pourquoi veux-tu faire de l'OpenGL ?

            • Partager sur Facebook
            • Partager sur Twitter

            Si vous ne trouvez plus rien, cherchez autre chose.

              12 février 2018 à 19:28:46

              Euh... j'ai suivi le tuto, donc je ne sais pas trop ^^

              Mais ça y est, j'ai trouvé le problème, il vient de la version des shaders, j'ai du remplace "#version 150 core" par "#version 120"... Le triangle s'affiche mais ne se colorie pas comme il devrait.

              Voici un exemple de code (fichier couleur2D.frag) :

              // Version du GLSL

              #version 120


              // EntrÈe

              attribute vec3 color;


              // Sortie

              varying vec4 out_Color;


              // Fonction main

              void main()
              {
                  // Couleur finale du pixel

                  out_Color = vec4(color, 1.0);
              }

              Le soucis maintenant, c'est que  quand je compile, j'ai une erreur comme quoi il ne comprend pas le mot "attribute"... mais je ne sais pas par quoi le remplace x)

              Et pour répondre à ta question dragonjoker, je dois me former à OpenGL pour un projet d'informatique à la fac, le but étant de créer un volume en 3D à partir d'un gabarit 2D grâce à une rotation ;)

              • Partager sur Facebook
              • Partager sur Twitter
                12 février 2018 à 20:44:28

                Remplace attribute par in et varying par out
                • Partager sur Facebook
                • Partager sur Twitter
                  12 février 2018 à 21:31:36

                  c'était comme ça avant, c'est moi qui ai remplacé in par attribute et varying par out parce que il ne les reconnaissait pas ^^' j'ai un ami qui m'a dit que les "in" et "out" n'étaient arrivés que après la version 1.20

                  mais sinon, ma prof m'a dit de laisser tomber les shaders, que je n'en avais pas l'utilité ^^ donc je vais oublié tout ça et chercher un tuto pour utiliser openGL sans les shader :D

                  mais merci à vous pour votre aide :)

                  • Partager sur Facebook
                  • Partager sur Twitter
                    14 février 2018 à 21:43:47

                    Non, ne cherche pas un tuto pour faire de l'OpenGL sans shaders, par pitié!

                    Sinon, comme bons tutoriels OpenGL moderne, il y a learnopengl et ogldev

                    Pour le second, j'en ai fait une traduction française sur un site concurrent à celui-ci.

                    -
                    Edité par dragonjoker 14 février 2018 à 21:56:49

                    • Partager sur Facebook
                    • Partager sur Twitter

                    Si vous ne trouvez plus rien, cherchez autre chose.

                      14 février 2018 à 21:54:56

                      Ça fait quoi ? Onze ans qu'on est plus censés faire du rendu GPU sans shader et presque vingt ans qu'ils sont disponibles.

                      Les shaders sont essentiels et indispensables.

                      Déjà qu'OpenGL est sur le point d'être déprécié, l'apprendre sans shaders ne vaut vraiment pas la peine.

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Mes articles | Nazara Engine | Discord NaN | Ma chaîne Twitch (programmation)

                        19 février 2018 à 13:13:56

                        euh... c'est ma prof qui m'a dit de faire sans... et puis si les shaders ne fonctionnent pas sur mon ordi et que c'est possible de faire sans, je ne vais pas me casser la tête :p surtout que le but de notre travail n'est pas de faire un jeu vidéo, juste de créer un volume à partir d'un gabarit 2D ^^

                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 février 2018 à 11:47:15

                          Les shaders fonctionnent sur ton ordi, aucun doute là-dessus.
                          C'est juste que tu n'as pas codé correctement pour les faire fonctionner ;)
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Si vous ne trouvez plus rien, cherchez autre chose.

                            26 février 2018 à 14:13:42

                            j'ai pourtant suivi le tuto et j'ai utilisé les fichiers du tuto, j'ai une erreur comme quoi la version n'est pas supportée et si j'ai beau la changer, ça ne marche toujours pas x)
                            • Partager sur Facebook
                            • Partager sur Twitter

                            problème avec les shaders sur openGL

                            × 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