#0 

27-01-2010 15:51:38

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

Je travail actuelement sur un jeu avec un personnage à la 3ième personne et je ne voi pas comment faire pour qu'il utilise des armes, faut-il charger les armes et leurs animation apart ?
Comment puis-je faire pour que quand je déguaine un pistolet il l'attrape le tienne dans la main et le repose une foi terminé?
Faut t-il faire l'animation sans les armes dans les mains et faire suivre l'arme à la main en codant ?

merci pour vôtre aide

Hors ligne


#1 

28-01-2010 21:58:49

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

help ^^

Hors ligne


#2 

29-01-2010 21:28:18

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Si j'étaie toi, je chargerait mes armes a part mais en les collants sur le mesh du perso, pour cela, tu a plusieurs solutions, la plus simple serait de savoir l'endroit exact ou ton arme doit se trouver au moment de l'anim, une autre serait d'associer une valeur spécial a une face de ton mesh qui définirait l'endroit ou se trouve ton gun, a toi d'être inventif.

Hors ligne


#3 

29-01-2010 22:58:47

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

je suis assez d'accord avec Ilovechocolat il préférable de charger les armes a part, surtout si tu compte change d'arme de temps en temps.
Ensuite tu colle ton arme à un joint de ton perso. Il y a un truc pour ça que je vais te mettre si tu veut car je me rappel avoir un peut galérer pour le trouver.

L'idée est de récuperer un joint dans le perso et de lui attacher son arme, dans cette exemple on va récuperer un joint se trouvant justement dans une main

Code c++ :


//tu charge un model (man1.x ici)
IAnimatedMeshSceneNode* perso = smgr->addAnimatedMeshSceneNode (smgr->getMesh("man1.x"));

//tu cree un noeud de scene qui correspond au joint dans la main du perso (ce joint s'appel FIRESPOT ici)
ISceneNode* mainDuPerso = perso->getXJointNode("FIRESPOT");

//tu charge une arme
ISceneNode* arme = smgr->addAnimatedMeshSceneNode (smgr->getMesh("arme.x"));

//et tu definie la main du perso en parent de ton arme
arme->setParent(mainDuPerso);



Avec ça ton perso peut secouer son bras tant qu'il le veut, son arme sera toujours coller a sa main wink

Bon courage.

Dernière modification par nabouill (29-01-2010 22:59:24)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#4 

04-02-2010 17:30:09

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

oui mais si le personnage est un personnage entier et que la main est collé au bras (logique) en gros le personnage est en une pièce comment veut tu que je crée un noeud sur sa main ?

Hors ligne


#5 

04-02-2010 19:59:37

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Je te le répète, pour faire ce que tu veut, il y a pleins de possibilité et je te conseil plus d'utiliser des setPosition sauvagement pour ton gun .
Ou si tu veut encore faire comme t'a dit nabouill, le modèle peut être une balle que tu rend invisible avec setVisibility.

Hors ligne


#6 

04-02-2010 22:15:24

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

jonath313 :

pièce comment veut tu que je crée un nœud sur sa main ?


je pense que tu na pas bien lu mon post. (ou peut-être que c'est moi qui me suis mal expliqué).
Sur ton personnage, si il est animé, il à bien des joints. Donc l'idée est de créer un nœud de scene (ISceneNode *) corespondant a un joint. Dans mon exemple mon perso a un joint dans sa main qui s'appel FIRESPOT. donc je créer un noeud de scene appelé mainDuPerso

Code c++ :

ISceneNode* mainDuPerso


et je dit que ce noeud de scene corespond a mon joint appelé FIRESPOT. Ce joint est dans mon personnage c'est donc sur lui que je le récupère avec :

Code c++ :

perso->getXJointNode("man1.x");


Ce qui donne donc :

Code c++ :

//tu cree un noeud de scene qui correspond au joint dans la main du perso (ce joint s'appel FIRESPOT ici)
ISceneNode* mainDuPerso = perso->getXJointNode("man1.x");



Si tu ne sais pas comment s'appel les joints sur ton model je te conseil d'utiliser Fragmotion on exellent petit soft qui permet de faire plein de chose sur les models. (dont modifier les joints)

EDIT: Ha j'oubliais, je ne suis pas un expert en modelage, mais il me semble que certain format utilise autre chose que les joints, si c'est le cas, il est possible que mon truc ne marche pas avec ton model suivant son format, en tout cas ça marche avec les fichier .x et .b3d

Dernière modification par nabouill (04-02-2010 22:20:35)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#7 

04-02-2010 22:29:24

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

a d'accord bin j'anime avec des bones  alors le nom est " bones37 " donc pour que le personnage prenne l'arme je dois tester si la position du bones est egal à celle de l'arme j'ai du mal a imaginer le truc ... en tout cas merci de m'aider

Hors ligne


#8 

04-02-2010 22:44:12

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

jonath313 :

je dois tester si la position du bones est egal à celle de l'arme


non pas vraiment. Un fois que tu a créer ton noeud "mainDuPerso" (par exemple) et une arme "arme1" (par exemple)
tu fait un :

Code c++ :

arme1->setParent(mainDuPerso);


et "mainDuPerso" devient le parent de "arme1" donc il ni a plus rien a tester il y est coller en permanence, même si ton perso secoue le bras le plus vite du monde où que tu le téléporte a 1000 km de chez lui, son arme sera toujours coller a sa main.
Puis quand tu veut que ton perso lâche son arme:

Code c++ :

mainDuPerso->removeChild(arme1);


et hop, l'arme n'est plus coller a la main du perso.


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#9 

04-02-2010 23:35:07

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

super je ne connaissai pas tout cela vraiment merci beaucoup a toi je vais me dépécher de finir ma séquence d'animation pour tester tout cela !!!

Hors ligne


#10 

05-02-2010 12:29:51

Ilovechocolat
Abonné
Date d'inscription: 07-10-2009
Messages: 125

Waou, génial nabouill, je connaissait pas les joints, mais comment tu fait pour les nommer avec FragMotion ?

Hors ligne


#11 

06-02-2010 23:57:38

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

salut, alors je vien de tester se que vous dite, donc j'ai crée une sorte de bras animé par de bones, un appelé debut et un appelé fin. J'ai utilisé blender pour modéliser( très rapidement mdr ), et j'ai aussi fais une sorte d'arme( une sorte de pistoler ). j'ai animé mon bras avec les bones en faisant 150 frames.
Déjà d'une, quand je met exporté en .x, sa s'exporte, mais  dès que j'importe dans irrlicht, l'animation se joue, pourtant j'ai mit le ->setFrameLoop(1,150), ensuite quand je fais ->getXJointNode("fin") pour mettre l'arme a l'endroit du 2ème bones, irrlicht m'affiche dans la console qu'il ne peux pas trouver le "fin" en question, donc l'arme n'apparait pas-_-

Quelqu'un pourrait mieu m'expliquer svp

Hors ligne


#12 

07-02-2010 23:02:43

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

Ilovechocolat :

je connaissait pas les joints, mais comment tu fait pour les nommer avec FragMotion ?


Fragmotion est en anglais, ils sont donc appelé des Bones. Pour en sélectionner un, dans la fenêtre tools (en bas a droite) tu choisie "select" dans la liste déroulante, puis sur "select bones" en dessous. Tu clic sur un point dans ton modèle et dans le fenêtre properties tu lui met le nom que tu veut.

narugohan :

mais  dès que j'importe dans irrlicht, l'animation se joue, pourtant j'ai mit le ->setFrameLoop(1,150)


avec un ->setFrameLoop(1,150) irrlicht va joueur une animation de la frame 1 jusqu'à la 150 en boucle. Si tu veut pas qu'il joue l'animation fait un ->setFrameLoop(1,1) par exemple.

narugohan :

irrlicht m'affiche dans la console qu'il ne peux pas trouver le "fin" en question


Est tu sûr que ton bones s'appel "fin", sinon il est aussi important de respecter minuscule et majuscule pour qu'il le trouve.


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#13 

07-02-2010 23:06:11

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

ouai a 100%, mais enfaite j'ai fais une faute, c'est pas que les frames se joue, c'est plutot qu'il se joue pas lol

Hors ligne


#14 

07-02-2010 23:09:38

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

Alors je te dirait bien que j'ai de fort doute sur ton model.


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#15 

07-02-2010 23:15:27

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

oui cela vien peut étre de l'animation comment l'a tu animé ?

Hors ligne


#16 

08-02-2010 15:18:21

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

je les animer avec un bones, attendez je fais un screen :
EDIT :     
             



Voilà mes vue blender au frame 1 et 50


SI sa peut aider, mon code source :

Code:

#include <cstdlib>
#include <iostream>
#include <irrlicht.h>

using namespace std;

int main(int argc, char *argv[])
{
    irr::IrrlichtDevice* device = irr::createDevice(irr::video::EDT_OPENGL, irr::core::dimension2d<irr::u32>(640,480),32,false,false,false);
    irr::video::IVideoDriver* driver = device->getVideoDriver ();
    irr::scene::ISceneManager *smgr = device->getSceneManager ();
 
    device->getCursorControl ()-> setVisible (false);    // curseur invisible
 
    //tu charge un model (man1.x ici)
    irr::scene::IAnimatedMeshSceneNode* perso = smgr->addAnimatedMeshSceneNode(smgr->getMesh("bras.x"));
    perso->setMaterialTexture( 0, driver->getTexture("feu.jpg"));

    perso->setMaterialFlag(irr::video::EMF_LIGHTING, false);   
    perso->setFrameLoop(1, 150);                       // les frames a jouer

    
    //tu cree un noeud de scene qui correspond au joint dans la main du perso (ce joint s'appel FIRESPOT ici)
    irr::scene::ISceneNode* main = perso->getXJointNode("fin");
    
    //tu charge une arme
    irr::scene::ISceneNode* arme = smgr->addAnimatedMeshSceneNode (smgr->getMesh("flingue.x"));
    arme->setMaterialTexture( 0, driver->getTexture("metal.png"));
    arme->setMaterialFlag(irr::video::EMF_LIGHTING, false);
    
    //et tu definie la main du perso en parent de ton arme
    arme->setParent(main); 
 
 
 
    irr::scene::ICameraSceneNode *camera =  smgr->addCameraSceneNodeFPS(0,100.0f,.01f); // creation de la camera
        
        
    while (device->run())                                // la boucle de rendu
    {
        driver->beginScene(true,true,irr::video::SColor(0,0,0,0));
        smgr->drawAll ();
        driver->endScene ();
    }
 
    device->drop ();
    return 0;

}

Dernière modification par narugohan (08-02-2010 15:46:34)

Hors ligne


#17 

08-02-2010 18:03:57

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

ok alors niveau de la modélisation je ne connait pas trop blender mais a tu éssayer sous un autre format comme le .b3d ?
Sinon je sais que mon animation n'était pas exporté de 3dsmax si j'utiliser le modificateur physique après j'ai apri que le format .b3d utilise le modificateur "skin" alors tu a surement un souci a ce niveau renseigne toi sur le .x sous blender comment l'éxporte sinon prend le .b3d je vois pas d'autres solution car niveau code ce que tu as fait est très léger et devrait fonctionner

Hors ligne


#18 

08-02-2010 18:19:56

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

ok par contre comme je fais pour convertir en .b3d avec blender ??!

Hors ligne


#19 

08-02-2010 23:01:24

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

une foi j'aiéssayé blender pour exporter il faut que tu instale python c une vrai m**** j'y ai passé jusqu'à 3h du mat le mieu c 3ds max si tu veu étre à l'aise, encore dsl de faire de la pub, sinn faut que t'instale python

Hors ligne


#20 

08-02-2010 23:40:30

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

python est déjà installé chez moi, quand je télécharger blender je télécharger python, et comme c'est la 20 ème fois au moins que je réinstalle blender( a force de changer de pc et de l'installer chez les potes ) python sa me prend 30 sec a installé lol, enfin bon après python on fait quoi ? j'aime bien 3dsMax, mais j'ai la flemme de le réinstallé, pour juste sa lol, c jsute des teste là

Hors ligne


#21 

09-02-2010 07:27:52

nabouill
Abonné
Date d'inscription: 17-09-2009
Messages: 242
Corrections: 1

télécharge Fragmotion  avec tu peut convertir plein de sorte de fichier en plein de sorte de fichier très facilement.

Dernière modification par nabouill (09-02-2010 07:28:59)


mes sites: www.manga-vf.fr et www.series-vf.fr

Hors ligne


#22 

09-02-2010 23:59:45

narugohan
Abonné
Date d'inscription: 24-03-2009
Messages: 113

juste, là c'est pas vraiment l'utilisation des bones dans irrlicht. Regarde ça : http://www.youtube.com/watch?v=VwRtE04DCMw . Il a bones pour faire tourner la tête

Hors ligne


#23 

10-02-2010 11:50:53

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

C'est exactemnt ce que je recherche a faire, mais moi je vous drais guider le bras pour viser. Si quelqu'un a la solution je suis preneur pour des esplications svp merci

Hors ligne


#24 

10-02-2010 11:55:05

jonath313
Abonné
Date d'inscription: 28-12-2009
Messages: 240

Je voudrais plus gérer dans ce style : http://www.youtube.com/watch?v=AFk_MdSAzns

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
883 membres
1429 sujets
11121 messages
Dernier membre inscrit: Saidov17
54 invités en ligne
Aucun membre connecté
RSS Feed