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 :

Placage de texture


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Placage de texture
    Bonjour,

    Je travaille actuellement sous Cygwin en C++/OpenGL, sur un programme de plusieurs dizaines de fichiers. J'avais des fonctions de texturage, avec des textures translucides, qui fonctionnaient très bien avant. Malheureusement, j'ai modifié une autre partie de mon code, et depuis ça ne fonctionne plus. J'ai donc très probablement modifié sans m'en rendre compte une variable d'état d'OpenGL. Pour résoudre ce problème, je me suis assurée de tout réinitialiser juste avant le rendu texturé. Mais j'ai dû oublier quelque chose...

    Variable de ma classe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    int l,h;
    int textureId;
    fonction d'initialisation de la texture :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    -----------------------------------------
    char * buffer = (unsigned char *)malloc(4 * l * h*         
                             sizeof(unsigned char));
    for(int i=0; i<h; i++)
       for(int j=0; j<l; j++){
           buffer[i*l+j] = 0x00;
           buffer[i*l+j+1] = 0xFF;
           buffer[i*l+j+2] = 0x00;
           buffer[i*l+j+3] = 0x0F;}
    glGenTextures(1, &textureId);
    glBindTexture(GL_TEXTURE_2D, textureId);
    gluBuild2DMipmaps(GL_TEXTURE_2D,4,l,h,GL_RGBA,
                                  GL_UNSIGNED_BYTE,buffer);
    fonction de dessin :
    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
     
    ---------------------
    glEnable(GL_TEXTURE_2D);
    glBindTexture(GL_TEXTURE_2D, textureId);
    glTexParameteri(GL_TEXTURE_2D,            
                            GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, 
                             GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, 
                            GL_TEXTURE_WRAP_S, GL_REPEAT);
    glTexParameteri(GL_TEXTURE_2D, 
                             GL_TEXTURE_WRAP_T, GL_CLAMP);
    glEnable(GL_BLEND);
    glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);
    glEnable(GL_LIGHTING);
    glBegin(GL_TRIANGLE_STRIP);
    ...glVertex...glTexCoord2f...
    glEnd();
    glDisable(GL_TEXTURE_2D);
    Au final, je me retrouve avec des polygones uniformément blanc, et ça me chagrinne beaucoup depuis plus d'une demi-journée maintenant....

    Merci d'avance pour votre aide,

    Audrey

  2. #2
    Membre émérite
    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 : 44
    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
    Points : 2 568
    Points
    2 568
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for(int i=0; i<h; i++)
       for(int j=0; j<l; j++){
           buffer[i*l+j] = 0x00;
           buffer[i*l+j+1] = 0xFF;
           buffer[i*l+j+2] = 0x00;
           buffer[i*l+j+3] = 0x0F;}
    Ce n'est pas bon.... erreur classique, je l'ai fait a mainte reprise.


    essaye avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    UCHAR *pt_buffer=buffer;
    for(int i=h*l; i--;)
    {
      *(pt_buffer++) = 0x00;
      *(pt_buffer++) = 0xFF;
      *(pt_buffer++) = 0x00;
      *(pt_buffer++) = 0x0F;
    }
    plus propre, optimisé, sans erreur... (si je suis bien réveillé )

    EDIT:

    évolue en ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsigned char * buffer =
    évolue en ->
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     #define UCHAR unsigned char 
    UCHAR* buffer =

  3. #3
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut glIsTexture renvoie GL_FALSE
    Je viens de constater avec glIsTexture que textureId est invalide. Pourtant, j'ai vérifié que je n'appelais pas glGenTextures entre glBegin et glEnd... C'est vraiment bizarre. Quelqu'un a une idée...?

    Merci,

    Audrey

  4. #4
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Hello Ti-R,

    Merci de ton aide, effectivement, je n'avais pas vu cette erreur. Hélas, j'ai bien peur qu'il en reste... en remplaçant mon code par le tien, je n'obtiens toujours que des polygones non texturés. C'est très frustrant!!!

    Je vous tiens au courant si je viens à bout de cette tuile...

    Audrey

  5. #5
    Expert éminent sénior

    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 : 43
    Localisation : Etats-Unis

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

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Es-tu sûr d'avoir un glEnable(GL_TEXTURE_2D) avant ta génération de texture ?

    Sinon, poste un code minimal exposant le problème (et compilable),
    Jc

  6. #6
    Membre émérite
    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 : 44
    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
    Points : 2 568
    Points
    2 568
    Par défaut
    Question bête... Tu as bien placé des coordonnées de texture partout (vérifie que ce n'est pas a null les valeurs) ?

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    le code de generation des textures est bien appelé APRES avoir crée la fenetre openGL ?
    * 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

  8. #8
    Membre actif Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Points : 242
    Points
    242
    Par défaut
    Ca sent l'exemple du Red Book à plein nez...

    Jetes un coup d'oeil au livre pour voir si tout est bon.
    • Awesome dude ! R0FLC0PT3R !!!!11!ONE!!!
    • There's no place like 127.0.0.1

  9. #9
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut Comportement différent d'un PC à l'autre!
    Hello,

    Je travaille sur un programme C++/OpenGL sous cygwin. J'ai un PC portable chez moi, et un autre au boulot. Le premier est un ACER de processeur 1.5Ghz avec un carte ATI Gforce 9700, l'autre est un DELL de processeur 2Ghz avec une carte NVIDIA. Bref, tout ça n'a probablement rien à voir, mais toujours est il que le même programme (exactement le même je jure!) affiche les textures sur le DELL et pas sur le ACER! Pourtant, il les chargent bien dans les deux cas... (ça n'est pas un pb de droit d'accès).

    S'il vous plaît, donnez moi juste quelques idées en l'air qui pourraient me donner des pistes pour débugger ça...

    Merci et @+

    Audrey

  10. #10
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut
    Merci pour votre aide les gens... j'ai vérifié tout ça, mais rien à faire. Tout semble être en place et j'ai même constaté quelque chose d'étrange... Le même code fonctionne sur mon PC au boulot, et toujours pas chez moi où les textures ne s'affichent pas. Je vous renvoie au post que je viens de faire sous la thématique OpenGL pour plus de détails: "Comportement différents sur deux PC"... Je sais que ça semble hyper super bizarre, mais je vous jure qu'il s'agit du même code, alors si vous avez des pistes à investiguer, soumettez s'il vous plaît!!!!

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Sujets fusionnés, merci de ne pas éparpiller le même problème sur plusieurs discussions.

    Textures non puissances de 2 ?

    Bon et sinon conseil habituel : les drivers sont-ils à jour ?

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par Teapot
    Le premier est un ACER de processeur 1.5Ghz avec un carte ATI Gforce 9700
    et
    Citation Envoyé par Teapot
    l'autre est un DELL de processeur 2Ghz avec une carte NVIDIA.
    [ME : sifflote] non je ne dirai rien, non je ne dirai rien, non je ne critiquerai pas les drivers ATI, non, je ne le ferai pas... zut trop tard
    Citation Envoyé par Teapot
    Bref, tout ça n'a probablement rien à voir, mais toujours est il que le même programme (exactement le même je jure!) affiche les textures sur le DELL et pas sur le ACER! Pourtant, il les chargent bien dans les deux cas... (ça n'est pas un pb de droit d'accès).
    il faut savoir que les drivers ATI ont parfois des comportement... etranges (la dernières en date : les float buffer ATI qui marche super bien sur une GeForce quadro masi pas sur une Radeon1900XT ).
    je vais essayer de faire une liste des trucs à assayer :
    - Bien initialiser tout les etats possible et inimaginables de tes textures (pas de blending, mode modulate et autre)
    - mettre la couleur à blanc avant d'afficher les textures
    - ne pas afficher les textures (pour voir si la geometrie est bien affichée, bon a priori tu les voit, mais fait le test quand même, parfois on a des surprises)
    - utiliser les coordonnées de textures en fonction de la dimension de la texture (texture 1D => glTexCoord1f, texture 2D => glTexCoord2f etc...) ca peut sembler idiot, mais j'ai déjà eut des problèmes sur ATI en ne passant qu'une coordonnée de texture pour une texture 2D
    - tu utilise des mip map, essaye de changer de filtrage (un petit GL_NEAREST partout pour voir)
    - tu utilise deux modes de clamping different sur S et T, essaye avec le même
    - desactive la lumière

    bref, voila toute une batterie de test à essayer pour trouver d'ou vient le problème. Le but etant de desactiver un maximum d'effets au fur et à mesure pour isoler le problème...
    * 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

  13. #13
    Membre actif Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Points : 242
    Points
    242
    Par défaut
    C'est vraiment étrange ces effets de bord.
    Ca m'est déjà arrivé aussi sur Linux lors de l'initialisation d'OpenGL... Mais sur Linux, quand on connait la qualité des drivers ATI...
    Ca marchait parfaitement avec une NVidia, mais avec une ATI rien à faire, et ce dans tous les cas de figures !
    J'ai toujours pas trouvé le problème...

    Au passage:
    ATI Gforce 9700
    Si seulement... Mais c'est plutôt ATI Radeon 9700

    Sinon j'aurais juste une chose à rajouter par rapport à ce qu'à déjà dit bafman: vérifie bien les extensions OpenGL si tu les utilises, et comment tu les utilises.


    En tout cas une chose est sûre: si ça marche sur une ATI, c'est que ton prog fonctionnera partout
    • Awesome dude ! R0FLC0PT3R !!!!11!ONE!!!
    • There's no place like 127.0.0.1

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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    Citation Envoyé par Sixissor
    En tout cas une chose est sûre: si ça marche sur une ATI, c'est que ton prog fonctionnera partout
    il existe pire que les cartes ATI... il existe les cartes Intel
    * 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

  15. #15
    Membre émérite
    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 : 44
    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
    Points : 2 568
    Points
    2 568
    Par défaut
    Citation Envoyé par bafman
    il existe pire que les cartes ATI... il existe les cartes Intel
    +1 par exemple des textures compressés S3TC

  16. #16
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Héhé je développe sur Intel à la maison et sur ATI au boulot... Je suis blindé

    Bon à part ça évitons quand même de trop dévier du sujet

  17. #17
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Citation Envoyé par Laurent Gomila
    Héhé je développe sur Intel à la maison et sur ATI au boulot... Je suis blindé

    Bon à part ça évitons quand même de trop dévier du sujet
    Mais c'est très bien ATi ! Ma vieille 9800 Pro a toujours bien fonctionner (c'était l'âge d'or d'ATi les 9700 Pro - 9800 Pro ^^, nVidia était dnas les choux sur cette génération).

  18. #18
    Membre actif Avatar de Sixissor
    Étudiant
    Inscrit en
    Février 2006
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 206
    Points : 242
    Points
    242
    Par défaut
    Citation Envoyé par Bakura
    Mais c'est très bien ATi ! Ma vieille 9800 Pro a toujours bien fonctionner (c'était l'âge d'or d'ATi les 9700 Pro - 9800 Pro ^^, nVidia était dnas les choux sur cette génération).
    J'avais aussi une 9800 Pro jusqu'à ce que le ventilateur ait décidé de "partir" littéralement
    Evidemment je m'en suis aperçu quand mon ordi rebootait sans cesse et quand mon affichage était aussi beau et détaillé qu'une Game Boy old school...
    Résultat: en fait ma carte avait tellement chauffé que ça avait commencé à fondre...

    PS: depuis j'ai une Nvidia et tout roule
    • Awesome dude ! R0FLC0PT3R !!!!11!ONE!!!
    • There's no place like 127.0.0.1

  19. #19
    Rédacteur
    Avatar de Bakura
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    1 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 386
    Points : 2 640
    Points
    2 640
    Par défaut
    Citation Envoyé par Sixissor
    J'avais aussi une 9800 Pro jusqu'à ce que le ventilateur ait décidé de "partir" littéralement
    Evidemment je m'en suis aperçu quand mon ordi rebootait sans cesse et quand mon affichage était aussi beau et détaillé qu'une Game Boy old school...
    Résultat: en fait ma carte avait tellement chauffé que ça avait commencé à fondre...

    PS: depuis j'ai une Nvidia et tout roule
    En même temps, un PC ça se nettoie des fois . C'est sûr que si j'aurais jamais dépoussieré, mes ventilos auraient été,... littéralements couverts de poussières !

  20. #20
    Futur Membre du Club
    Inscrit en
    Avril 2005
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 17
    Points : 6
    Points
    6
    Par défaut J'ai La Solussssss!!!!
    Et oui, il ne faut jamais désespérer... :
    Il faut s'assurer que les dimensions de la textures sont bien des puissances de 2!!!
    Merci pour tout les gens, et j'espère que ma mésaventure sera utile à d'autre!!

Discussions similaires

  1. Objet en GL_TRIANGLES et placage de texture
    Par themoye dans le forum OpenGL
    Réponses: 4
    Dernier message: 27/08/2009, 14h19
  2. [opengl] probleme d artefact au placage des textures
    Par ubenz dans le forum Moteurs 3D
    Réponses: 0
    Dernier message: 07/11/2008, 12h23
  3. placage de textures
    Par xelif dans le forum Moteurs 3D
    Réponses: 2
    Dernier message: 17/04/2008, 22h17
  4. Réponses: 5
    Dernier message: 18/12/2006, 17h02
  5. prob de placage de texture en 2d
    Par lordheavy dans le forum OpenGL
    Réponses: 3
    Dernier message: 15/08/2006, 23h03

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