#0 

13-02-2007 22:16:08

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

Bonjour à tous,
Débutant sur ce moteur et ayant commencé un jeu de snowboard, je me pose quelques question :
- premierement, j'ai importé un terrain de 3ds et j'ai réglé les collisions mais j'aimerais que mon snowboarder puisse 'glisser' progressivement tout seul dans la pente est-ce possible?
- deuxiemement, mon perso est également importé de 3ds et je souhaiterais pouvoir l'animer (par exemple le faire tourner lors de l'apui sur la fleche gauche ou droite) est-il possible de faire cela uniquement en utilisant des .3ds?

Si mes questions sont un peu floues ou que souhaitez voir du code n'hésité pas à me le demander
merci d'avance @bientot wink

Hors ligne


#1 

14-02-2007 00:52:04

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Pour que ton perso glisse, tu peux utiliser un peu de gravité dans l'animator que tu creais pour les collisions.
Sinon pour bouger ton perso sur la droite et la gauche, moi j'aurrai fait une anim sous 3ds genre le mec plis un peu les jambes, et tourne son corps légèrement sur la droite ou la gauche, puis ensuite j'aurrai fini ça en code en passant par les Events, tu captures la touche Fleche droite ou Fléches Gauche, puis tu modifis les frames de ton animations.Tout dépend le résultat que tu veux.Tu peux également le faire pivoter après capture des touches, mais le personnage va parraitre rigide et ça sera pas jolie donc moi j'aurrai fait une petite anim, au choix.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#2 

14-02-2007 17:05:21

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

merci beaucoup pour ta reponse Copland,

j'avai déja à peu près penser à ces solutions simplement je les utilises peut etre mal (malgré des heures plongés dans la doc wink
pour ce qui est de l'apesanteur voila mes ligne de code :

Code:

//collision nodeG/piste :
selecteur = smgr->createOctTreeTriangleSelector(meshPiste->getMesh(0), nodePiste, 32);
anim = smgr->createCollisionResponseAnimator(selecteur,nodeG,radius,vector3df(0,-150,10 ),vector3df(0,9,-30),0.0001f);
nodeG->addAnimator(anim);
anim->drop();

1er probleme : c'est que je dois faire correspondre la force de l'attraction (ici -150) et le sliding (0.0001f) et afin de pouvoir glisser correctement et la vitesse est presque nul!! sad
2eme probleme : le perso ne glisse que selon l'axe des x, mon code marchait mieux lorsque j'incrémenté automatiquement  les x dans une classe dérivée de ISceneNodeAnimator sad

pour l'animation je ne suis pas bien sur mais je crois avoir fait un peu n'importe quoi (ben oui je debute smile ) enfin voila ma situation : je possede un ISceneNode* (nodeG) avec lequel je gere les collisions(ce qui explique la translation de l'ellipsoide vector3df(0,9,-30) puisque mon perso n'est pas sur le nodeG) et le billboard. Ensuite je lui ai attaché mon perso devant puis la camera! Du coup, lorsque j'essai de changer de frame je suis obligé de tout recharger (collision...) et je ne vois pas pourquoi :s

exemple pour tourner a gauche :

Code:

