problème pour charger des mesh au format .x

problème pour charger des mesh au format .x - C++ - Programmation

Marsh Posté le 04-04-2006 à 19:55:21    

Voila, je cherche à charger des modèles au format .x pour un moteur 3D sous Windows qui fonctionne aussi avec OpenGL.
Pour cela j'utilise la fonction de chargement D3DXLoadMeshFromX (bien plus rapide et fiable que les loaders .x "maison" - voir par exemple http://www.gamedev.net/reference/p [...] s/xfilepc/, j'ai longuement essayé).
 
En fait je copie le contenu des vertex et index buffers du mesh vers les buffers propriétaires au moteur et tout va très bien, mon modèle s'affiche parfaitement. Enfin PRESQUE parfaitement...
 
Le gros problème, c'est que le mesh est partitionné en plusieurs éléments qui ont leurs propres textures et matériaux.
Je n'apprends rien aux habitués, l'affichage sous directX est on ne peut plus simple, il faut juste appeler la fonction DrawSubset ( i ) avec les matériaux et textures n°i pour afficher l'élément i du mesh.
 
Simple exemple :  
 

Code :
  1. for( DWORD i=0; i<materialsCount; i++ )
  2.         {
  3.             // Set the material and texture for this subset
  4.             Device->SetMaterial( &meshMaterials[i] );
  5.             Device->SetTexture( 0, meshTextures[i] );
  6.        
  7.             // Draw the mesh subset
  8.             mesh->DrawSubset( i );
  9.         }


 
Mais pour moi ce n'est pas aussi simple, car le mesh ne comporte qu'un seul vertex et index buffer : tous les éléments doivent être concaténés à la suite et apparemment seul le mesh connait les indices de début et de fin dans ces buffers pour chaque élément.
 
Ce que je veux :
 

Code :
  1. for( DWORD i=0; i<myModel.meshesCount; i++ )
  2.         {
  3.             // Set the material and texture for this subset
  4.             myModel.setMaterial( i );
  5.             myModel.setTexture( i );
  6.        
  7.             // Draw the mesh subset
  8.             // I only have 1 buffer since the original Dx mesh also had one
  9.             myModel.setVertexBuffer ( start?, end? );
  10.         }


 
Alors y a-t-il un moyen de connaître ces valeurs de début et de fin pour chaque élément?

Reply

Marsh Posté le 04-04-2006 à 19:55:21   

Reply

Marsh Posté le 05-04-2006 à 01:35:59    

déjà le format .X ce n'est pas un format imposé par le DirectX, c'est le format manipulé par le D3DX, qui est l'équivalent du GLUT.  
c'est donc de l'assistance, voir plus une implémentation de démo dans le cas des mesh d3dx.
 
maintenant je vois ce que tu veux, mais moi je l'ai fait en partant de mon propre format maison, je jetterai demain un coup d'oeil dans le SDK, mais si tu n'as rien vu pour obtenir les offsets & co, je pense pas que je le verrais non plus...

Reply

Marsh Posté le 05-04-2006 à 10:42:47    

Non, j'ai beau eu chercher dans le SDK, je n'ai rien trouvé à ce sujet. En tout cas si cela est possible il doit s'agir d'une fonction Dx qui prend le mesh en paramètre, car visiblement il n'y a aucune méthode du mesh à cette intention.
 
Rhââ quand je pense que j'ai fait 90% du travail et si ça continue je vais devoir refaire un loader par moi-même! C'est trop stupide!  :pfff:


Message édité par akalash47 le 05-04-2006 à 10:45:54
Reply

Marsh Posté le 05-04-2006 à 12:00:59    

bin apriori wé :/

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed