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 :

Mesh en Triangle Strip


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut Mesh en Triangle Strip
    Bonjour,

    je souhaite stocker une primitive géométrique dans un mesh, en utilisant la classe LPD3DXMESH. Je créé donc mon mesh à l'aide de D3DXCreateMeshFVF, je remplit mes vertex et index buffers, pas de problème.
    Mais le truc c'est que mon mesh est en triangle list, et je dois donc remplir mon index buffer pour en faire une triangle list. Or, que je préférerais l'afficher en triangle strip pour des raisons de performances.
    Peut on avoir un LPD3DXMESH en triangle strip ??

    Merci d'avance !

    yagero

  2. #2
    Membre éclairé
    Avatar de funkydata
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    515
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 515
    Par défaut
    Hummmm... je sais pas a vrai dire. J'utilise jamais les meshs de DirectX... Au pire tu peux "bufferiser" ton mesh dans une structure perso et tu passes tes buffers au Device en temps que trianglestrip via le "DrawIndexedPrimitives".

  3. #3
    Membre Expert

    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
    Par défaut
    Citation Envoyé par yagero
    Bonjour,
    Mais le truc c'est que mon mesh est en triangle list, et je dois donc remplir mon index buffer pour en faire une triangle list. Or, que je préférerais l'afficher en triangle strip pour des raisons de performances.
    Entre indexed triangle list et indexed triangle strip la différence n'est pas toujours à l'avantage des triangle strip (plus compliqué à mettre en oeuvre puisqu'un seul type de connectivité). Le plus important c'est d'être optimisé pour le cache post transform (si ton vertex shader est suffisamment conséquent pour être ton goulot d'étranglement et s'il ne l'est pas, tu vas heurter la limite de attribute fetch, de setup, d'interpolation, de CPU ou de traitement par pixel).

    Regarde le sample optimized mesh dans le SDK, ça te donnera une idée des perfs théoriques de l'un et de l'autre sur ta machine.

    Si tu ne peux pas utiliser d'index buffer par contre, le triangle strip est un gain.

    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 28
    Par défaut
    L'objet mesh ne gère pas les strips. Tu doit stocker les strips dans un index buffer. LeGreg a raison concernant les performances, ça varie suivant l'objet qui doit être converti.

    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
    int NumFace = Ton_Mesh->GetNumFaces() * sizeof( 'short' si INDEX16, 'int' si INDEX32) * 3;
    DWORD * Ad = new DWORD [NumFace];
    Ton_Mesh->GenerateAdjacency(0.0f, Ad);
     
    Ton_Mesh->OptimizeInplace( D3DXMESHOPT_VERTEXCACHE,
    			Ad,
    			NULL,
    			NULL,
    			NULL);
     
    delete [] Ad;
     
    D3DXConvertMeshSubsetToSingleStrip(Ton_Mesh,
    		0,
    		D3DXMESH_IB_WRITEONLY,
    		&Ton_Index_Buffer_Strip,
    		&NumVerticesIndex
    		);
     
    PrimitiveCountIndex = NumVerticesIndex - 2;

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    19
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 19
    Par défaut
    Merci bcp pour ces réponses !!!
    Maintenant j'ai un autre problème avec les meshs : Le multitexturing.

    Lorsque je travaille juste avec un VB et un IB, pas de problème j'arrive à multitexturer. Par contre dès que je travaille avec un mesh, l'ajout d'une deuxième coordonnées de textures a pour seul effet d'afficher une bouillie de pixels à l'écran. Je vois meme plus les polygones, seulement un tas de pixels hideux sans queue ni tête...

  6. #6
    Invité de passage
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 1
    Par défaut petites corrections
    Citation Envoyé par filousnt Voir le message
    L'objet mesh ne gère pas les strips. Tu doit stocker les strips dans un index buffer. LeGreg a raison concernant les performances, ça varie suivant l'objet qui doit être converti.

    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
    int NumFace = Ton_Mesh->GetNumFaces() * sizeof( 'short' si INDEX16, 'int' si INDEX32) * 3;
    DWORD * Ad = new DWORD [NumFace];
    Ton_Mesh->GenerateAdjacency(0.0f, Ad);
     
    Ton_Mesh->OptimizeInplace( D3DXMESHOPT_VERTEXCACHE,
    			Ad,
    			NULL,
    			NULL,
    			NULL);
     
    delete [] Ad;
     
    D3DXConvertMeshSubsetToSingleStrip(Ton_Mesh,
    		0,
    		D3DXMESH_IB_WRITEONLY,
    		&Ton_Index_Buffer_Strip,
    		&NumVerticesIndex
    		);
     
    PrimitiveCountIndex = NumVerticesIndex - 2;

    Bonjour, juste quelques petites remarques concernant ce sujet et ce post.
    D'abord, merci de m'avoir fait decouvrir cette fonction que je ne connaissais pas : D3DXConvertMeshSubsetToSingleStrip()
    J'ai peut-être ainsi une solution pour mon probleme de conversion de meshes de triangles listes indexees vers des triangles strips. (Car en effet les indexed triangles list sont en general le plus indiquees - car generales - alors que les strips et fans sont plus indiques dans certains cas particuliers...
    Je dois faire cette operation car je developpe actuellement un exporteur de notre logiciel 3D (utilisant a foison les triangle list indexees) vers le format .M3G de la norme jsr184 ( Java mobile 3D) .
    et cette norme ne permet de definir les meshes que par des triangles strip (c tout...sig, deja qu'il faut bidouiller pour convertir nos coordonnees 3D flottantes (f32) vers des shorts (int16)...)

    Bon concernant mes corrections:
    1)DWORD * Ad = new DWORD [NumFace]; --> il faut ici remplacer Numface par Numface*3 , car c'est le nombre d'indices et pas de faces qu'il faut.
    2)Dans la doc concernant D3DXConvertMeshSubsetToSingleStrip() ils font la remarque judicieuse d'utiliser un optimize() , comme ecris dans l'exemple cité, sauf qu'ils indiquent que le flag D3DXMESHOPT_ATTRSORT doit etre mis. (a tester)

    voila. Merci de votre attention. Je retourne a mon taf.
    salutations

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

Discussions similaires

  1. Triangle Mesh Class ?
    Par tyke91 dans le forum ODE
    Réponses: 1
    Dernier message: 06/11/2008, 17h46
  2. Cube en triangle strip
    Par goast dans le forum OpenGL
    Réponses: 7
    Dernier message: 18/07/2008, 16h11
  3. recherche principe anti-aliasing triangle strip
    Par luckydigit dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 01/07/2008, 19h16
  4. Création vertex pour affichage en Triangle Strips
    Par ReiKiss dans le forum DirectX
    Réponses: 2
    Dernier message: 09/11/2005, 10h31
  5. Multipass Triangle strip + triangle list
    Par El Brujo dans le forum OpenGL
    Réponses: 13
    Dernier message: 02/11/2005, 10h26

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