Besoin d'aide DirectX 8/9 : Vertices, VertexBuffer & co

Voilà, je n’ai encore jamais fais de programmation 3d, je connaissais DirectDraw mais là, j’ai un peu de mal pour passer à DirectGraphics.
Alors, si quelqu’un sympa pouvait m’expliquer 2 ou 3 choses sur les Vertices… Si j’ai bien compris un Vertex est une structure définissant un point dans l’espace 3d ainsi que toute information complémentaire qu’on souhaite y attacher?? (je parle bien pour DirectX hein, pas OpenGL apparement ce n’est pas exactement la meme façon de voir les choses). En effet j’ai vu dans certains exemples que le programmeur définit lui-meme sa structure de Vertex, qui servira ensuite pour remplir le VertexBuffer. J’ai du mal à saisir, dans ce cas, comment DirectX peut traîter ces Vertex s’il n’en impose pas lui-meme la structure.

Ensuite, j’aimerais avoir de l’aide sur les fonctions SetRenderState et CreateVertexBuffer de l’objet device : sachant que je veux faire de la 2d plutot simple et a priori sans effets spéciaux, quels flags devrais-je passer à ces fonctions?

En fait ce qui m’arrangerait le plus ce serait un tutorial/reference complet (exhaustif!) de directx 8 ou 9 (de préférence 9), soit sur le net, soit un bouquin… car la msdn est certes complète mais manque souvent d’explications pour quelqu’un comme moi qui n’a pas fait ça toute sa vie! Et les différents articles/tutoriaux que j’ai trouvé jusqu’ici (gamedev.net, flipcode.com etc…) ne couvrent générallement pas tous les aspects du probleme en question.

Alors, quelqu’un pourrait m’aider? merci d’avance!

[quote]J’ai du mal à saisir, dans ce cas, comment DirectX peut traîter ces Vertex s’il n’en impose pas lui-meme la structure.[/quote]Au choix: shaders, ou le vieux pipeline.

Le vieux pipeline permettait de sotcker au maximum les informations suivantes pour un vertex (ce n’est pas forcé de tout utiliser):

  • x yz
  • normales x y z
  • specular rgba
  • diffuse rgba
  • coord 8 textures de u1v1 a u8v8

Il se peut que j’en ai oublié ]
Ce message a été édité par c0unt0 le 25/07/2003

  • Pour de la pure 2d, il me semble que tu peux regarder dans l’example “bilboard”, du SDK de directX 9…
  • sinon il me semble que la www.jeux-directx.com/, il y a un chtit tetris en DirectX 9 : c’est du managed Direct X (csharp) mais les api sont tres tres proches, et tu devrais pouvoir faire un portage assez rapidement.

En ce qui concerne les vertex format : en fait quand tu crees ton vertexbuffer/vertexstream, tu vas passer des flags a directX pour lui expliquer quels donnees contiennent tes vertex, et apres il va se debrouille pour uploader tout ca sur la carte video !
Et Les renderstates, ce sont les fonctions qui permette de change la facons dont la carte video video vas interprete ce que tu lui envois : texture, transparence, Z-buffer et compagnie, pour faire de la 2d, normalement, tu devrais pouvoir t’en sortir sans trops bidouille avec ca.

Et Voilaaa !

merci pour vos réponses!

Est-ce que vous auriez un bon bouquin à me conseiller sur DX9, enfin quelque chose qui ne traîte pas uniquement l’aspect pratique, mais aide à comprendre les mécanisme internes de directx?

Toi, mon petit gars, tu cherches les histoires la !
On commence comme ca et on finit par ecrire des rasterizer software sur telephone portable !!!

Comprendre les mechanisme internes de DirectX ??? mais persone v/peut faire ca

Plus serieusement, non, tout es plus ou moins sur le oueb, un peu partout, mais j’ai jamais vue un bon bouquin sur la theorie…

(Comprendre les mechanisme internes de DirectX… pff… et puis quoi aussi, maitrise les MFCs aussi ?.. a ces jeunes… )

lol
ben j’ai pas envie de me contenter de pomper betement les sources trouvées à droite à gauche, je ne pense pas que ça suffise pour avoir une chance de rentrer dans le milieu du jeu vidéo pro… et comme DirectX, à ma connaissance, doit être enseigné dans un nombre d’universités qui se comptent sur les doigts de la main d’un manchot, bah… faut bien s’investir soi-meme.
Sinon j’ai commandé un bouquin, ça s’appelle “Microsoft Direct3D programming”… si ça s’avère être la bible de Direct3D je vous le dirais

