IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

DirectX Discussion :

[DX C#] Animation


Sujet :

DirectX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Par défaut [DX C#] Animation
    Bonjour,

    J'aimerais intégrer à mon jeu des mesh animé ! (ouais c'est chiant d'avoir des objets statique sans effet speciaux qui en mettent plein la vue).

    je fais tout mes modèles avec Blender (question de budget), et j'ai reussi à animer mon mesh sous Blender.
    Je l'exporte en .x, et miracle le mesh s'affiche !
    mais je sais pas comment faire pour qu'il bouge, pour naviguer aux differentes frames (il en a 80).
    j'ai choisis une animation avec des armatures (des bones) et je ne sais absolument pas comment faire ensuite.

    j'ai bien cherché sur le net et plusieurs personne disait que c'est impossible l'export d'animation avec blender car aucun format le fait sauf l'export en MD2 qui est completement buggé.
    D'autre encore disait qu'il fallait s'y prendre autrement: faire 1mesh=1frame mais c'est completement debile et les performances sont minable.
    Et j'ai pas trouvé de tuto permettant d'utiliser les squelettes.

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    j'ai bien cherché sur le net et plusieurs personne disait que c'est impossible l'export d'animation avec blender car aucun format le fait sauf l'export en MD2 qui est completement buggé.
    D'autre encore disait qu'il fallait s'y prendre autrement: faire 1mesh=1frame mais c'est completement debile et les performances sont minable.
    Effectivement l'animation MD2 se fait comme ça, et effectivement c'est plutôt minable de nos jours
    Il y a tellement de formats qui gèrent les animations squelettales (même sous Blender).

    Et j'ai pas trouvé de tuto permettant d'utiliser les squelettes.
    C'est pas vraiment évident avec les classes de DirectX. Inspire toi du sample correspondant ("skinned mesh" ou un truc comme ça), et... bonne chance.

  3. #3
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    'Alut.

    j'ai bien cherché sur le net et plusieurs personne disait que c'est impossible l'export d'animation avec blender car aucun format le fait sauf l'export en MD2 qui est completement buggé.
    Et bien c'est faux. J'utilise Blender, j'exporte en .x et j'ai affiché mes animations (très sommairement, ce n'est pas ma priorité pour le moment). De plus si tu ouvre ton fichier .x avec le mesh viewer de DirectX, tu devrais (normallement) le voir s'animer.

    Je suis parti du sample SkinnedMesh du SDK DirectX qui utilise un objet ID3DXAnimationController.

    Je te conseille de regarder le sample, en virant tout ce qui concerne le skinning de mesh. Si tu as besoin, je peux te mettre du code, mais je tiens à préciser que je n'ai fait celà que pour tester si celà était possible. Donc pas de commentaires, pas de noms cohérents aux variables, ... Bref, c'est moche. Il ne s'agit que d'un copier/coller/modifier du sample skinnedmesh.

  4. #4
    Membre expérimenté
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    267
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 267
    Par défaut
    Note: ouvrir ton fichier .x avec le mesh viewer peut sembler trivial, mais c'est une étape nécessaire pour vérifier que tout c'est bien exporté.

    Sinon, tu as aussi ce tutorial :
    http://www.gamedev.net/reference/art...rticle2079.asp

    Mais il est inexacte sur certains points.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Par défaut
    Merci pour vos reponse !

    alors moi pour le mesh viewer j'ai le sdk february, et quand je le lance, j'ai une fenêtre vide même avec les modèles de microsoft SAUF si je clique sur Direct3D10 mode, mais la ce que gère pas la carte grpahique, c'est le CPU qui doit le faire et je suis donc à 1 image pas seconde (avec une 7800gt).
    Vista?... probablement.
    enfin tout ca pour dire que je voit quand même si ca doit bouger ou pas et mon mesh est fixe.

    ensuite pour le sample:
    "SimpleAnimation Direct3D Sample" <= je l'ai
    "intermediate" <= bon, j'espere que ca ira bien
    "et... bonne chance." <= inspiratioooon, eexpiratiooon
    et on y go !

    j'vous tien au courant, bien sur !

    (et encore merci)

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Par défaut
    Bon alors, je galère pas mal, mais je suis sur la bonne voie.
    par contre et ca m'enerve énormement: je ne trouve pas la msdn de DirectX !

    la definition des classes, des methodes, tout ces trucs importants données par la msdn, ainsi que les exception renvoyé, et les choses à ne pas faire (comme mon ancien post ici qui portait sur une méthode ou un argument ne devait pas être 0).

    j'aimerais me rencarder sur les classes: AnimationFrame, AnimationRootFrame, AnimationAllocation, MeshHierarchy et autres... mais aucune infos à puiser quelque part, même pas en anglais, même pas en C++ !

    svp, ou ce trouve cette documentation pouvant être la mine d'or que je recherche, cette "javadoc" du DirectX.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Par défaut
    Ha je recherchais mal en fait...

    dans l'exemple, le plus important (ces classes) sont cachées par des #Region (c'est pas sympa).
    elle sont filles de classes DirectX plus connue.

    sinon pour la doc, comme j'ai installé la msdn après le SDK, l'installeur de SDK à jugé bon de ne pas installer la documentation. Maintenant c'est chose faite

    allez j'y retourne.

    je l'animerai un jour... je l'animerai ! (l' = le mesh).

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Par défaut
    Y'a encore des raté, et cette fois c'est à la derniere étape qui fait des siennes.

    lors du dessins, la methode DrawMeshContainer est appelée, la voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
            private void DrawMeshContainer(AnimationMeshContainer mesh, AnimationFrame parent)
            {
                //Etape 1
                if (mesh.SkinInformation != null)
                {
                    //Etape2a
                    if (mesh.NumberInfluences == 1)
                        device.RenderState.VertexBlend = VertexBlend.ZeroWeights;
                    else
                        device.RenderState.VertexBlend = (VertexBlend)(mesh.NumberInfluences - 1);
     
                    if (mesh.NumberInfluences > 0)
                        device.RenderState.IndexedVertexBlendEnable = true;
     
                    //Etape3a
                    BoneCombination[] bones = mesh.GetBones();
     
                    //Etape4a
                    for (int iAttrib = 0; iAttrib < mesh.NumberAttributes; iAttrib++)
                    {
                        for (int iPaletteEntry = 0; iPaletteEntry < mesh.NumberPaletteEntries;
                            ++iPaletteEntry)
                        {
                            int iMatrixIndex = bones[iAttrib].BoneId[iPaletteEntry];
                            if (iMatrixIndex != -1)
                            {
                                device.Transform.SetWorldMatrixByIndex(iPaletteEntry,
                                    mesh.GetOffsetMatrices()[iMatrixIndex] *
                                    mesh.GetFrames()[iMatrixIndex].
                                    CombinedTransformationMatrix);
                            }
                        }
     
                        //Etape5a
                        device.Material = mesh.GetMaterials()[bones[iAttrib].AttributeId].Material3D;
                        device.SetTexture(0, mesh.GetTextures()[bones[iAttrib].AttributeId]);
     
                        //Etape6a
                        mesh.MeshData.Mesh.DrawSubset(iAttrib);
                    }
                }
                else
                //Etape2b
                {
                        //Cette partie du code n'est appelée que pour les mesh sans info de skins ce qui n'est pas le cas ici.
                }
            }
    Le code foire à l'étape 6a. Le drawsubset, ne fonctionne pas correctement.

    symptômes: voir l'image du debuggeur
    (le printstacktrace indique le faute faute provient bien de drawsubset, surtout que quand je remplace la boucle for par "int iAttrib=0;" j'ai le même message mais cette fois bien sur drawsubset.)


    et le pire de tous, c'est que quand je force l'execution en al relançant avec la flèche verte magique:
    La DLL 'C:\Windows\assembly\GAC\Microsoft.DirectX.DirectInput\1.0.2902.0__31bf3856ad364e35\Microsoft.DirectX.DirectInput.dll' tente une exécution managée dans le verrou du chargeur du système d'exploitation. N'essayez pas d'exécuter du code managé dans une fonction d'initialisation d'image ou DllMain, car cela risque d'entraîner un blocage de l'application.


    Oui, DirectInput vient lamentablement planter Direct3D !
    dans mon appli, je me sert du directinput, sa présence n'est pas le fruit du hasard, mais en aucun le code ici ne mets en avant le directinput, et j'ai bien verifié: j'ai pas comfondu le device input avec le device direct3D.

    j'ai fais l'essai de reajouter la reference de directinput dans l'exemple SimpleAnimation, ca fonctionne correctement.

    je vois pas trop quel est le problème... merci de m'aider !

    [EDIT] j'ai fait un essai en virant totalement toute élément se rapprochant de loin ou de près à DirectInput et verdict: j'ai exactement le même message avec cette fois la DLL de direct3D (ce qui me parait plus plausible...).

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Par défaut
    Bon, j'ai trouvé un site très bon, c'est une grosse boite à outils de truc essentiel dans DirectX:
    http://www.tar.hu/directx9kick/index.html
    L'auteur est Tom Miller (lead develloper de DirectX et designer de l'API pour la petite histoire).

    J'ai donc suivi les instructions sur l'animation squelette qui est celle du framework mais clairement expliqué.

    j'ai largement eu moins de soucis de comprehension avec cette version (que j'ai même traduit en français pour moi).

    j'ai donc appliqué progressivement tout en comprenant le pourquoi du comment. Mais voila, arrivé l'heure de l'execution, rebelotte !
    j'ai exactement le même problème ! et aussi sur mesh.MeshData.Mesh.DrawSubset(iattrib);
    Lorsque je mets cette ligne en commentaire, tout fonctionne sauf que rien n'est dessiné.

    Merci de bien voulair m'aider !

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Par défaut
    Voici le projet complet: http://lucyberad.googlepages.com/Tex...atedModele.zip

    En esperant que ca vous aidera à m'aider.

    [EDIT] testé sous XP et Vista, sans puis avec la mise à jour d'avril de DX9, dans chaque cas, l'erreur est présente.

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 134
    Par défaut
    J'ai eu le meme genre de problème récemment ce qui a donné lieu à un topic et personne n'a pu vraiment me répondre. Je pense que le problème vient de Vista car sous xp tout fonctionne parfaitement. Peut être devrais-tu essayer de programmer avec le framework XNA.

    Dans mon cas ça plantait de la même façon lorsque je cherchais à afficher mon terrain. Lorsque je ne l'affichais pas mes animations et mes meshes, elles, étaient parfaitement réstituées...

    Pour info j'ai désinstallé Vista pour résoudre mon problème, ce qui est un peu radical.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Février 2007
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 73
    Par défaut
    Merci de ton aide !

    alors apparament j'ai cherché cherché, et j'ai trouvé un bribe de symptômes dans un coin paumés de la msdn.
    Il semblerai que ca viennent du fait que l'assembly DirectX soit des classes .NET1.1 et que mon code est .NET2 ce qui fait conflit (d'où le dérèglement des DLL).
    Ca n'est pas spécifique à vista puisque mon portable (avec XP) fait la même erreur (enfin sur d'autre forum c'est une chance sur deux).
    pour ca 2 solutions:
    - revenir en framework 1.1 avec VS2003... faut evoluer quand même.
    - ce qui était l'assembly 2.0 est devenu desormais XNA. Perso, il me seduit pas mal, mais j'aimerais bien l'utiliser avec visual pro (msdnaa). j'y reflechi encore mais je crois que je vais devoir y passer. Surtout que ca demande aux utilisateur d'installer un enième framework (même pas natif dans vista ni dispo par windows update), ce qui fait un total de 3 truc: DirectX à jour, Microsoft Framework .Net 2.0 (voire 3.0 qui n'est que le 2 avec des truc de vista), et le framework XNA, c'est lourd pour l'utilisateur, surtout si il faut 3 installeur pour ca (la ils ont merdé un max microsoft).

    j'vais test avec XNA, et je tien au courant.

    ps: (tiré de la FAQ)
    Q: Does MDX 1.1 support development with the .NET Framework 2.0?
    A: MDX1.1 is fully compatible with the .NET Framework 2.0.

    ca me fait bien rire, surtout le "fully"...

Discussions similaires

  1. comment integer une animation swf dans une page
    Par naili dans le forum Intégration
    Réponses: 7
    Dernier message: 18/09/2002, 18h54
  2. Comment ne pas rejouer une animation après un clic ?
    Par mmmmhhh dans le forum ActionScript 1 & ActionScript 2
    Réponses: 4
    Dernier message: 04/09/2002, 16h11
  3. [Composants][Animation] Lire une vidéo compressée
    Par femtosa dans le forum Composants VCL
    Réponses: 6
    Dernier message: 03/09/2002, 08h03
  4. Rx Controls Gif animés
    Par toufou dans le forum Composants VCL
    Réponses: 6
    Dernier message: 23/08/2002, 14h09
  5. Passage de parametre a une anim Flash 5
    Par debug dans le forum Intégration
    Réponses: 4
    Dernier message: 03/06/2002, 17h59

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo