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 mapping sur un trapeze


Sujet :

DirectX

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut texture mapping sur un trapeze
    Bonjour a tous !


    J'ai un probleme de mapping de texture sur un trapèze.
    Une image étant plus parlante :
    J'obtient ceci:

    Et je voudrai cela:


    De ce que je comprends, D3D interpole mal la texture sur chaque triangle, mais je ne sais pas comment lui specifier la bonne methode.

    Merci de votre aide.
    (Pour info j'ai trouvé un post decrivant le meme probleme en OpenGl, mais j'ai du mal a y trouver une analogie avec D3D
    http://www.r3.nu/~cass/qcoord/ )

  2. #2
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 365
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 365
    Points : 20 401
    Points
    20 401
    Par défaut
    Tu ne dis pas avec quoi est fait ton trapèze : quad texturé ou fichier .X ?
    Si tu as un effet indésirable c'est que la texture est mal attachée sur les polygones.
    Sinon regarder dans le SDK de Direct X il faut mettre le IDirect3dDevice dans un état particulier

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Salut Mat.

    Le trapeze est formé de 2 triangles dessinés avec un D3DPT_TRIANGLESTRIP.


    Pour donner un peu plus de details, j'utilise une structure

    struct CUSTOMVERTEX
    {
    float x, y, z;
    float u, v;
    };
    je la dessine
    _device->SetStreamSource(0, _vertexBuffer, 0, sizeof(CUSTOMVERTEX));
    _device->SetFVF(D3DFVF_CUSTOMVERTEX);

    _device->SetIndices(_indexBuffer);
    _device->DrawIndexedPrimitive(D3DPT_TRIANGLESTRIP, 0, 0, _vertexCount, 0, _primitiveCount);
    avec
    #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)

    Et je ne sais pas quel est l'etat du device avec lequel il faut jouer pour attacher correctement ma texture :/

  4. #4
    Expert éminent sénior
    Avatar de Mat.M
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2006
    Messages
    8 365
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 8 365
    Points : 20 401
    Points
    20 401
    Par défaut
    Salut Lilin je ne suis pas un grand expert Direct 3d
    as-tu regardé les différentes possibilités de SetTextureStage et DTEXTURESTAGESTATETYPE dans le SDK ?
    Peut-être que tu attaches mal la texture sur u et v.
    Dans le livre de Di Luna voilà ce qu'il utilise comme structure :
    struct Vertex
    {
    Vertex(){}
    Vertex(
    float x, float y, float z,
    float nx, float ny, float nz,
    float u, float v)
    {
    _x = x; _y = y; _z = z;
    _nx = nx; _ny = ny; _nz = nz;
    _u = u; _v = v;
    }
    float _x, _y, _z;
    float _nx, _ny, _nz;
    float _u, _v; // texture coordinates

    static const DWORD FVF;
    };
    const DWORD Vertex::FVF = D3DFVF_XYZ | D3DFVF_NORMAL | D3DFVF_TEX1;

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    J'ai regardé un peu de ce coté, mais rien de bien concluant :/

    Ca devrait pouvoir se faire a travers un shader, mais je trouve ca vraiment bizarre de devoir utiliser un pipeline programmable pour faire un truc si "simple".

    Quelqu'un aurait une idée pour y arriver plus simplement ?

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    En demandant de l'aide sur un autre forum, je me suis rendu compte que mon illustration etait fausse !

    Je cherche plutot a atteindre ce resultat :

  7. #7
    Expert confirmé

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 386
    Points : 4 962
    Points
    4 962
    Par défaut
    hum ce problème est tout sauf simple, le fait que ça te donne pas le résultat que tu espérais est tout à fait normal : directx et opengl font de la rasterisation de triangles.

    ce que tu demandes c'est de plaquer une texture carré sur un maillage pas carré alors que la carte graphique va de toute façon diviser ton trapèze en 2 triangles pas superposables, ce que tu obtiens comme résultat est normal.

    j'ai 3 heures de cours de directx justement, j'aurai l'occasion de réfléchir à ton problème XD

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Tu les prends ou tes cours de DX ?

    J'ai pas eu de solution simple sous le clavier pour le moment :/ je cherche je cherche

  9. #9
    Expert confirmé

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 386
    Points : 4 962
    Points
    4 962
    Par défaut
    pour lilin : fac de reims

    et pour le problème de texture, j'ai pas trouvé de solution simple, et même avec des shaders, la solution n'est pas évidente.

    si ton trapèze à toujours les mêmes proportions, tu peux toujours déformer ta texture et map les coordonnées de texture en accord avec ta texture déformée.

  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
    Au contraire c'est un problème vraiment simple..

    Ton trapeze dans l'image suivante


    Ce n'est pas un trapèze au sens strict mais un rectangle ou quad vu en perspective.

    Tu as donc besoin de définir un quad (quatre coins, bords orthogonaux) dans l'espace 3D. Et placer deux des coins à une plus grande profondeur (Z) que les deux autres. Si tu copies juste les coordonnées de ton écran en 2D (X et Y) ça ne va pas suffire ! Parce qu'intrinséquement ce n'est pas un objet 2D mais un objet 3D projeté avec une perspective conique sur ton écran !

    Voilà, de rien..

    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
    Expert confirmé

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

    Informations forums :
    Inscription : Février 2006
    Messages : 2 386
    Points : 4 962
    Points
    4 962
    Par défaut
    oui pour le coup du carré en perspective, sauf que, la hauteur de chaque ligne ne sera donc pas égale du justement à la perspective.

    après ça dépend du problème.

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Bonjour a tous!

    Effectivement, avec un quadrillatere rectangle en perspective ca marcherai, mais sur le cas present j'ai bien un quad non rectangle.


    Je vais essayer de faire ca en shader ce matin et je posterai si j'ai un résultat. Mais si quelqu'un a une solution plus simple, je reste preneur

  13. #13
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Points : 2
    Points
    2
    Par défaut
    Je suis vraiment a la ramasse on dirait.

    J'ai regardé du coté des homographies ou tu keystone, mais j'arrive a rien. super super

Discussions similaires

  1. Trier une Map sur les valeurs de façon décroissante
    Par ddams dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 27/12/2011, 18h33
  2. Réponses: 5
    Dernier message: 06/04/2006, 11h46
  3. Texture Mapping
    Par EsKa68 dans le forum OpenGL
    Réponses: 1
    Dernier message: 06/04/2005, 10h13
  4. Afficher une texture "pleine" sur un support non c
    Par Mastero dans le forum DirectX
    Réponses: 20
    Dernier message: 27/01/2005, 13h28
  5. Réponses: 5
    Dernier message: 18/09/2004, 21h30

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