[DirectX] animation ...!

Le côté programmation du développement d'un jeu vidéo.

animation ...!

Messagepar kensai » 14 Mar 2006, 12:31

Hello tout le monde je suis nouveau en programmation et je me demandais si vous pouviez m'aider concernant l'animation sur directX 9 en c# :00000015: ou meme en c+ en me donnant la procédure utilisée par directX :00000014:

J'anticipe une eventuelle réponse concernant l'exemple de microsoft .. je n'ai rien compris :00000020:

J'ai deja réussi à faire quelque trucs comme charger un .x ke j'ai créé dans ma fenetre et me balader avec une camera mais la l'animation ça devient tres compliqué je crois :00000001:

Enfin si vous avez des infos ne serais ce qu'un tuto ...:00000002:

Merci d'avance
kensai
Hello World, I'm new !
 
Messages: 15
Inscription: 14 Mar 2006, 12:24
Localisation: Nancy

Messagepar Loulou » 14 Mar 2006, 14:26

Je ne sais pas ce qu'il en est en C#, mais en C++ les .x c'est un peu la m**** à animer. Si j'étais toi je me rabattrais sur un autre format. Quant à savoir lequel, ça va dépendre de ce que tu veux comme type d'animations (par keyframes ou squelettale).

Enfin ce n'est que mon avis.
Loulou
Hello World, I'm new !
 
Messages: 702
Inscription: 10 Avr 2005, 12:00

Messagepar kensai » 14 Mar 2006, 14:59

Merci de ta réponse,

Je voudrais bien essayer un autre format mais j'en connais pas d'autre. :00000010:

Il me faudrait ce qu'il y a de plus facil à animer ...
kensai
Hello World, I'm new !
 
Messages: 15
Inscription: 14 Mar 2006, 12:24
Localisation: Nancy

Messagepar CodyX » 14 Mar 2006, 16:40

Le format .Md2 (quake 2) est le plus facile par keyframes...

Par squelettale tu as surtout le choix entre des formats textes et binaires,
mais dans le fond la difficulté et la meme pour ces formats tu as
.m3d (milkshape), .md5 (doom3), .mdl (halflife) etc etc. :00000023:
Avatar de l’utilisateur
CodyX
Hello World, I'm new !
 
Messages: 526
Inscription: 10 Avr 2005, 02:52

Messagepar listorien » 14 Mar 2006, 17:00

Loulou a écrit:Je ne sais pas ce qu'il en est en C#, mais en C++ les .x c'est un peu la m**** à animer.

Est-ce qu'il y a des classes toutes faites en directX pour afficher/animer les fichiers .x ? Ou alors, faut-il se taper le codage du 'lecteur d'anim' à la main ?
Avatar de l’utilisateur
listorien
Hello World, I'm new !
 
Messages: 1206
Inscription: 17 Juin 2005, 14:04
Localisation: Le Pecq

Messagepar Lenolian » 14 Mar 2006, 18:32

Oui il faut créer une classe dérivée de Microsoft.DirectX.Direct3D.AllocateHierarchy qui implémente toutes les fonctions concernant l'allocation et la désallocation des frames.

Puis récupérer un Microsoft.DirectX.Direct3D.AnimationRoot lors du chargement du mesh.

Microsoft.DirectX.Direct3D.AnimationRoot root = Microsoft.DirectX.Direct3D.Mesh.LoadHierarchyFromFile(meshFileName, flags, device, alloc, null);

ou meshFileName est le nom du fichier
flags sont les options de chargement du mesh
device est le device D3D
alloc est une instance de la classe dérivée de AnimationRoot précedemment
le dernier paramêtre permet de spécifier comment charger les données, null va bien par défaut.

Puis il faut passer le temps écoulé à cet objet à chaque update :

rootFrame.AnimationController.AdvanceTime(elapsedTime);


Enfin c'est largement mieux expliqué dans le sample du SDK (SimpleAnimation).

