#0 

01-10-2011 12:16:57

Krakinox
Petit nouveau
Date d'inscription: 01-10-2011
Messages: 5

Bonjour,

J'ai récemment voulu intégrer le mouvement d'une mesh qui a comme parent la caméra: j'aimerai avoir une vue à la première personne et lorsqu'un événement survient (bouton/click) je voudrais que la mesh en question bouge. Et ne voulant pas créer une animation squelettique, j'ai décidé d'utiliser cette fonction. Mais il me faudrait un peu plus d'informations sur cette dernière.

1. Est-il possible de faire en sorte que la mesh bouge lors d'un événement tel qu'un click/bouton car je ne vois que le "Start time" qui ne peut correspond que à une valeur numérique ?

2. Pourriez vous me donner un petit exemple d'une création de tableau avec des points ? Si je veux que le mouvement soit accordé au mouvement de ma caméra dois-je utiliser des coordonnées grâce à : posCam = camera->getPosition()  (soit des coordonnées relatives) ou est-ce que le fait que la mesh qui doit être animée est un enfant de la caméra suffit ? (pour mieux comprendre: ma mesh est déjà enfant de la caméra et donc elle reste toujours avec la caméra mais j'aimerai en plus du fait qu'elle suive la caméra qu'elle bouge lorsqu'un événement survient)

3. (Si le point de départ n'est pas le même point que le point d'arrivée) Est-ce que lorsque cette fonction est executée, à la fin du mouvement, la mesh restera à la dernière position indiquée sur le tableau ou reviendra-t-elle à la première ? (en prenant en compte que     loop = false et pingpong =false)

J'aurai pu répondre à ces questions par moi-même en testant mais je n'arrive pas à créer un tableaux de points c'est pour cela que je vous demande un petit exemple.

En espérant que vous ayez compris mes questions,
je vous prie de m'aider, merci.

Hors ligne


#1 

01-10-2011 13:30:01

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 907
Corrections: 2
Site web

1: oui tu crée ton follow animator a ce moment la avec start time = irr::IrrlichtDevice::getTimer()::getTime()

2:

Code c++ :

irr::core::array<irr::core::vector3df> path;
path.push_back(irr::core::vector3df(0,0,0));
path.push_back(irr::core::vector3df(0,0,0));
path.push_back(irr::core::vector3df(0,0,0));
path.push_back(irr::core::vector3df(0,0,0));
/// etc ...


oui les coordonnée relatif sont nécéssaire dans le cas ou la camera est parent
dans le cas d'un rpg like la camera doit être parent du node pas l'inverse, dans le cas d'un fps le joueur est virtuel, il n'éxiste pas en temps que node ou entiter
dans le cas ou la camera est parent du node qu'elle est l'intérais de surcharger d'un animator alors qu'importe le cas la camera suivra toujours ton node ?

3: le node resteras a la derniere poistion de l'array

4: la doc et les samples sont la pour ça smile

ps: c'est un mesh, et tu confond mesh et node

sur ce ... wink

Hors ligne


#2 

02-10-2011 11:34:31

Krakinox
Petit nouveau
Date d'inscription: 01-10-2011
Messages: 5

1. D'accord merci !

