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 :

Raccord de textures, problème avec cartes NVidia


Sujet :

OpenGL

  1. #1
    Invité(e)
    Invité(e)
    Par défaut Raccord de textures, problème avec cartes NVidia
    Bonjour,

    J'utilise aujourd'hui OpenGL pour afficher des images 2D.
    Pour cela, je charges l'image dans des textures, je dessine des QUAD et le tour est joué.

    Cela fonctionne sans aucun problème sur des cartes INTEL ou ATI, mais sur des cartes NVidia, j'observe des lignes sombres sur mon image à l'endroit de la jointure entre deux textures.

    Avez vous une solution / un début d'explication à ce problème ?

    Merci d'avance.

  2. #2
    Expert confirmé

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 382
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 382
    Points : 4 937
    Points
    4 937
    Par défaut
    au niveau des paramètres pour les bordures, tu as mis quoi? (genre GL_CLAMP_TO_EDGE ou autre)

  3. #3
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Un peu de code serai préfferrable ( surtout le code pour l'initialisation de la texture).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  4. #4
    Invité(e)
    Invité(e)
    Par défaut
    Re,


    Voici la manière dont sont générées les textures :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
    glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
    /* m_patch est recyclée pour chaque texture. */
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, m_width, m_height,
                 0, GL_RGB, GL_UNSIGNED_BYTE, m_patch);
    et affichées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    glBegin(GL_QUADS);
    glTexCoord2f(0,0); glVertex2f(0, 0);
    glTexCoord2f(1,0); glVertex2f(1, 0);
    glTexCoord2f(1,1); glVertex2f(1, 1);
    glTexCoord2f(0,1); glVertex2f(0, 1);
    glEnd();
    /* et la seconde */
    glBegin(GL_QUADS);
    glTexCoord2f(0,0); glVertex2f(1, 0);
    glTexCoord2f(1,0); glVertex2f(2, 0);
    glTexCoord2f(1,1); glVertex2f(2, 1);
    glTexCoord2f(0,1); glVertex2f(1, 1);
    glEnd();
    Dernière modification par Invité(e) ; 30/04/2010 à 10h44.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 32
    Points : 41
    Points
    41
    Par défaut
    Bonjour,

    L'effet que vous décrivez vient vraissemblablement d'une mauvaise interpolation entre les valeurs. Le GL_CLAMP est peut etre responsable.
    Y-a t'il encore un problème en mettant GL_CLAMP_TO_EDGE ?

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 858
    Points : 218 577
    Points
    218 577
    Billets dans le blog
    120
    Par défaut
    Il serai aussi interessant d'avoir un screen shot
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    En général cela pointe une mauvaise compréhension de la façon dont sont rasterisé les triangles texturés (problème assez commun de ceux qui viennent de la 2D avec coordonnées entières et qui pensent que la 3D c'est pareil):

    L'écran d'affichage est un espace continu (tout du moins flottant ou précision fixe suivant l'implémentation), la prise d'échantillons est à intervalles réguliers (tous les pixels), la couleur choisie dépend à la fois de la position dans le triangle et la façon dont sont interpolés les attributs de ton triangle (en particulier les coordonnées de texture).

    En gros si l'extremité A de ton triangle a pour coordonnée de texture tA, l'extrémité B de ton triangle a pour coordonnée de texture tB, alors si la carte graphique prend un échantillon à mi chemin exactement de A et B alors la coordonnée de texture sera à cet échantillon (et dans le fragment/program/pixel/shader qui en résultera) à tA + tB / 2 (interpolation linéaire des coordonnées de texture). Maintenant cette coordonnée de texture fait référence à des texels dans une surface 2D. Mais tout comme l'espace de ton écran, l'espace de ta texture est continu. Donc ta coordonnée de texture calculée plus haut peut tomber à un endroit où la carte graphique considère que quatre texels proches sont mis à contribution (filtrage bilinéaire de texture).

    Bref, pour avoir une meilleure idée de ton problème, il faudrait savoir quelle est la taille des quads, à quoi correspondent (dans l'espace écran) les coordonnées données, et quelle taille ont les textures utilisées, ce qui donnera une idée s'il y a un bon alignement ou pas.. Et s'il peut y avoir un zoom arbitraire ou rescaling, l'alignement parfait est souvent impossible donc il faut faire des compromis ou trouver des moyens d'améliorer les jointures comme utiliser des bordures ou simplement dupliquer une partie de l'info de la texture N sur la texture précédente qui la borde.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  8. #8
    Invité(e)
    Invité(e)
    Par défaut
    Problème résolu sur certaines cartes graphiques :

    Pour voir le problème disparaitre, il suffit d'aller dans les options avancées de la carte graphique et de passer l'option
    Conformant Texture Clamp à off (au lieu de hardware ou OpenGL Spec)

    @leGreg, @LittleWhite et @Idwakest
    Désolé, j'ai complètement zappé vos message.
    Je vais tenter de me rattraper :

    GL_CLAMP_TO_EDGE : je pense que c'est ce que je cherche, mais je n'ai qu'une vielle OpenGL 1.1, donc pas possible.

    Les screenShoots :

    Nom : pb.png
Affichages : 95
Taille : 78,9 Ko
    Conformant texture clamp à Hardware
    Nom : nopb.png
Affichages : 99
Taille : 67,4 Ko
    Conformant texture clamp à Off

    Et historiquement, je suis passé de glDrawPixels aux textures. Pour une utilisation facile de glDrawPixels, chaque pixel image correspond à 1, 4 ou 16 pixels écrans (zoom de facteur 1, 2 ou 4). Les textures on la même apparence aujourd'hui, donc, a priori, on devrait tomber juste.

  9. #9
    Invité(e)
    Invité(e)
    Par défaut GLOverRide mon ami
    GLOverride est une autre solution à mon problème.

    Il change automatiquement les GL_CLAMP en GL_CLAMP_TO_EDGE à l'exécution.

    On peut le trouver là :
    www.humus.name/index.php?page=Cool

    Merci encore à tous ceux qui ont pris le temps de me lire

  10. #10
    Membre expérimenté

    Profil pro
    Programmeur
    Inscrit en
    Août 2002
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Programmeur

    Informations forums :
    Inscription : Août 2002
    Messages : 1 091
    Points : 1 679
    Points
    1 679
    Par défaut
    Citation Envoyé par mabu Voir le message
    GLOverride est une autre solution à mon problème.

    Il change automatiquement les GL_CLAMP en GL_CLAMP_TO_EDGE à l'exécution.

    On peut le trouver là :
    www.humus.name/index.php?page=Cool

    Merci encore à tous ceux qui ont pris le temps de me lire
    Ce ne sont vraiment pas de bonne solutions. Le control panel override et le GL override sont des outils pour les *Utilisateurs* de programmes OpenGL : c'est à dire que c'est utile pour les programmes qui sont mal programmés (hors spec) mais dont l'auteur n'assure plus le support.

    Mais toi tu es le *programmeur* de ce programme, donc c'est à toi de modifier ton programme, tes paramètres ou tes coordonnées de textures pour que ça colle avec ce qui est défini comme la spec.

    LeGreg

    Mon site web | Mon blog | Mes photos | Groupe USA
    > BONJOUR, JE SUIS NOUVEAU SUR CE FORUM
    > presse la touche caps lock, stp
    > OH.. MERCI C EST BEAUCOUP PLUS FACILE COMME CA

  11. #11
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par LeGreg Voir le message
    Mais toi tu es le *programmeur* de ce programme, donc c'est à toi de modifier ton programme, tes paramètres ou tes coordonnées de textures pour que ça colle
    Je suis tout à fait d'accord. Cela dis, en plus d'une solution propre, il me faut une solution d'urgence pour des utilisateurs distants pressés et loin.

    Sinon, pour reprendre le problème, ( je transpose le problème en 1D)
    Les textures sont de taille 128.
    Les coordonnées textures sont 0 et 1.
    Les quads vont de 0 à 128, puis de 128 à 256 et ainsi de suite.

    En zoom x1, tout va bien (un quad sur 128 pixels écran) en x2, les lignes peuvent apparaitre (mais seulement sur les machines client, bien sur).


    Citation Envoyé par LeGreg Voir le message
    avec ce qui est défini comme la spec.
    La quoi ? Ah le post-it.
    En fait les spec ne sont pas vraiment légion là où je suis. Pas plus que les architectures sur lesquels le soft doit fonctionner... Donc on bricole, on bidouille. L'important est que le truc fonctionne pendant le démo.

Discussions similaires

  1. [Carte Ethernet] Problème avec carte Marvell Yukon
    Par Thurim dans le forum Composants
    Réponses: 4
    Dernier message: 27/01/2009, 19h52
  2. Réponses: 4
    Dernier message: 08/04/2008, 11h42
  3. Textures : problème avec glBindTexture
    Par Xander51 dans le forum OpenGL
    Réponses: 14
    Dernier message: 24/05/2007, 02h52
  4. problème avec carte graphique
    Par yasinfo dans le forum Composants
    Réponses: 4
    Dernier message: 02/05/2007, 09h09
  5. Module GLX avec carte nvidia sous Feodra core 5
    Par Invité4 dans le forum Matériel
    Réponses: 8
    Dernier message: 02/05/2006, 17h32

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