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

DirectX Discussion :

[Texture]Bug affichage de texture, qui est dépendant d'un paramètre de chargement


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut [Texture]Bug affichage de texture, qui est dépendant d'un paramètre de chargement
    Bonjour, je charge un PNG de 48x48 pixels de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ImageInformation l_imageInformation = new ImageInformation();           
    Texture = TextureLoader.FromFile(m_device, location, 0, 0, 0, Usage.None, Microsoft.DirectX.Direct3D.Format.A8R8G8B8, Pool.Managed, Filter.None, Filter.None, 0, ref l_imageInformation);
    Je l'affiche ensuite sur un quad de la façon suivante:

    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
    24
                m_textureVertices[0].X   = 0;
                m_textureVertices[0].Y   = 0;
                m_textureVertices[0].Tu = 0;
                m_textureVertices[0].Tv = 0;
     
                m_textureVertices[1].X   = 100;
                m_textureVertices[1].Y   = 0;
                m_textureVertices[1].Tu = 1.0;
                m_textureVertices[1].Tv = 0;
     
                m_textureVertices[2].X   = 0;
                m_textureVertices[2].Y   = 100;
                m_textureVertices[2].Tu = 0;
                m_textureVertices[2].Tv = 1.0;
     
                m_textureVertices[3].X   = 100;
                m_textureVertices[3].Y   = 100;
                m_textureVertices[3].Tu = 1.0;
                m_textureVertices[3].Tv = 1.0;
     
                m_device.SetTexture(0, Texture);
                m_device.VertexFormat = CustomVertex.TransformedTextured.Format; 
                m_device.DrawUserPrimitives(PrimitiveType.TriangleStrip, 2, m_textureVertices); 
                m_device.SetTexture(0, null);
    Si je dessine un rectangle,
    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
    			m_rectangleVertices[0].X = 0;
    			m_rectangleVertices[0].Y = 0;
    			m_rectangleVertices[0].Color = Color.Blue.ToArgb();
    			m_rectangleVertices[1].X = 100;
    			m_rectangleVertices[1].Y = 0;
    			m_rectangleVertices[1].Color = Color.Blue.ToArgb();
    			m_rectangleVertices[2].X = 100;
    			m_rectangleVertices[2].Y = 100;
    			m_rectangleVertices[2].Color = Color.Blue.ToArgb();
    			m_rectangleVertices[3].X = 0;
    			m_rectangleVertices[3].Y = 100;
    			m_rectangleVertices[3].Color = Color.Blue.ToArgb();
    			m_rectangleVertices[4].X = 0;
    			m_rectangleVertices[4].Y = 0;
    			m_rectangleVertices[4].Color = Color.Blue.ToArgb();
     
    			m_device.VertexFormat = CustomVertex.TransformedColored.Format;
    			m_device.DrawUserPrimitives(PrimitiveType.LineStrip, 4, m_rectangleVertices);
    Et je ne comprends pas pourquoi la texture n'occupe pas la totalité du rectangle 100x100, alors qu'elle est censé le faire.

    Le comble, c'est que quand je charge la texture de la façon suivante (avec l'option Filter.Linear plutot que Filter.None):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ImageInformation l_imageInformation = new ImageInformation();           
    Texture = TextureLoader.FromFile(m_device, location, 0, 0, 0, Usage.None, Microsoft.DirectX.Direct3D.Format.A8R8G8B8, Pool.Managed, Filter.Linear, Filter.None, 0, ref l_imageInformation);
    ca marche correctement !

    Idem, ca marche bien aussi si j'utilise Sprite.Draw2D(...), sans l'option Linear.
    Ca marche bien aussi si je charge un .bmp sans l'option Linear.

    une idée ?

    D'avance merci

  2. #2
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Tu peux commencer par ça :
    http://jeux.developpez.com/faq/direc...LEMES_probleme

    Et quelles sont les dimensions de ton image ?

  3. #3
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Salut,

    la FAQ des pbs directX est intéressante, mais n'apporte aucune réponse concernant mon cas.

    l'image fait 48x48 pixels, c'est un png, et je veux l'afficher sur un quad de 100x100

  4. #4
    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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    la FAQ des pbs directX est intéressante, mais n'apporte aucune réponse concernant mon cas
    Ca veut dire que le debug runtime ne te sort ni avertissement ni erreur ? Que le problème persiste avec le reference rasterizer ? Qu'aucune de tes fonctions DirectX n'échoue ?

    l'image fait 48x48 pixels
    Et avec une de 64x64 par exemple ?

  5. #5
    Membre éclairé
    Homme Profil pro
    Création de jeux video (en amateur)
    Inscrit en
    Mars 2003
    Messages
    408
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Cantal (Auvergne)

    Informations professionnelles :
    Activité : Création de jeux video (en amateur)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 408
    Par défaut
    Citation Envoyé par Laurent Gomila
    Ca veut dire que le debug runtime ne te sort ni avertissement ni erreur ? Que le problème persiste avec le reference rasterizer ? Qu'aucune de tes fonctions DirectX n'échoue ?
    C'est tout à fait ca, pas d'erreurs. Du pur Lessieur.

    Alors effectivement, entre temps, j'ai fait des tests avec des textures de 32x32, 64x64 et 65x65. Et apparemment si on met Filter.None dans la fonction de chargement, il va créer une surface de taille toujours en puissance de 2, tandis qu'avec Filter.Linear il va prendre la taille exacte de l'image.

    Le problème c'est que quand on le mappe sur le quad, il tient compte de la taille de la surface et pas la taille de l'image qu'elle contient.

    Ca ne serait pas trop un problème si on avait moyen d'interroger la surface pour connaitre la taille en puissance de 2 qui lui a été affectée.

    Mais le mieux ca serait un directive qui fasse prendre en compte la taille réelle de l'image à la fonction DrawUserPrimitive.

    Bref, comment faire ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 91
    Par défaut
    Je pense avoir le même problème avec comme différence que j'ai un vilain effet de tiling non désiré (la couche de pixel du bord droit est recopié à gauche, et même pb dans le sens vertical).
    Parcontre, le chargement en mode linéaire (comme tu l'as suggéré) ne résout pas le pb.

    est ce que tu as trouvé une solution à ton problème ?

Discussions similaires

  1. Textures tga/affichage
    Par seeme dans le forum OpenGL
    Réponses: 2
    Dernier message: 20/02/2006, 11h30
  2. Textures et affichage
    Par batosai dans le forum DirectX
    Réponses: 2
    Dernier message: 06/12/2005, 21h07
  3. Pas d'affichage de texture sur certains PC
    Par octopus984 dans le forum GLUT
    Réponses: 7
    Dernier message: 19/04/2005, 13h22
  4. Probleme d affichage de texture
    Par venomelektro dans le forum OpenGL
    Réponses: 1
    Dernier message: 27/09/2004, 15h07
  5. affichage de textures
    Par khayyam90 dans le forum OpenGL
    Réponses: 3
    Dernier message: 05/07/2004, 10h31

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