Partage
  • Partager sur Facebook
  • Partager sur Twitter

texture en opengl

mon cube ne veut pas des texture

    20 août 2007 à 8:57:32

    bonjours, mon problème est le suivat : je code sous code blocks et quand j'execute ce code :
    1. #include <SDL/SDL.h>
    2. #include <GL/gl.h>
    3. #include <GL/glu.h>
    4. #include <cstdlib>
    5. #include <SDL/SDL_image.h>
    6. #include "sdlglutils.h"
    7. void Dessiner();
    8. GLuint Texture1 = loadTexture("stainedglass05.jpg");
    9. int main(int argc, char *argv[])
    10. {
    11.     SDL_Event event;
    12.     SDL_Init(SDL_INIT_VIDEO);
    13.     atexit(SDL_Quit);
    14.     SDL_WM_SetCaption("SDL GL Application", NULL);
    15.     SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
    16.     glMatrixMode( GL_PROJECTION );
    17.     glLoadIdentity();
    18.     gluPerspective(70,(double)640/480,1,1000);
    19.     glEnable(GL_DEPTH_TEST);
    20.     glEnable(GL_TEXTURE_2D);
    21.     Dessiner();
    22.     for (;;)
    23.     {
    24.         SDL_WaitEvent(&event);
    25.         switch(event.type)
    26.         {
    27.             case SDL_QUIT:
    28.             exit(0);
    29.             break;
    30.         }
    31.         Dessiner();
    32.     }
    33.     return 0;
    34. }
    35. void Dessiner()
    36. {
    37.     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    38.     glMatrixMode( GL_MODELVIEW );
    39.     glLoadIdentity( );
    40.     gluLookAt(3,4,2,0,0,0,0,0,1);
    41.     glBindTexture(GL_TEXTURE_2D,Texture1);
    42.     glBegin(GL_QUADS);
    43.     glTexCoord2d(0,1);          glVertex3d(1,1,1);
    44.     glTexCoord2d(0,0);          glVertex3d(1,1,-1);
    45.     glTexCoord2d(1,0);          glVertex3d(-1,1,-1);
    46.     glTexCoord2d(1,1);          glVertex3d(-1,1,1);
    47.     glEnd();
    48.     glColor3ub(0,255,0); //face verte
    49.     glVertex3d(1,-1,1);
    50.     glVertex3d(1,-1,-1);
    51.     glVertex3d(1,1,-1);
    52.     glVertex3d(1,1,1);
    53.     glColor3ub(0,0,255); //face bleue
    54.     glVertex3d(-1,-1,1);
    55.     glVertex3d(-1,-1,-1);
    56.     glVertex3d(1,-1,-1);
    57.     glVertex3d(1,-1,1);
    58.     glColor3ub(255,255,0); //face jaune
    59.     glVertex3d(-1,1,1);
    60.     glVertex3d(-1,1,-1);
    61.     glVertex3d(-1,-1,-1);
    62.     glVertex3d(-1,-1,1);
    63.     glColor3ub(0,255,255); //face cyan
    64.     glVertex3d(1,1,-1);
    65.     glVertex3d(1,-1,-1);
    66.     glVertex3d(-1,-1,-1);
    67.     glVertex3d(-1,1,-1);
    68.     glColor3ub(255,0,255); //COULEUR MAGENTA
    69.     glVertex3d(1,-1,1);
    70.     glVertex3d(1,1,1);
    71.     glVertex3d(-1,1,1);
    72.     glVertex3d(-1,-1,1);
    73.     glEnd();
    74.     glFlush();
    75.     SDL_GL_SwapBuffers();
    76. }

    il devrait aparaitre une face du cube avec ue texture,mais moi j'obtient une face du cube de couleur majenta, qui corespont a la dernière couleur demandé.
    Que faire? merci d'avance pour vos reponse.
    • Partager sur Facebook
    • Partager sur Twitter
      20 août 2007 à 9:36:52

      charger une texture, comme ça, en globale, c'est moche. (ligne 8)

      met le chargement de texture dans une fonction, et controle le code de retour.
      • Partager sur Facebook
      • Partager sur Twitter

      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

        20 août 2007 à 9:41:08

        Je dis peut-être une connerie, mais c'est pas la face de derrière qui est texturée et donc pas visible ?

        Sinon quelques points à améliorer:
        1) Pas de variable globale
        2) Surtout pas utiliser exit(0) et atexit
        3) le for(;;) est à proscrire.
        • Partager sur Facebook
        • Partager sur Twitter
        Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
          20 août 2007 à 10:07:30

          Pour ce qui est des variables globales et cie, je les enlèverais a therme mais en faite j'ai pratiquement copié coller le code dans le cour de kayl sur l'opengl et c'est d'aileur pour sa que sa m'étonne. Donc pour l'instant je les laisse je pense, si le conde de kayl marche pourquoi pas le mien?

          Ensuite la face est bien situé devant puisque les coodonnée y sont toute de un alors que dans celle de derière elle sont de -1.

          J'ai récupérer la valeur de Texture1, la variable de chargement de la texture, elle vaut 0.
          • Partager sur Facebook
          • Partager sur Twitter
            20 août 2007 à 10:12:27

            Mmmh j'ai compris.

            Il te faut appeler loadTexture dans le main et pas en dehors.
            • Partager sur Facebook
            • Partager sur Twitter
            Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
              20 août 2007 à 10:42:39

              Citation : Nanoc

              Il te faut appeler loadTexture dans le main et pas en dehors.


              Exactement, car à ce moment là, le contexte OpenGL n'est pas encore créé.

              http://www.siteduzero.com/forum-83-154296-1404272.html#r1404272
              • Partager sur Facebook
              • Partager sur Twitter
                20 août 2007 à 10:46:33

                je l'ai fait mais sa ne change apparement rien, voici le nouveau code :
                1. #include <SDL/SDL.h>
                2. #include <GL/gl.h>
                3. #include <GL/glu.h>
                4. #include <cstdlib>
                5. #include <stdlib.h>
                6. #include <stdio.h>
                7. #include <SDL/SDL_image.h>
                8. #include "sdlglutils.h"
                9. void Dessiner();
                10. GLuint Texture1;
                11. int main(int argc, char *argv[])
                12. {
                13.     Texture1 = loadTexture("stainedglass05.jpg");
                14.     SDL_Event event;
                15.     SDL_Init(SDL_INIT_VIDEO);
                16.     atexit(SDL_Quit);
                17.     SDL_WM_SetCaption("SDL GL Application", NULL);
                18.     SDL_SetVideoMode(640, 480, 32, SDL_OPENGL);
                19.     glMatrixMode( GL_PROJECTION );
                20.     glLoadIdentity();
                21.     gluPerspective(70,(double)640/480,1,1000);
                22.     glEnable(GL_DEPTH_TEST);
                23.     glEnable(GL_TEXTURE_2D);
                24.     Dessiner();
                25.     for (;;)
                26.     {
                27.         SDL_WaitEvent(&event);
                28.         switch(event.type)
                29.         {
                30.             case SDL_QUIT:
                31.             exit(0);
                32.             break;
                33.         }
                34.         Dessiner();
                35.     }
                36.     return 0;
                37. }
                38. void Dessiner()
                39. {
                40.     glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
                41.     glMatrixMode( GL_MODELVIEW );
                42.     glLoadIdentity( );
                43.     gluLookAt(3,4,2,0,0,0,0,0,1);
                44.     glBindTexture(GL_TEXTURE_2D,Texture1);
                45.     glBegin(GL_QUADS);
                46.     glTexCoord2d(0,1);          glVertex3d(1,1,1);
                47.     glTexCoord2d(0,0);          glVertex3d(1,1,-1);
                48.     glTexCoord2d(1,0);          glVertex3d(-1,1,-1);
                49.     glTexCoord2d(1,1);          glVertex3d(-1,1,1);
                50.     glEnd();
                51.     glColor3ub(0,255,0); //face verte
                52.     glVertex3d(1,-1,1);
                53.     glVertex3d(1,-1,-1);
                54.     glVertex3d(1,1,-1);
                55.     glVertex3d(1,1,1);
                56.     glColor3ub(0,0,255); //face bleue
                57.     glVertex3d(-1,-1,1);
                58.     glVertex3d(-1,-1,-1);
                59.     glVertex3d(1,-1,-1);
                60.     glVertex3d(1,-1,1);
                61.     glColor3ub(255,255,0); //face jaune
                62.     glVertex3d(-1,1,1);
                63.     glVertex3d(-1,1,-1);
                64.     glVertex3d(-1,-1,-1);
                65.     glVertex3d(-1,-1,1);
                66.     glColor3ub(0,255,255); //face cyan
                67.     glVertex3d(1,1,-1);
                68.     glVertex3d(1,-1,-1);
                69.     glVertex3d(-1,-1,-1);
                70.     glVertex3d(-1,1,-1);
                71.     glColor3ub(255,0,255); //face magenta
                72.     glVertex3d(1,-1,1);
                73.     glVertex3d(1,1,1);
                74.     glVertex3d(-1,1,1);
                75.     glVertex3d(-1,-1,1);
                76.     glEnd();
                77.     glFlush();
                78.     SDL_GL_SwapBuffers();
                79. }
                • Partager sur Facebook
                • Partager sur Twitter
                  20 août 2007 à 10:52:38

                  "J'ai récupérer la valeur de Texture1, la variable de chargement de la texture, elle vaut 0. "

                  --> Check
                  http://pyopengl.sourceforge.net/documentation/manual/glBindTexture.3G.html
                  The value zero is reserved to represent the default texture for each texture target

                  Conclusion : si ça renvoie 0, c'est que ta fonction LoadTexture a échoué.
                  Refere toi a la doc de cette fonction pour savoir pourquoi.
                  Possibilités : fichier non trouvé (faute de frappe ?), fichier non conforme, ...
                  • Partager sur Facebook
                  • Partager sur Twitter

                  Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                    20 août 2007 à 11:15:31

                    doc -> y en a pas, c'est une fonction crée par kayl juste pour sa.( ce qui vaut 0 c'est le Texture1 après avoir codé Texture1 = loadTexture("stainedglass05.jpg");)
                    Pour la faute de frape il n'y en a pas : j'ai copié coller le nom de l'image.
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 août 2007 à 11:22:37

                      si tu n'as pas la doc de cette fonction, tu as peut etre le code de cette fonction : et tu peux retrouver l'endroit, a l'intérieur, ou ça ne fait pas ce que ça devrait :)
                      • Partager sur Facebook
                      • Partager sur Twitter

                      Recueil de code C et C++  http://fvirtman.free.fr/recueil/index.html

                        20 août 2007 à 12:19:45

                        j'ai trouvé la reponse seul : il faut que le load texture soit non seulement dans le main mais en dessous du glEnable(GL_TEXTURE_2D);. merci pour vos reponse.
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 août 2007 à 19:02:19

                          il fallait simplement le mettre après la création de la fenêtre SDL (qui initialise le contexte openGL), cela ne vient pas de glEnable(GL_TEXTURE_2D). Cela était suffisant
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 août 2007 à 23:24:43

                            Citation : haniboul

                            il fallait simplement le mettre après la création de la fenêtre SDL (qui initialise le contexte openGL), cela ne vient pas de glEnable(GL_TEXTURE_2D). Cela était suffisant


                            Oui.

                            razzi, quelque chose me fait penser que tu n'as pa lu le lien que je t'ai donné. La réponse s'y trouvait.
                            • Partager sur Facebook
                            • Partager sur Twitter

                            texture en 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