A noter que je parle du SDK de février 2006, cela a peut être changer depuis les autres versions.
J'ai toujours raison, même quand j'ai tort car alors j'ai raison d'avoir tort.
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar kensai » 14 Mar 2006, 18:49

Ah j'ai le SDK de décembre 2005 je telecharge le 2006 pour voir si ça a changé. Merci pour l'info :00000023: et merci à Lenolian ça sera p-e moins confu maintenant ^^
kensai
Hello World, I'm new !
 
Messages: 15
Inscription: 14 Mar 2006, 12:24
Localisation: Nancy

Messagepar kensai » 16 Mar 2006, 17:14

L'exemple est identique ya juste un truc qui cloche ... l'exemple de decembre 2005 tourne a 650 fps et celui de février 2006 à 350 !! :00000013:

(à part ça j'ai toujours pas réussi à animer un mesh dans ma propre application:00000012: )
kensai
Hello World, I'm new !
 
Messages: 15
Inscription: 14 Mar 2006, 12:24
Localisation: Nancy

Messagepar kensai » 18 Mar 2006, 19:53

:00000021: J'ai toujours pas réussi à animer tiny.x dans ma fenetre ...
Si quelqu'un a réussi en c# j'aurais bien aimé un fichier source qui montre comment faire simplement parce qu'avec le simpleanimation de microsoft j'arrive pas a adapter le code pour mon programme j'obtiens des erreurs d'application au niveau de :
Mesh.LoadHierarchyFromFile(meshFile, MeshFlags.Managed, e.Device, alloc, null);:00000012:

je remplace le e.Device de leur utility toolkit qui sort de je c pas ou et je mets le nom du device de mon application donc c p-e le pb mais dans ce cas faut que microsoft explique d'ou sort leur e.device ..:00000010:
kensai
Hello World, I'm new !
 
Messages: 15
Inscription: 14 Mar 2006, 12:24
Localisation: Nancy

Messagepar Lenolian » 19 Mar 2006, 18:39

Le e.Device vient du paramêtre DeviceEventArgs (dérivé de EventArgs). C'est la convention de pasage d'argument à une fonction qui répond à un event. Généralement ces fonctions ont la forme suivante :

public void Foo(object sender, EventArgs e)
{
}


object sender est la référence sur l'objet qui a déclenché l'event et EventArgs e donne les arguments nécessaires pour traiter l'event.

Sinon c'est quoi les erreurs que tu obtiens dans le LoadHierarchyFromFile ?
J'ai toujours raison, même quand j'ai tort car alors j'ai raison d'avoir tort.
Avatar de l’utilisateur
Lenolian
Hello World, I'm new !
 
Messages: 799
Inscription: 10 Avr 2005, 16:17
Localisation: Toulouse

Messagepar kensai » 20 Mar 2006, 02:01

bah l'erreur c : erreur de l'application ( D3DXException) ya pas de details genre un null qq part ou autre.
Et l'endroit ou ya l'erreur :

data.Mesh = mesh.SkinInformation.ConvertToIndexedBlendedMesh(data.Mesh, flags,
mesh.GetAdjacencyStream(), mesh.NumberPaletteEntries, out influences,
out bones);

c'est surligné en vert avec une ptite fleche verte qui dit que le code a appelé une autre fonction et ça sera la prochaine exécutée enfin c'est bizarre et quand je reclique sur continuer (f5) j'obtiens la même erreur sans explication avec une flèche jaune habituelle ici :

rootFrame = Mesh.LoadHierarchyFromFile("tiny.x", MeshFlags.Managed, device, alloc, null);

Je vous cache pas que j'y comprends plus rien et je suis pomé dans ce code :00000020: :00000013:
kensai
Hello World, I'm new !
 
Messages: 15
Inscription: 14 Mar 2006, 12:24
Localisation: Nancy


Retourner vers Programmation

Qui est en ligne

Utilisateurs parcourant ce forum: Yahoo [Bot] et 17 invités

cron