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 :

Coordonnées texture & mipmap


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Par défaut Coordonnées texture & mipmap
    Bonjour,

    J'ai un modèle 3D dans un fichier (format du fichier: MD5) dont les coordonnées texture sont comprises entre [0.0 et 1.0].
    Quand je tente d'afficher ce modèle, j'ai quelques artifacts sont les bords.

    Si j'ai bien comris, c'est parce que les coordonées texture doivent se trouver entre [0.5/N et 1.0-(0.5/N)] où N est la taille de la texture.
    J'ai donc appliqué cette transformation linéaire à mes coordonnées de texture pour me retrouver dans l'intervalle OpenGL: newCoordUV = coordUV * ((N-1)/N) + (0.5/N).

    Malheureusement, j'ai encore des artifacts mais moindre. Est-ce que j'ai raison d'appliquer cette formule ?
    Est-ce que tout cela fonctionne encore bien pour les textures mipmap ? En effet ma formule se base sur la taille de texture d'origine et non sur les mipmaps !

    Merci d'avance.

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 035
    Billets dans le blog
    12
    Par défaut
    Salut!

    As-tu une capture d'écran de ces artefacts?
    Je n'ai jamais eu à faire cette transformation linéaire, mes coordonnées de texture sont entre 0.0 et 1.0.
    As-tu essayé en changeant le wrapping mode? (paramètres GL_TEXTURE_WRAP_i de glTexParameteri)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Par défaut
    Hello,

    Merci pour votre réponse.
    Difficile de faire un screenshot bien clair. Ici on peut voir une très fine ligne noire: https://drive.google.com/file/d/0B7D...VYVVpPTEk/view

    J'utilise GL_TEXTURE_WRAP_S/T = GL_REPEAT. J'ai déjà essayé de mettre GL_CLAMP_TO_EDGE et je n'ai plus de problème d'artifact. Cette solution ne m'arrange pas vu que j'ai certains modèles ou partie de modèle où j'ai besoin de faire un repeat de texture.
    Comme indiqué par la doc: GL_CLAMP_TO_EDGE va clamper entre [0.5/N et 1-(0.5/N)]. C'est ce que je fait avec ma formule mais ça ne donne pas le même résultat !

  4. #4
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 035
    Billets dans le blog
    12
    Par défaut
    Je te conseille de configurer un sampler object avec GL_CLAMP_TO_EDGE, et un autre avec GL_REPEAT, et en fonction de l'objet que tu dessines, tu utilises le sampler object qui va bien.
    Tiens, de la documentation sur les sampler objects: https://www.opengl.org/wiki/Sampler_Object
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2006
    Messages
    396
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2006
    Messages : 396
    Par défaut
    Ok mais je me demande si le résultat est correcte avec GL_CLAMP_TO_EDGE ?

    Exemple:
    - J'ai une coordonnée à 1.0. Avec GL_CLAMP_TO_EDGE, la valeur va être clampé à 1.0-(0.5/1024) pour une texture de 1024x1024 => 0.99951171875
    - J'ai une coordonnée à 0.99951171875. Avec GL_CLAMP_TO_EDGE, on ne va pas clamper vu que la valeur est déjà comprise l'intervalle.
    Donc, à partir de deux coordonnées différentes, on arrive au même résultat => petite erreur à l'affichage ?

  6. #6
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Software Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 035
    Billets dans le blog
    12
    Par défaut
    En fait, GL_CLAMP_TO_EDGE et GL_CLAMP_TO_BORDER interviennent si le coordonnées de texture dépassent l'intervalle [1/2N, 1-1/2N].
    Pour GL_CLAMP_TO_EDGE, la couleur des points pour lesquels les coordonnées de texture dépasseront cet intervalle, sera prise sur les bords de la texture.
    Pour GL_CLAMP_TO_EDGE, la couleur des points pour lesquels les coordonnées de texture dépasseront cet intervalle, sera prise dans la couleur définie avec GL_TEXTURE_BORDER_COLOR.

    Mais ça n'explique théoriquement pas ton soucis, sachant que tu clampes les coordonnées de texture toi-même.
    Peut-on voir l'image de la texture concernée?
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

Discussions similaires

  1. 3D Coordonnées Texture 2D et sphère, Intéractivité
    Par jolann69 dans le forum Windows Presentation Foundation
    Réponses: 6
    Dernier message: 04/04/2008, 11h13
  2. Coordonnées de texture 'en live'
    Par KnightCoder dans le forum DirectX
    Réponses: 8
    Dernier message: 30/08/2007, 17h28
  3. Réponses: 6
    Dernier message: 28/11/2006, 19h12
  4. Textures résidentes et coordonnées
    Par f56bre dans le forum Développement 2D, 3D et Jeux
    Réponses: 1
    Dernier message: 23/10/2006, 01h35
  5. Index et coordonnées de texture
    Par atalmapi dans le forum DirectX
    Réponses: 3
    Dernier message: 15/03/2005, 01h02

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