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 :

Textures blanches


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif Avatar de Hyoga
    Inscrit en
    Décembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 154
    Par défaut Textures blanches
    Salut,

    on dirait bien que devC++ 9.9.1 ne digere pas les boucles for pour agrandir la taille d'une surface en openGL par exemple je fais

    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
    18
    19
    20
    21
    22
     
    glLoadIdentity();                  
    glEnable(GL_TEXTURE_2D) ;
    glBindTexture(GL_TEXTURE_2D,texture[4]) ;	
    glRotatef(LookY,1.0f,0.0f,0.0f);
    glRotatef(LookX,0.0f,1.0f,0.0f);
    glTranslated(0.0f,-1.0f,0.0f);
     
    for (float x = -24; x<24;x+=4)
    {
    for (float z = -24; z<=24;z+=48)
    {
    glBegin(GL_QUADS);
    glTexCoord2i(0,1);glVertex3f(x-4.0f , 3.0f , z); 
    glTexCoord2i(1,1);glVertex3f(x , 3.0f , z);  
    glTexCoord2i(1,0);glVertex3f(x , 1.0f , z);  
    glTexCoord2i(0,0);glVertex3f(x-4.0f , 1.0f , z);  
    }
    }
     
    glEnd();
    glDisable(GL_TEXTURE_2D) ;
    et ben j'ai une texture blanche qui est affiché c'est tout blanc partout pourtant celle ci est a la puissance 2.

    il y aurait t'il un autre moyen de faire la meme chose que ci dessus sans utiliser de boucle for ?

    merci d'avance

  2. #2
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    tu as bien initlisalisé opengl avant de lancer le chargement de ta texture?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    glutInit(&argc, argv);// des arguments sur la ligne de commande
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);// GLUT_DOUBLE pour le buffer d'animation et GLUT_DEPTH supprime les faces cachées
      // définition et création de la fenêtre graphique
      glutInitWindowSize(WIDTH, HEIGHT);
      glutInitWindowPosition(50, 50); // position de la fenetre
      glutCreateWindow("OpenGL-# Moteur 3D"); // titre de la fenetre
      // initialisation de OpenGL et de la scène
      initGL(); //init des params de glut

  3. #3
    Membre très actif Avatar de Hyoga
    Inscrit en
    Décembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 154
    Par défaut
    Citation Envoyé par Bob.Killer
    tu as bien initlisalisé opengl avant de lancer le chargement de ta texture?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    glutInit(&argc, argv);// des arguments sur la ligne de commande
      glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);// GLUT_DOUBLE pour le buffer d'animation et GLUT_DEPTH supprime les faces cachées
      // définition et création de la fenêtre graphique
      glutInitWindowSize(WIDTH, HEIGHT);
      glutInitWindowPosition(50, 50); // position de la fenetre
      glutCreateWindow("OpenGL-# Moteur 3D"); // titre de la fenetre
      // initialisation de OpenGL et de la scène
      initGL(); //init des params de glut
    Oui

  4. #4
    Membre expérimenté Avatar de Bob.Killer
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    336
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 336
    Par défaut
    je connais qq un a qui c t arrivé, il avait une classe pour il chargeait des textures dans le constructeur, il avait déclaré une variable globale de cette classe dans son fichier cpp principal, puisque c t une variable global, il appelait le constructeur dès l arrivé dans le fichier principal mais opengl n'était pas initialisé, car pas encore passé par la fonction main de l'appli... donc à part ça je vais pas ce qui peut merder... car je vois pas pk la boucle for casserait tt.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for (float x = -24; x<24;x+=4) 
    { 
    for (float z = -24; z<=24;z+=48) 
    { 
    glBegin(GL_QUADS); 
    glTexCoord2i(0,1);glVertex3f(x-4.0f , 3.0f , z); 
    glTexCoord2i(1,1);glVertex3f(x , 3.0f , z);  
    glTexCoord2i(1,0);glVertex3f(x , 1.0f , z);  
    glTexCoord2i(0,0);glVertex3f(x-4.0f , 1.0f , z);  
    } 
    } 
     
    glEnd();
    Tu trouves pas que ça fait beaucoup de glBegin pour un seul glEnd ?

  6. #6
    Membre très actif Avatar de Hyoga
    Inscrit en
    Décembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 154
    Par défaut
    Meme en mettant le glEnd() en dehors du for j'ai toujours le meme probleme
    sauf quand le bmp est en 24 bits ça marche impec cependant je dois utiliser pleins de bmp qui sont en 8bits

    je pense que ça viens d'ici le pb

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    void textures() 
    {
    AUX_RGBImageRec *texture1;
    texture1=auxDIBImageLoad("images/box.bmp");
    glGenTextures (1, &texture[0]); 
    glBindTexture (GL_TEXTURE_2D, texture[0]); 
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_LINEAR); 
    glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR ); 
    glTexImage2D(GL_TEXTURE_2D, 0, 3, texture1->sizeX, texture1->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, texture1->data);
    };

    mais normalement avec ça le 8bits ou 16bits devrait passer sans pb

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Par défaut
    Les paramètres de glTexImage2D ne sont pas les même si on utilise des images 8, 16, 24 ou encore 32bits.

    Essaye GL_APLHA à la place de GL_RGB et dit moi si tu vois ta texture en noir et blanc.

    As-tu regardé si glGetError() te renvoi une erreur ?

  8. #8
    Membre très actif Avatar de Hyoga
    Inscrit en
    Décembre 2004
    Messages
    154
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 154
    Par défaut
    Quand je met GL_ALPHA on me dit qu'il n'est pas définit dans void textures()
    et glGetError() je le met ou ?

  9. #9
    Membre éprouvé
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    108
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 108
    Par défaut
    GL_ALPHA pas définie ??? Il est normalement défine dans gl.h !

    Sinon essaye GL_LUMINANCE à la place.

    Pour glGetError, il est conseillé de le faire une fois par cycle. Mais tu peux le mettre ou tu veux.

  10. #10
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    Bon et bien je crois qu'il faut que tu utilise GL_REPEAT pour avoir déjà ta texture répété et que tu set les coordonnées à 12.

    Si j'ai bien compris... cela ressemble à 2 bandes parallèles avec des textures répétées dessus.
    Au lieu de faire ce que tu fais si dessous, ce qui est inutile et prend du CPU.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    for (float x = -24; x<24;x+=4) 
    { 
    	for (float z = -24; z<=24;z+=48) 
    	{ 
    		glBegin(GL_QUADS); 
    			glTexCoord2i(0,1);glVertex3f(x-4.0f , 3.0f , z); 
    			glTexCoord2i(1,1);glVertex3f(x , 3.0f , z);  
    			glTexCoord2i(1,0);glVertex3f(x , 1.0f , z);  
    			glTexCoord2i(0,0);glVertex3f(x-4.0f , 1.0f , z);  
    		glEnd();
    	} 
    }
    Donc, puisque x-4.0f et x+=4 les quads formés se touchent ( ce qui peut aussi généré des effets "bizzare" comme des points blanc quand 2 surfaces sont trop proches et que le Z-Buffer chie un peu)

    Bon si j'ai compris c'est cela
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    for (float z = -24; z<=24;z+=48) 
    { 
    	glBegin(GL_QUADS); 
    		glTexCoord2i(0,1);glVertex3f(-24 , 3.0f , z); 
    		glTexCoord2i(12,1);glVertex3f(24 , 3.0f , z);  
    		glTexCoord2i(12,0);glVertex3f(24 , 1.0f , z);  
    		glTexCoord2i(0,0);glVertex3f(-24.0f , 1.0f , z);  
    	glEnd();
    }
    C’est juste un speudo code non testé… a voir pour les coordonnées de setting et ce que tu veux faire avec !

  11. #11
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    regarde aussi du coté des MIPMAP... si tu utilise du filtrage mais que toutes les textures de mipmap n'ont pas été envoyé a la carte, il va aller lire des texture blanches des que tu voudra reduire la taille de ta texture (ce que tu fait apparament...) donc pour resoudre ton probleme essaye de charger les texture avec gluBuid2Dmipmap()...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

Discussions similaires

  1. textures blanches sur certaines configs
    Par SQUAL dans le forum OpenGL
    Réponses: 1
    Dernier message: 21/03/2010, 15h26
  2. Réponses: 3
    Dernier message: 29/07/2009, 14h32
  3. Texture chargee qui apparait toute blanche
    Par barthelv dans le forum OpenGL
    Réponses: 2
    Dernier message: 18/01/2005, 11h57
  4. Changer l'image d'une texture
    Par alltech dans le forum DirectX
    Réponses: 5
    Dernier message: 21/08/2002, 01h31
  5. [CR] Avoir seulement une page blanche qd la base est vide???
    Par littleChick dans le forum SAP Crystal Reports
    Réponses: 2
    Dernier message: 13/08/2002, 18h26

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