[quote]ben j’ai pas envie de me contenter de pomper betement les sources trouvées à droite à gauche, je ne pense pas que ça suffise pour avoir une chance de rentrer dans le milieu du jeu vidéo pro.[/quote]Mouais… pas convaincu de ce que tu dis… ou alors je dois avoir un boulot virtuel, qui me rapporte de l’argent virtuel, depuis plusieurs annees virtuelles (ce qui veux dire que en fait, je suis virtuellement plus vieux que ce que j’en ai l’air…)…
Ce qui est important c’est ce que tu en fais, pas ce que tu en sais

Et le code des autres, c’est un des meilleurs endroit ou apprendre : car tu sais que le code marche !

Enfin, moi je dis ca, en meme temps, ma vrais passion, c’est la cueillete des fraises

Je ne dis pas, bien sûr, qu’il faut être capable de réécrire DirectX de A à Z soit-meme, encore heureux. Mais regarde par exemple la méthode CreateVertexBuffer, elle prend en paramètres 3 flags DWORD Usage, DWORD FVF, D3DPOOL Pool ( = bcp de possibilités!) qui à mon avis peuvent beaucoup influer sur les performances du jeu si ils sont bien choisis. Alors, bien sûr en repompant du code on pourra faire quelque chose qui marche, mais ce ne sera pas forcément super optimisé en fonction des besoins de l’application…
Ce n’est qu’un exemple, mais je pense qu’avoir globalement une bonne compréhension de DirectX ne peut qu’aider à construire des applications optimisées.

[quote]Je ne dis pas, bien sûr, qu’il faut être capable de réécrire DirectX de A à Z soit-meme, encore heureux. Mais regarde par exemple la méthode CreateVertexBuffer, elle prend en paramètres 3 flags DWORD Usage, DWORD FVF, D3DPOOL Pool ( = bcp de possibilités!) qui à mon avis peuvent beaucoup influer sur les performances du jeu si ils sont bien choisis. Alors, bien sûr en repompant du code on pourra faire quelque chose qui marche, mais ce ne sera pas forcément super optimisé en fonction des besoins de l’application…
Ce n’est qu’un exemple, mais je pense qu’avoir globalement une bonne compréhension de DirectX ne peut qu’aider à construire des applications optimisées.[/quote]Bon, si c’est des réponses à ce genre de questions que tu cherches, fouille un peu dans le SDK de DirectX 9 (dis-moi, tu l’as bien le SDK, non?). Dans le dossier Help y a un joli fichier d’aide. C’est une vraie mine d’informations. Ajoute à cela les nombreux exemples présents, si avec ça, tu ne deviens pas le nouveau Tim Sweeney…

J’me permet de mettre mon grain de sable.

Avant de se lancer corps et ame dans la programmation 3D il faut connaitre les bases : ne pas savoir ce que c’est q’un vertex c’est quand meme grave docteur (a mon avis).

Bref avant toute chose essayes de trouver des réponses sur ce que c’est que des vertex, le texturing, coordonnées de mapping, l’éclairage et les projections.

Autre point, utiliser ce que les autres on fait n’est pas un mal en soit, ca s’appele la réutilisabilté. Si les gens mettaient un peu de leur égo de coté et utilisé un peu plus ce qui a été fait a gauche et a droit le monde tournerait beaucoup plus vite (j’dis pas mieux )

Sinon OpenGl et DirectX c’est pas vraiment si différent que ca. C’est juste deux manières de toucher a la carte graphique, les concepts de bases restent strictement les mêmes.

Et enfin pour la doc … bin vive google quoi

Aller sinon ta de tres bon forums (bon j’parle de ca, mais ca remonte a 2ans) sur http://www.flipcode.com et http://www.gamedev.net

Si tu cherches de la théorie, va voir des sites sur la manipulation d’objets en 3D, la modélisation de la lumière, les algo d’affichage de polygones (BSP tree par exemple). En fait il existe des cours sur la modélisation géométrique.
Ensuite, directx va implémenter certains algo existant.

Je te préviens ca deviens vite assez velu en math (enfin, tout dépend du niveau qu’on a)
Ce message a été édité par kaneloon le 04/08/2003