Bonjour!

Voila, cela fais maintenant quelques semaines que je developpe un petit moteur 3D. Jusqu'à présent, tout ce que gérait "la bete" se limitait à chargement d'un mesh (statique ou dynamique), deplacement de la caméra et c'était à peu près tout.

J'ai rapidement compris qu'une clés des améliorations futures résidait dans la gestion des vertex. Et oui, car pour l'insant je ne gérait que mon mesh globalement, sans rentrer dans sa structure. Et tout ce qui est plus sympa à coder (collisions, ombrage, octree...) necessite d'acceder directement aux vertex et aux faces qui composent ma géométrie. Donc j'ai decidé de malancer à l'exploration de ces fameux VB et IB.

J'ai compris comment créer un VB/IB mais je ne suis pas sur de bien avoir compris comment recuperer ces VB et IB depuis un mesh.
Disons que mon mesh est nommé Mesh et son device MeshDevice.
Je sais que je dois dans la fonction MeshDevice->GetVertexBuffer() passer en paramètre le vertexbuffer que je veux remplir. Et c'est là que ca coince !

Je voudrais que mes vertex suivent ma structure VERTEX décrite comme suit :
struct VERTEX
{
ifloat x, y, z;
float RHW;
DWORD COLOR;

}

Comment faire pour spécifier à direct X
1) Que je veux recuperer un buffer qui contienne un tas d'instance de cette strucure. (en clair en sortede tableau qui contient plein d'instance de VERTEX )
2) Que le format de mes vertex est donné par ma struct VERTEX ?

Je veux dire, lui , directX, en interne, il a une représentation de mes vertex ; mais comment il va faire pour faire la "correspondance" entre sa structure et la mienne ? En clair, comment va t-il faire pour passer de ses variables, qu'il appelle par exemple je sais pas moi XYZ aux miennes que j'ai appelé x, y, z.

En clair comment lui dire que je veux la première coordonné ds x, la deuxieme dans y ... et la couleur dans color ?

Par ce que pour l'instant, à mes yeux inexpérimentés, les exemples que j'ai lu sur internet relevent plus de la magie que d'autre chose !

J'ai vraimment du mal à comprendre.



Bon, donc bien sur, je me pose d'autres questions existentielles sur ces maudits index/vertex buffer. Notamment : si une face peu etre autre chose qu'un triangle (10 pourcent de chance que ca arrive, mais ca arrive), je fais comment moi pour savoir quoi correspond à quoi? Je veux dire, si je me base sur les IB, je ne peux pas dire qu'il faut recuperer _vb [ _ib[1] ] _vb[ _ib[2] ] et _vb[ _ib[3] pour avoir une face car supposons qu'il y ai en fait _vb[ _ib[4 ] ] qui fasse lui aussi parti de cette face, pour moi, il fera parti de la face suivante donc je décale toute ma géométrie.
Comment savoir quels vertex forment quels faces?
Si vous pouviez m'écrire JUSTE une dizaine de lignes de code pour par exemple mettre dans un tableau nommé face 1 (un tableau qui contiendra des pointeurs de VERTEX) les vertex de la première face (enfin la première au niveau de l'IB), ce serait super.


Mais je vous entend deja dire : mais pourquoi se faire ch*** à classer les vertex en faces alors que les vertex suffisent? Et bien car je pensais que c'était plus simple de les avoir illico "classés" par face pour tout ce qui est collision, illumination....


En clair, je comprend bien l'utilité des VB et des IB mais je beaucoup de mal à les mettre en place.

Je remercie infiniment celui qui aura pris le temps de me lire et de me répondre.
Merci beaucoup.


J'aurais encore qq questions apres, mais je laisse deja une ame charitable répondre à tout ce qui me hante deja !

Merci d'avance encore. Laurennnnnt à l'aide !!!! ;-)