2 Et bien en réalité, pour l'instant dans mon projet j'essaie juste de voir si j'ai la possibilité de mettre en place tout ce que j'aimerai que mon jeu comporte sans que ça en soit trop difficile. Dans ce projet: C'est un FPS/Av enture où il y a la possibilité de ramasser des objets et de les observer sous plusieurs angles et les utiliser, et donc pour l'instant ces objets se résument à des cubes que l'on tient dans la main tout le long, et j'aimerai que lorsqu'on appuie sur un bouton notre personnage fasse tourner l'objet sur lui-même pour mieux l’observer (réussi) et que en appuyant sur un autre bouton il rapproche l'objet de lui (soit la caméra) pour voir l'objet plus en détail (sur le point d'être réussi grâce à ton aide).

3. D'accord !

4. Oui mais je suis resté un peu sceptique devant la doc...

Merci pour tout en tout cas !

Hors ligne


#3 

30-11-2011 17:00:22

Krakinox
Petit nouveau
Date d'inscription: 01-10-2011
Messages: 5

REbonjour,

Après beaucoup de tentatives j'en ai jamais réussi à obtenir le résultat voulu avec ce createFollowSplineAnimator et j'ai donc abandonné cette fonctionnalité de mon jeu et ai plus travailler sur des choses plus basiques en espérant que avec l'expérience j'arriverai à trouver comment utiliser ce fameux createFollowSplineAnimator. Mais maintenant j'en suis au point où dans mon projet il me manquerait plus que cela pour avoir toutes les fonctionnalités basiques, et c'est pour cela que je reviens vous consulter en vous montrant ce que j'ai écrit et en espérant que vous arriverez à me corriger :

Premièrement je relève la position de la caméra sur chaque axe :

Code c++ :


m_posCamX = camera->getAbsolutePosition ().X;
m_posCamY = camera->getAbsolutePosition ().Y;    // m_posCamX, mposCamY, mposCamZ ont été déclarées ailleurs.
m_posCamZ = camera->getAbsolutePosition ().Z;


Puis je construit mon path que doit suivre mon objet pour qu'il se rapproche de la caméra:

Code c++ :

irr::core::array<irr::core::vector3df> pathApprocher;
pathApprocher.push_back(irr::core::vector3df(m_posCamX,m_posCamY,m_posCamZ));
pathApprocher.push_back(irr::core::vector3df(m_posCamX + 2,m_posCamY + 3,m_posCamZ -1));
path (...)   //je ne vous fais pas le détail de tous les points


Et finalement je créé l'animator lors d'un click droit:

Code c++ :

if(event.EventType == EET_MOUSE_INPUT_EVENT)
    {
        switch(event.MouseInput.Event)
      {
         case EMIE_RMOUSE_PRESSED_DOWN:
            m_debutAnimator = ITimer::getTime ();  // avec un ITimer::start () qui a été placé au début, et le m_debutAnimator qui a été déclaré ailleurs.
            smgr->createFollowSplineAnimator(m_debutAnimator + 500, pathApprocher, 0.2f, 0.3f, false, false; //m_debutAnimator + 500 parce que je veux un petit temps de décalage entre le click et le mouvement
            break;

      }
    }


Me manque-t-il quelque chose ?!!

j'espère que vous pourrez m'aider.

Hors ligne


#4 

30-11-2011 19:27:08

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 907
Corrections: 2
Site web

juste une parenthèse à la fin de createFollowSplineAnimator entre false et ; ... wink

Hors ligne


#5 

30-11-2011 22:10:50

Krakinox
Petit nouveau
Date d'inscription: 01-10-2011
Messages: 5

:Troll:
Non plus sérieusement ?
J'ai écrit le message précédent depuis mon téléphone donc pour les erreurs du genre...

Hors ligne


#6 

01-12-2011 12:19:57

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 907
Corrections: 2
Site web

ben a par ITimer::getTime() qui ne va pas, c'est device->getTimer()->getTime()
et comme tout les debutant tu utilise 3 float pour stocker un vector3df sinon c'est bon

sinon la tu poste juste un code, sans erreur, en demandant ce qui va pas, c'est un peut light ...

Hors ligne


#7 

01-12-2011 18:36:14

Krakinox
Petit nouveau
Date d'inscription: 01-10-2011
Messages: 5

D'accord je comprend.

Comment ça c'est light ? Dis-moi ce qu'il faut que je dise de plus, si y en a besoin.
Parce que là je n'ai aucun problème à compiler le code pas d'erreurs, ni rien, mais en jeu rien ne se passe lorsque je click droite.

Hors ligne


#8 

01-12-2011 22:49:27

Magun
SleekThink Producer
Lieu: Punakha
Date d'inscription: 18-11-2007
Messages: 907
Corrections: 2
Site web

simplement par ce que tout les classes (casiment)  irrlicht que tu inclue dans ton projet on leur fonction en "pure virtual" et que leur appelle n'ont aucune influence car elle ne sont pas "déclaré"
donc ton apelle ITimer::getTime() ne resulte rien

virtual u32 getTime() const = 0;
et certe déclaré mais n'est pas "executer"
car la fonction vaut 0, d'ou pourquoi on parle de pure virtual, ce sont les class "fille" qui procure l'implementation
dans irrlicht cela ce crée en interne via createDevice qui instanci la class mère IrrlichtDevice qui elle même va instancier les autres principal class
irrlicht instancie CTimer qui est deriver de ITimer et te le retourne
d'ou pourquoi je te disais que ITimer::getTime() n'est pas correct et qu'il faut passer par device->getTimer()->getTime()

j'èspere être asser explicite wink

edit: faudrais aussi donner l'animator a l'obj sinon sa ne risque pas de faire grand chose

ISceneNodeAnimator * a = smgr->createFolowSplineAnimator(...);
node->addAnimator(a);
a->drop();
et pensser a le suprimmer quand tant a plus beusoin ... (node->removeAnimators ())
normalement

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
1426 sujets
11116 messages
Dernier membre inscrit: Bidule
20 invités en ligne
Aucun membre connecté
RSS Feed