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 "rayées" ?


Sujet :

OpenGL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut Textures "rayées" ?
    Voilà dans une application OpenGL j'applique une texture .TGA 32bits sur une surface, mais on voit une rayure sur les textures... une rayure qui fait toute la diagonale de la surface, et ça me fais ça avec toutes mes textures .TGA (elle sont réalisées avec photoshop CS)
    --

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    et au passage, un problème qui m'a l'air tout con:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    glColor3f(0.6, 0.3, 0.1);
    glRasterPos2f(-2, -2);
    glPrint();
    peut importe ce que je passe comme paramètre à glColor, le texte s'affiche en noir

    personne n'aurait une idée de quoi ça peut provenir?
    --

  3. #3
    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
    pour le tga, verifie que tes tga soit bien chargé au niveau du nombre de bit par pixel.
    en gros il faut pas charger en GL_RGBA si ils sont en 24bpp et en GL_RGBA si ils sont en 32 bpp

    poue la couleur, verifie que tu a bien desactiver l'eclairage. Si l'eclairage est activé, c'est lui qui envoi la couleur de chaque vertex et non plus glColor
    * 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

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Pour la création de texture j'utilise:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      if (Format = GL_RGBA) then
        gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, Width, Height, GL_RGBA, GL_UNSIGNED_BYTE, pData)
      else
        gluBuild2DMipmaps(GL_TEXTURE_2D, 3, Width, Height, GL_RGB, GL_UNSIGNED_BYTE, pData);
    sachant que Format est récupéré dans le header du TGA.
    alors à moins que des textures RGBA soient "vues" comme des RGB, je vois pas trop...

    et pour la couleur, j'ai beau mettre un glDisable() pour toutes les lumières avant le glColor, ça reste affiché en noir...
    --

  5. #5
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    ca doit venir de ta fonction d'affichage (QUADS ou TRIANGLES) ki affich les contours des polygones (le wireframe)

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    ouais, pour la "rayure" ça parait bien possible que ce soit ça. mais je n'ai pourtant rien activé qui puisse expliquer ça (wireframe etc...).

    les surfaces sur lesquelles j'applique ma texture sont des quads, et je fais ça de cette façon:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    glPushMatrix();
      glTranslatef(0.0, 1.5, 0.0);
      glEnable(GL_BLEND);
      glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
      glBindTexture(GL_TEXTURE_2D, textures[TEX_TITRE]);
      glBegin(GL_QUADS);
        glNormal3f( 0.0, 0.0, 1.0);
        glTexCoord2f(0.0, 1.0); glVertex3f(-2.5, -1.5,  0.0);
        glTexCoord2f(1.0, 1.0); glVertex3f( 2.5, -1.5,  0.0);
        glTexCoord2f(1.0, 0.0); glVertex3f( 2.5,  1.5,  0.0);
        glTexCoord2f(0.0, 0.0); glVertex3f(-2.5,  1.5,  0.0);
      glEnd();
      glDisable(GL_BLEND);
    glPopMatrix();
    --

  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
    est ce que tu utilise les ligne smooth ?
    en fait il ne faut surtout pas les utiliser car ca paut provoquer des merde au intersections des polygones...
    * 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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 34
    Points
    34
    Par défaut
    pour le texte -> as tu desactive l'utilisation de texture (glDisable(GL_TEXTURE_2D) )
    Pour la rayure : dans le doute active le clamping

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    glDisable(GL_TEXTURE_2D);
    glColor3f(0.6, 0.3, 0.1);
    glRasterPos2f(-2, -2);
    glPrint();
    glEnable(GL_TEXTURE_2D);
    et maintenant, le texte est toujours en bleu
    peut importe ce que je passe à glColor, et il n'y a aucun appel à glColor dans glPrint()....
    --

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    En fait mon glInit ressemble à ça:
    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
    23
    procedure glInit();
    begin
      glClearColor(0.0, 0.0, 0.0, 0.0);
      glEnable(GL_TEXTURE_2D);
      glShadeModel(GL_SMOOTH);
      glEnable(GL_POLYGON_SMOOTH);
      glEnable(GL_CULL_FACE);
      glClearDepth(1.0);
      glEnable(GL_DEPTH_TEST);
      glDepthFunc(GL_LEQUAL);
      glLightfv(GL_LIGHT0, GL_AMBIENT, @LightAmbient);
      glLightfv(GL_LIGHT0, GL_DIFFUSE, @LightDiffuse);
      glLightfv(GL_LIGHT0, GL_POSITION,@LightPosition);
      glEnable(GL_LIGHTING);
      glEnable(GL_LIGHT0);
      glEnable(GL_COLOR_MATERIAL);
      glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
      glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
      LoadAllTextures();
      LoadObjects();
      LoadArena();
      BuildFont;
    end;
    et pour glShadeModel(GL_SMOOTH) et glEnable(GL_POLYGON_SMOOTH), avec ou sans ces lignes, le problème des rayures reste...

    PS: si j'ai fais des conneries dans l'init, n'hésitez pas à m'en faire part!
    --

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par Bourriko
    Pour la rayure : dans le doute active le clamping
    ça sert à quoi déjà le clamping?
    et tu l'actives comment? (oui, là tout de suite, j'ai vraiment la flemme de chercher... )
    --

  12. #12
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    30
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 30
    Points : 34
    Points
    34
    Par défaut
    Salut,

    soit GL_CLAMP ou GL_CLAMP_TO_EDGE
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Ok, je vais essayer ça.

    Mais ça sert à quoi concrêtement?
    Et c'est quoi la différence entre GL_TEXTURE_WRAP_S, et GL_TEXTURE_WRAP_T ?
    Merci

    PS: Dslé je vais être absent pendant un peu plus d'une semaine, donc n'attendez plus de réponses de ma part d'ici là.
    --

  14. #14
    Membre du Club
    Inscrit en
    Janvier 2004
    Messages
    40
    Détails du profil
    Informations forums :
    Inscription : Janvier 2004
    Messages : 40
    Points : 48
    Points
    48
    Par défaut
    ca c juste pr les bords de te texture en repeat la texture sera repetée si les coords depassent 1 en clamp c le dernier pixel ki le sera pr des textures (ki doivent se repeter donc) utilises repeat et pour des images clamp (ca evitera les effets du filtre sur les bords)

  15. #15
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Quand tu utilises le mipmapping, si tu ne veux pas de rayures entre les textures de différentes formes, il faut activer le filtre anysotropic.

    Mais je ne suis pas certain que ce soit ton problème...
    Хајде Јано коло да играмо

  16. #16
    Membre chevronné Avatar de Jbx 2.0b
    Homme Profil pro
    Développeur C++/3D
    Inscrit en
    Septembre 2002
    Messages
    476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur C++/3D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2002
    Messages : 476
    Points : 1 785
    Points
    1 785
    Par défaut
    Quand j'ai changé de drivers pour ma carte graphique (GF4) j'ai eu un probléme un peu comme le tien avec des délimitations entre les polygones, et j'avais resolu le probléme en remplaçant GL_CLAMP par GL_CLAMP_TO_EDGE.

    shift.net a écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    glDisable(GL_TEXTURE_2D); 
    glColor3f(0.6, 0.3, 0.1); 
    glRasterPos2f(-2, -2); 
    glPrint(); 
    glEnable(GL_TEXTURE_2D);
    bafman a écrit :

    poue la couleur, verifie que tu a bien desactiver l'eclairage. Si l'eclairage est activé, c'est lui qui envoi la couleur de chaque vertex et non plus glColor
    je suis d'accord, ça sa devrait marcher :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    glDisable(GL_LIGHTING);
    glDisable(GL_TEXTURE_2D); 
    glColor3f(0.6, 0.3, 0.1); 
    glRasterPos2f(-2, -2); 
    glPrint(); 
    glEnable(GL_TEXTURE_2D);
    glEnable(GL_LIGHTING);
    +

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 58
    Points : 48
    Points
    48
    Par défaut
    Bon, le problème est réglé, mais je sais pas comment j'ai fait...

    J'avais laissé tomber pour m'occuper du reste de mon projet, et puis quand je suis revenu dessus, j'ai remarqué que les "rayures" n'existaient plus.
    --

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

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