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 :

Pas de texture


Sujet :

OpenGL

  1. #1
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 51
    Par défaut Pas de texture
    Bonjour,

    J'apprends actuellement à utiliser l'Opengl, mais j'ai un soucis avec le texturage
    J'ai essayé d'afficher tout bêtement une texture sur un simple carré... mais je n'obtiens que du blanc ! J'ai essayé diverses méthodes présentées dans des tutoriaux avec le même résultat à chaque fois...

    Est-ce que vous auriez une idée de l'origine du problème ?

    Merci pour votre aide

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Par défaut
    J'ai moi même déja eu ce problème, c'est probablement du au fait que la taille de ta texture ne soit pas une puissance de 2. Seul OpenGL 2 supporté par des cartes graphique pas trop vieilles supporte des textures autre que les puissance de 2.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 51
    Par défaut
    La texture fait 256*256*24 bits, c'est une image BMP

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2006
    Messages
    213
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 213
    Par défaut
    Dans ce cas montre nous ton code que d'autres plus expérimentés que moi puissent te guider.

  5. #5
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 51
    Par défaut
    Ok voilà, désolé c'est un peu long :

    Pour l'initialisation de la SDL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void ssgl :: InitSDL()
    {
     SDL_Init(SDL_INIT_VIDEO);
     atexit(SDL_Quit);
     SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
     SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 16);
     fenetre = SDL_SetVideoMode(640,480,32, SDL_OPENGL
    					     | SDL_GL_DOUBLEBUFFER
    						 | SDL_RESIZABLE
    					     | SDL_SWSURFACE);
     
    }

    Pour l'initialisation d'OpenGL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void ssgl :: InitOpenGL()
    {
        gluOrtho2D(0,640,0,480);
    	glClearColor(0.0,0.0,0.0,0.0);
    	glClearDepth(1.0);
    	glShadeModel(GL_SMOOTH);
    	glEnable(GL_DEPTH_TEST);
    	glDepthFunc(GL_LEQUAL);
    	glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    	glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
    	glEnable(GL_TEXTURE_2D);
    }

    Reshape :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void ssgl :: Reshape(int w, int h)
    {
    	glViewport(0,0,w,h);
    	glMatrixMode(GL_PROJECTION);
    	glLoadIdentity();
    	gluPerspective(45.0f,(GLfloat)w/(GLfloat)h,0.1f,100.0f);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
    }
    Display :
    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
    void ssgl :: Display()
    {
    	old_time = current_time;
    	current_time = SDL_GetTicks ();
    	SDL_WM_SetCaption(CalculerFPS().c_str(), NULL);
     
    	glClearColor(0,0,0,0);
    	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    	glMatrixMode(GL_MODELVIEW);
    	glLoadIdentity();
     
    	cam.Draw(); // Affichage de la caméra
    	terr.Draw(); // Affichage du terrain
     
    	SDL_GL_SwapBuffers();
    }
    Constructeur du terrain :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    terrain :: terrain ()
    {
      this->LoadTextureBMP();
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     void terrain :: LoadTextureBMP()
    {
    AUX_RGBImageRec *texture;
    texture = auxDIBImageLoad("machin.bmp");
    glGenTextures (1, &texture1[0]);
    glBindTexture (GL_TEXTURE_2D, texture1[0]);
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST); 
    glTexImage2D(GL_TEXTURE_2D, 0, 3, texture->sizeX, texture->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture->data); 
    }
    Affichage du terrain :
    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
     
    void terrain :: Draw()
    {
     
     // On dessine le sol
     glMatrixMode( GL_MODELVIEW );
     glEnable( GL_TEXTURE_2D );
     glBindTexture(GL_TEXTURE_2D, texture1[0]);
     glBegin (GL_QUADS);
     
    glTexCoord2i(1,0);glVertex2i(-1,-1); 
    glTexCoord2i(1,1);glVertex2i(-1,1); 
    glTexCoord2i(0,1);glVertex2i(1,1); 
    glTexCoord2i(0,0);glVertex2i(1,-1);
     
     glEnd ();
    }
    Voili voilou

  6. #6
    Expert confirmé

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Par défaut
    Il y a des choses pas logique dans ton code :

    Pour l'initialisation de la SDL :
    - Il n'y a pas de tests sur tes fonctions SDL
    - Tu mets les flags SDL_OPENGL et SDL_SWSURFACE, c'est inutile
    - Tu passes SDL_GL_DOUBLEBUFFER à SDL_SetVideoMode or cela devrait se faire avec SDL_GL_SetAttribute (par défaut d'ailleurs c'est en double buffer)


    Pour l'initialisation d'OpenGL :
    - Tu passe en mode Ortho2D mais dans ta fonction Reshape t'as une vue en perspective...

    Ton code display me semble bizarre aussi :

    - old_time et current_time ne sont pas utilisées mais si c'est par l'intermédiaire de CalculerFPS, pourquoi ne pas internaliser ce code dans cette classe ?

    Dans ton chargement de texture :
    - Tu utilises des BMP, pourquoi ne pas utiliser la SDL ? Si tu initialises ta fenêtre avec la SDL, ce n'est pas la peine de chercher plus loin si ?
    - Aucun test sur le retour de la fonction de chargement.

    Et que remarque-t-on ?

    Dans ta classe ssgl, tu as une variable de type terrain. Qui est déclarer comme une variable normale (à la place d'un pointeur). Donc lorsque tu crées une instance ssgl, tu vas appeler le constructeur de la classe terrain.

    Or ton code d'initialisation du contexte SDL/OpenGL ne se fait qu'après...

    Ca me semble assez , pas toi ?

    Jc
    Jc

  7. #7
    Membre confirmé
    Inscrit en
    Juillet 2004
    Messages
    51
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 51
    Par défaut
    Alors alors...

    Pour les retours des fonctions, j'avais prévu de le faire après avoir fait un petit gestionnaire de log. Oui, ça ne m'empêchait pas de le faire

    Concernant l'initialisation de la SDL, si je ne passe pas le flag SDL_OPENGL, j'ai une fenêtre vide... pour le reste c'est bon.

    L'initialisation d'Opengl : la commande gluOrtho avait été mise après divers tests, et je l'ai oubliée là

    Pour le Display : les variables et la fonction relative aux calculs des FPS sont des membres de la classe ssgl.

    Pour le chargement de l'image, c'était au moins la 10ième tentatives pour essayer d'obtenir un résultat. Evidemment maintenant que ça marche, je vais passer par la SDL. Et pourquoi ça marchait pas ? Et pourquoi ça marchait pas ? Evidemment charger la texture avant d'avoir initialisé opengl ça marche assez moyennement (oui, pas du tout même ^^).

    Mais c'était pour voir si vous suiviez hein, c'était bien sûr tout à fait volontaire, pour tester les forumeurs !

    Sérieusement, merci, j'étais tellement persuadé que c'était un problème avec les fonctions opengl que je n'avais pas fait attention à ça !

    Merci à vous, bonne continuation

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. pas de textures
    Par ShinobiX1 dans le forum Unity
    Réponses: 8
    Dernier message: 04/02/2014, 17h11
  2. Pas de texture avec OpenGL
    Par Daïmanu dans le forum Irrlicht
    Réponses: 5
    Dernier message: 19/06/2013, 21h41
  3. Réponses: 8
    Dernier message: 19/03/2008, 19h08
  4. Réponses: 7
    Dernier message: 20/04/2004, 15h55

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