Skinning (ou presque) avec DirectX 7.0

Skinning (ou presque) avec DirectX 7.0 - Programmation

Marsh Posté le 21-11-2001 à 20:49:27    

Bon voila le problème.
Je dois optimiser un moteur 3D qui a était fait avec DirectX 7. Comme je n'ai que 1 semaine pour le faire, je ne peux pas passer à la version 8 car je la connais très peu.
 
Parmis les optimisations que je suis en train de faire, je mets tous mes tableaux de vertex dans des vertex buffers (eh oui, c'était pas fait avant) afin de profiter du T&L des cartes récentes.
Le problème c'est que j'ai des objets animés avec plusieurs bones. Et d'après ce que j'ai compris à DirectX 7, il n'est possible d'animé que 4 bones au maximum par vertex buffers en utilisant les matrices stockés à l'aide de :
- D3DTRANSFORMSTATE_WORLD
- D3DTRANSFORMSTATE_WORLD1
- D3DTRANSFORMSTATE_WORLD2 et
- D3DTRANSFORMSTATE_WORLD3
 
Hors mes objets possèdent bien plus de bones (matrices) ! Donc la question est là :
Comment je fais pour gérer plus de 4 bones avec DirectX 7 tout en stockant mes vertex dans la carte (à l'aide des vertex buffers) afin d'utiliser le T&L de ma carte.
 
Etant donnée que j'ai jamais fais bcp de directX 7 (je me suis arreter au 6), peut-être que je dis des betises, mais en regardant dans la doc du 8, j'ai vu quand pouvait utiliser jusqu'a 256 matrice en utilisant la macro D3DTS_WORLDMATRIX(i).
 
Voila, merci d'avoir lu ce message jusqu'au bout et j'espère que je trouverais quelqu'un pour m'aider.
Leander

Reply

Marsh Posté le 21-11-2001 à 20:49:27   

Reply

Marsh Posté le 21-11-2001 à 20:59:24    

le problème est le hardware. toutes les cartes ne supportent pas le t&l, seules les geforces+ & radeons+ le supportent. ensuite pour le skinning, une geforce ne supporte que deux matrices.
 
solution : skinner en soft.

Reply

Marsh Posté le 21-11-2001 à 21:05:55    

pour le skinning, c'est pas un problème puisque le moteur que je reprends n'utilise pas de skinning avec plus de 2 matrices.
 
Et même en général y a pas de skinning.
Et pour l'histoire des cartes qui ne supportes pas, c'est pas grave, puisque je veux que mon moteur soit accelerer pour les cartes qui le supporte !

Reply

Marsh Posté le 21-11-2001 à 21:09:49    

tu te contredis en deux messages ... :D tu veux savoir quoi exactement ?

Reply

Marsh Posté le 21-11-2001 à 21:49:34    

bon, j'ai un personnage animé avec plein de bones. Pour simplifier on va dire que chaque vertex n'appartient qu'a un seul bone.
 
Je voudrais donc pouvoir stocker dans un vertex buffer, l'ensemble de mes vertex et de pouvoir dire que chacun des vertex et assosié à une matrice.
Ainsi à chaque rendu, je n'ai qu'a changer de matrices.
 
Et je suis obligé de mettre tous mes vertex dans un seul vertexbuffer parce que les vertex qui se trouvent aux articulations se trouve dans des listes de faces de bones différentes. Et donc je ne peux pas faire un vertex buffer par bone pour cette raison.
 
C'est pour cela, que j'ai mis skinning dans mon titre. Même si chaque vertex n'est associé à un seul bone, le problème reste le même que s'il était associé à plusieurs. Enfin il me semble.
 
Leander

Reply

Marsh Posté le 21-11-2001 à 23:48:27    

je viens de relire la doc DirectX 7 et regarder les exemples et je crois que je viens de comprendre.
 
En effet il n'est possible de faire du blending qu'avec 4 matrices (ça je savais), mais en fait on est aussi limité à 4 matrices par vertexbuffers !!!
C'est à dire que si on a un objet avec 5 bones et un maillage avec juste des vertex ayant que 2 poids, ce n'est pas possible de gérer ce cas !
C'est vrai bizarre. Je vois pas l'interet d'avoir mis cette limite. Du coup c'est impossible de faire de skinning en hardware comme on peut le faire avec la version 8.
 
Es-ce que j'ai bien compris cette fois ?
 
Leander

Reply

Marsh Posté le 22-11-2001 à 05:44:56    

vi tu as bien compris. "l'intéret de cette limite" ? c'est juste la première version de dx qui propose le skinning en hard, c'est limité certes mais ça permet de faire deux-trois trucs genre le tweening.
 
tout ne peut pas venir d'un coup :)

Reply

Marsh Posté le 23-11-2001 à 15:25:26    

Bon finalement ce que je voudrais c'est que mes Vertex soient transformés en Hard.
 
Pour le moment, la seule solution que je vois, c'est de trier mes vertex par bones, de faire un vertex buffer par bones et de faire transformer ces vertex par la carte et ensuite de récupérer la valeur des vertex transformés et de tous les recopier dans un gros vertex buffer où il y aura tous les vertex et la liste de face à afficher.
 
Je récapitule : dans premier les vertebuffer par bones servent juste à transformer les vertex et ensuite je fais un gros vertex buffer pour afficher les faces.
 
C'est un peu tordu, mais j'ai pas trouvé mieux...
Es-ce que tu penses que ça peut marcher ?
je devrais tester ça lundi.
 
Leander.

Reply

Marsh Posté le 23-11-2001 à 17:01:23    

ça ne marchera pas car tu ne peux pas récupérer le résultat d'une transformation.
 
je ne crois pas que quiconque skinne en hard en ce moment, sauf peut-être ceux qui ont des geforce3 ou des protos geforce4 :D

Reply

Marsh Posté le 26-11-2001 à 19:02:28    

bah, avec DirectX 8, tu peux faire du skin en hard sans problème.
ça serait dommage de s'en priver, non ?
 
Et sinon, pour revenir à DirectX 7, il me semblait que l'on pouvait récupérer le résultat d'une transformation et même d'une projection.

Reply

Marsh Posté le 26-11-2001 à 19:02:28   

Reply

Marsh Posté le 26-11-2001 à 19:03:52    

leander a écrit a écrit :

bah, avec DirectX 8, tu peux faire du skin en hard sans problème.
ça serait dommage de s'en priver, non ?




Ah oui???
Ma G200 peut faire du skinning en hard alleluia !
elle est ressuscitee !!
 
:D
 
LEGREG

Reply

Marsh Posté le 26-11-2001 à 19:43:24    

leander a écrit a écrit :

bah, avec DirectX 8, tu peux faire du skin en hard sans problème.
ça serait dommage de s'en priver, non ?
 
Et sinon, pour revenir à DirectX 7, il me semblait que l'on pouvait récupérer le résultat d'une transformation et même d'une projection.


je n'ai pas maté le skinning sous dx8 ... enfin comme le dit legreg il faut que la carte le supporte :D
 
tu ne peux PAS récupérer le résultat de transformations, je suis formel. tu peux par contre faire faire les transformations en soft par dx avec ProcessVertices().

Reply

Marsh Posté le 29-11-2001 à 01:15:44    

legreg a écrit a écrit :

 
Ah oui???
Ma G200 peut faire du skinning en hard alleluia !
elle est ressuscitee !!
 
:D
 
LEGREG  




 
 
J'avais précisé que le moteur 3D tournerait QUE sur des cartes récentes... Style Geforce 3.
 
Sinon, youdontcare tu as raison : On peut pas récupérer le résultat des vertex buffer. Un moment j'avais cru.

Reply

Marsh Posté le 29-11-2001 à 14:31:08    

leander a écrit a écrit :

 
J'avais précisé que le moteur 3D tournerait QUE sur des cartes récentes... Style Geforce 3.




euh "carte recente"
c'est un peu plus large que GeForce 3, non?..
enfin j'espere..  
 
LEGREG

Reply

Marsh Posté le 29-11-2001 à 14:33:22    

haaa, la subjectivité ... :D
 
ma geforce ddr a deux ans maintenant. et je ne la considère pas comme carte 'récente'.

Reply

Marsh Posté le 29-11-2001 à 14:37:37    

Ouaaaaiiiiiin :cry:
 
faut vraiment que je change de matos
vu que maintenant meme une pauvre
GeForce2 est obsolete :cry:
 
LEGREG

Reply

Marsh Posté le 29-11-2001 à 15:30:13    

g froid

Reply

Sujets relatifs:

Leave a Replay

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