case KEY_LEFT:
{
    core::vector3df v = nodeG->getPosition();

    if(!rotatGauche)
    {
        nodePerso->remove();
        meshPersoGauche = smgr->getMesh("../media/pandaGauche.3ds");

        nodePerso = smgr->addOctTreeSceneNode(meshPersoGauche->getMesh(0));
        nodePerso->setMaterialTexture(0, idriver->getTexture("../media/texturePerso.jpg"));
        nodePerso->setMaterialFlag(video::EMF_LIGHTING,false);

        nodeG->addChild(nodePerso);
        gestionOisivete();
        gestionCollision();
        chargementBillboard(0);
        nodeG->setPosition(v);

        rotatGauche = true;
       }

Encore merci @bientot j'espere ^^

Dernière modification par babar63 (14-02-2007 17:06:50)

Hors ligne


#3 

15-02-2007 19:13:07

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

Finalement pour la collision je pense adapter la piste même si ca limite un peu le choix de piste le résultat sera plus réel (pas de virage à 90° smile  )

J'ai également trouvé mon erreur pour l'animation, j'ai remplacé mon 'nodePerso' par un IAnimatedMeshSceneNode* (au lieu de ISceneNode*)

Et j'utilise le code suivant :

Code:

case KEY_LEFT:
{
    core::vector3df v = nodeG->getPosition();

    if(!rotatGauche)
    {
        nodePerso->drop();
        nodePerso = smgr->addAnimatedMeshSceneNode(meshPersoGauche);
        nodePerso->setMaterialTexture(0, idriver->getTexture("../media/texturePerso.jpg"));
        nodePerso->setMaterialFlag(video::EMF_LIGHTING,false);
        nodeG->addChild(nodePerso);
        nodeG->setPosition(v);
        rotatGauche = true;
    }

    v.X += event.KeyInput.Key == KEY_RIGHT ? 2.0f : -2.0f;
    nodeG->setPosition(v);
    break;
}

C'est déja beaucoup plus propre et ca marche beaucoup mieux wink

Toutefois, j'aurais encore une question mon animation est très 'brusque' puisque je change d'une position à une autre directement je souhaiterais créer deux véritable animations : une pour la transition d'une position à l'autre et l'autre pour une position particulière smile

Je possede déja une classe prévu (enfin je suppose) :

Code:

class IdleAnimatorNode : public ISceneNodeAnimator
{
public :
    virtual void animateNode(ISceneNode * node,u32 timeMs)
    {
        //utilisé pour le déplacement automatique
        core::vector3df v = nodeG->getPosition();
        v.Z += 0.15f;
        nodeG->setPosition(v);
    }
};

Mais premier problème je n'arrive pas à gerer le timer 'timeMs' j'appele la fonction avec 0 par défault sad
Et deuxième problème je ne vois vraiment pas comment procédé pour créer ces animations et les appeler...

En tout cas j'y travaille pour l'instant wink
Si vous avez quelques conseils à me donner je suis ouvert à toutes propositions big_smile

encore merci ^^

Hors ligne


#4 

16-02-2007 17:12:57

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

Pour l'animation étant donné que j'utilise 3ds Max je me suis penché sur le plugin Panda DirectX pour exporter mes animations
Pour l'instant je possede seulement un cube qui se déforme pour tester je l'exporte en .x et j'utilise le code suivant :

Code:

scene::IAnimatedMeshSceneNode* anms = smgr->addAnimatedMeshSceneNode(
smgr->getMesh("../media/test.x"));
anms->setFrameLoop(1,20);
anms->setAnimationSpeed(30);
anms->setRotation(core::vector3df(0,180.0f,0));

Je me suis également inspiré du code donné par Copland lors d'un autre message sur ce forum :

Code:

scene::IAnimatedMeshX* TinyX =  (scene::IAnimatedMeshX *)smgr->getMesh("../media/test.x");
TinyX->setCurrentAnimation("anim");
scene::IAnimatedMeshSceneNode* Tiny = smgr->addAnimatedMeshSceneNode(TinyX);
Tiny->setRotation(core::vector3df(0,180.0f,0));
Tiny->setFrameLoop(1,20);
Tiny->setAnimationSpeed(30);

mais l'anim ne se lance pas quoiqu'il arrive !! Je me demande si j'exporte bien mes fichiers à partir de 3ds....
voila mes options pour l'exportation :
http://www.hiboox.com/image.php?img=fa6e70b.jpg
http://www.hiboox.com/image.php?img=90df524c.jpg

Help please.... merci d'avance bonne journée

Dernière modification par babar63 (16-02-2007 18:43:08)

Hors ligne


#5 

17-02-2007 12:29:43

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

Personne n'aurait donc de conseils pour que j'intègre l'animation je suis vraiment bloqué sur cette partie.........
Si vous souhaitez voir le code entier ou me demander plus de précision si mes question sont flous n'hésitez pas
Bonne journée à vous ^^

Hors ligne


#6 

17-02-2007 14:03:25

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

Pour panda je ne pourrai pas t'aider, mais pour vérifier si ton objet fonctionne bien, ouvre le simplement sous le viewer d'irrlicht, et si il bouge pas tu seras fixé.
Sinon envoi moi ton modèle max par email et je te l'exporte en X si tu veux.
J'ai un exporteur X sous license, donc je n'ai malheureusement pas le droit de le distribuer...
@+


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#7 

20-02-2007 15:42:48

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

L'exportation des animations de 3dsMax en .X n'a pas vraiment l'air d'etre opérationnel (ou alors je m'y prends mal) avec le plugin PandaX (pour 3ds 7 en tout cas). Pour ceux qui rencontrerait le même probleme que moi, je me permet de mettre un lien vers la FAQ developpez.com ici qui donne les differentes possibilités pour exporter au format .x. Personnelement je me suis penché sur blender qui exporte directement.....
Si le lien est mal vue je m'en excuse d'avance, n'hésitez pas à modifier mon message ou à le supprimer... =s
@+++

Hors ligne


#8 

20-02-2007 17:14:16

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

T'a réussi à exporter prorement un modèle animé en X avec Blender ?
Si oui quelle version de blender et quel plugin s'il te plait ? :p


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#9 

20-02-2007 17:21:17

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

Salut !

J'ai réussi a exporter des animations avec PandaX mes seul le squelette passe. Le reste partr dans tout les sens...

(J'ai peut etres sauté une ligne, Copland, quel exporter utilise tu ?)


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#10 

20-02-2007 18:15:45

Copland
Modérateur
Lieu: ZarbiLand
Date d'inscription: 22-09-2006
Messages: 657
Site web

L'exporter de la version commerciale d'un autre moteur 3D et à parament il est 100% compatible avec irrlicht ce qui m'arrange pas mal big_smile....
Sinon pour Max et Irrlicht je préfère quand même le format B3D qui est plus rapide.


Config : I5 2400, ATI HD6870 1Go DDR5, 4Go DDR3.
Single Boot : Windows Seven.

Hors ligne


#11 

21-02-2007 16:12:52

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

Oki ! (pour le moteur 3D, c'est le quel ?)

Le format B3D utilise gère t'il les animations dans Irrlicht ?


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#12 

22-02-2007 14:13:25

Willikus
Abonné
Date d'inscription: 21-10-2006
Messages: 150
Site web

Salut !

J'ai réussit a exporter en .X un squelette (charactere) + mesh et a le lire dans Irrlicht avec PandaX.
Et ça marche !
Pour ce faire (même si ce n'est pas forcément ça), j'ai ajouter l'exporter X de directX un peu dans tout les dossiers de 3ds.
L'animation est fait avec l'autokeys...

Sinon, pour la gestion de l'anim dans Irrlicht :

j'ai ce code là :

Code:

scene::IAnimatedMeshX* mesh_first =  (scene::IAnimatedMeshX *)smgr2->getMesh("first.X");  
mesh_first->setCurrentAnimation("course_w_arme");
    scene::IAnimatedMeshSceneNode* node_first = smgr2->addAnimatedMeshSceneNode(mesh_first, camera);
    node_first->setMaterialFlag(video::EMF_LIGHTING, false); 
    node_first->setPosition(core::vector3df(0,-120,0));
    node_first->setRotation(core::vector3df(0,180,0));
    node_first->setAnimationSpeed(6000);

Cependant, j'ai deux probleme :
-Ya t'il un system pour pouvoir stopé, démarer l'animation (exemple quand le perso s'arrete, l'anim ne bouge plus)

-Ya t'il un moyen de stopé le Loop... Ya bien "node_first->setLoopMode(false);" mais quand je le met, l'animation ne démarre pas...


Merci de vos reponse/question
a+
w

Dernière modification par Willikus (22-02-2007 14:14:20)


Athlon 3000+ / 1024Mo PC3200 /8800 GTS

Hors ligne


#13 

28-02-2007 17:38:45

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

Copland a écrit :
T'a réussi à exporter prorement un modèle animé en X avec Blender ?
Si oui quelle version de blender et quel plugin s'il te plait ? :p


J'utilise la version 2.43 de blender et l'exporter .x est déjà intégré par contre je dois d'abord apprendre à utiliser le logiciel vu que je ne connaissait que 3ds max jusqu'a présent ; )
Donc pour l'instant j'attend de voir le résultat....

EDIT : J'ai créer une première animation basique avec cette version et l'exportation est très propre... voilà wink

Tu dis utiliser le format .b3d Copland... j'ai également essayé et je pense avoir correctement installé l'exporter mais pour les animations il reste toujours un probleme. Pourtant lorsque j'utilise la fonction preview avant l'export mon animation est bien présente sur la fenetre de rendu :s .... du coup je vois pas pourquoi lorsque j'importe sous irrlicht plus rien????

Dernière modification par babar63 (28-02-2007 20:37:12)

Hors ligne


#14 

05-03-2007 03:42:19

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

Pour le format b3d je n'ai toujours pas trouvé de solution pour exporter proprement les animations par contre j'ai enfin réussi à exporter en .X pour 3ds max7... suffisait juste de travailler en autokey....  sad  (au passage merci à willikus wink )
Par contre il me reste toujours un probleme et pourtant je ne vois plus d'erreur pour animer mon perso :

Code:

nodePerso->setFrameLoop(1,6);
nodePerso->setAnimationSpeed(10);
nodePerso->setLoopMode(true);

Avec ce code j'obtient deux résultats différents, si je le place après l'appui d'une touche l'anim n'est pas joué et si je le place lors du chargement du personnage l'anim est joué en boucle or je souhaite juste aller de la frame 1 à la frame 6... :s
j'ai également essayé avec setLoopMode(false) mais c'est pas mieux je suppose que mon souci rejoins pas mal celui de willikus est-ce un bug de irrlicht ? Quelqu'un aurait-il une solution?

Dernière modification par babar63 (05-03-2007 04:25:27)

Hors ligne


#15 

07-03-2007 03:50:09

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

bien le bonsoir a tous mon projet commence à aboutir cependant j'ai rencontré un dernier problème je n'arrive plus a déplacer mon personnage (alors que mes animations marchent plus très bien pour une fois!!!)
Voila ma situation :

variables utiles :

Code:

ISceneNode* nodeG=0; //il s'agit en fait d'un simple cube situé derriere la camera qui permet d'y attacher la 
        //cam et le perso, ainsi, j'effectue les translation seulement sur ce noeud
IAnimatedMeshSceneNode* nodePerso=0;
IAnimatedMesh* meshPerso=0;
IAnimatedMesh* meshPersoGauche=0;

fonction de chargement du perso :

Code:

void chargementPerso()
{
    //chargement des differents mesh du perso :
    meshPerso = smgr->getMesh("../media/pandaAnimNormal.X");
    meshPersoGauche = smgr->getMesh("../media/PandaAnimGauch.X");

    //initialisation du noeud :
    nodePerso = smgr->addAnimatedMeshSceneNode(meshPerso);

    //gestion de l'animation du perso
    nodePerso->setLoopMode(false);

    //le personnage est attaché au noeud nodeG
    nodeG->addChild(nodePerso);

};

classe evenement :

Code:

class RecepteurEvenement : public IEventReceiver{
public:
   virtual bool OnEvent(SEvent event)
   { 
      if (nodePerso != 0 && event.EventType == irr::EET_KEY_INPUT_EVENT)
      {
         switch(event.KeyInput.Key){        
            case KEY_LEFT:{
               if(!rotatGauche) {
                  //mis a jour des booléens :
                  posOriginal = false;
                  rotatGauche = true;
                  rotatDroite = false;
                   rotatArriere = false;
                        
                  //chargement de l'anim :
                  nodePerso->drop();
                  nodePerso = smgr->addAnimatedMeshSceneNode(meshPersoGauche);
                  nodePerso->setLoopMode(false);
                  nodeG->addChild(nodePerso);
               }
               core::vector3df v = nodeG->getPosition();
               v.X -= 4.0f;
               nodeG->setPosition(v);
               break;
            }  
            // idem pour les autres touches
         }
      }
      return false;
   }
};

class animation :

Code:

class IdleAnimatorNode : public ISceneNodeAnimator{
public :
    virtual void animateNode(ISceneNode * node,u32 timeMs){
        //utilisé pour le déplacement automatique
        core::vector3df v = node->getPosition();
        v.Z += 0.25f;
        node->setPosition(v);
    }
};

utilisation :

Code:

void animation(){
    //j'attache l'animateur au noeud nodeG
    IdleNode = new IdleAnimatorNode;
    IdleNode->animateNode(nodeG,15);
    nodeG->addAnimator(IdleNode);
    IdleNode->drop();
}

J'espere ne pas trop abuser de votre gentillesse vous m'avez déjà bien aidé mais la j'avoue que je ne sais plus quoi faire.....donc si vous voyez quelques choses qui ne semble pas normal faites moi signes svp wink

@bientot ^^

Hors ligne


#16 

08-03-2007 03:34:30

babar63
Membre
Date d'inscription: 13-02-2007
Messages: 11

Après etre passé un peu du coté du debug, j'ai constaté que la position du noeud nodeG est constament égal au vecteur(0,0,0). Et meme lorsque j'incremente la position dans mes fonctions la position est réinitialisé par la suite. Or si je ne charge pas mes animations la il n'y a plus aucun probleme pour déplacer mon noeud....  :s je ne comprend vraiment pas....

Y a t-il une astuce pour regler ce probleme ou faut-il modifier le code d'irrlicht et si oui, où récuperer le code???
merci d'avance a bientot ++

Hors ligne


Options Liens officiels Caractéristiques Statistiques Communauté
Corrections
irrlicht
irrklang
irredit
irrxml
xhtml 1.0
css 2.1
Propulsé par FluxBB
Traduit par FluxBB.fr
881 membres
1427 sujets
11117 messages
Dernier membre inscrit: Bidule
26 invités en ligne
Aucun membre connecté
RSS Feed