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 :
- for( DWORD i=0; i<materialsCount; i++ )
- {
- // Set the material and texture for this subset
- Device->SetMaterial( &meshMaterials[i] );
- Device->SetTexture( 0, meshTextures[i] );
-
- // Draw the mesh subset
- mesh->DrawSubset( i );
- }
|
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 :
- for( DWORD i=0; i<myModel.meshesCount; i++ )
- {
- // Set the material and texture for this subset
- myModel.setMaterial( i );
- myModel.setTexture( i );
-
- // Draw the mesh subset
- // I only have 1 buffer since the original Dx mesh also had one
- myModel.setVertexBuffer ( start?, end? );
- }
|
Alors y a-t-il un moyen de connaître ces valeurs de début et de fin pour chaque élément?