#1 

27-01-2010 14:51:38

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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


#2 

28-01-2010 20:58:49

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

help ^^


Hors ligne


#3 

29-01-2010 20:28:18

Ilovechocolat
Membres
Date d'inscription:
Messages: 125
IP: 90.28.24.118
Courriel

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


#4 

29-01-2010 21:58:47

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 93.10.99.3
Courriel

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.

Hors ligne


#5 

04-02-2010 16:30:09

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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


#6 

04-02-2010 18:59:37

Ilovechocolat
Membres
Date d'inscription:
Messages: 125
IP: 90.29.190.72
Courriel

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


#7 

04-02-2010 21:15:24

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 77.198.96.214
Courriel

jonath313 Ecris:

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("FIRESPOT");

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("FIRESPOT");


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

Hors ligne


#8 

04-02-2010 21:29:24

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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


#9 

04-02-2010 21:44:12

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 77.198.96.214
Courriel

jonath313 Ecris:

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.

Hors ligne


#10 

04-02-2010 22:35:07

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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


#11 

05-02-2010 11:29:51

Ilovechocolat
Membres
Date d'inscription:
Messages: 125
IP: 90.29.190.72
Courriel

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


Hors ligne


#12 

06-02-2010 22:57:38

narugohan
Membres
Avatar de narugohan
Date d'inscription:
Messages: 113
IP: 81.53.221.88
Courriel

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


#13 

07-02-2010 22:02:43

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 77.198.96.214
Courriel

Ilovechocolat Ecris:

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 Ecris:

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 Ecris:

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.

Hors ligne


#14 

07-02-2010 22:06:11

narugohan
Membres
Avatar de narugohan
Date d'inscription:
Messages: 113
IP: 81.250.159.158
Courriel

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


#15 

07-02-2010 22:09:38

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 77.198.96.214
Courriel

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

Hors ligne


#16 

07-02-2010 22:15:27

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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


Hors ligne


#17 

08-02-2010 14:18:21

narugohan
Membres
Avatar de narugohan
Date d'inscription:
Messages: 113
IP: 81.250.159.158
Courriel

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 :

#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;

}


Hors ligne


#18 

08-02-2010 17:03:57

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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


#19 

08-02-2010 17:19:56

narugohan
Membres
Avatar de narugohan
Date d'inscription:
Messages: 113
IP: 81.250.159.158
Courriel

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


Hors ligne


#20 

08-02-2010 22:01:24

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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


#21 

08-02-2010 22:40:30

narugohan
Membres
Avatar de narugohan
Date d'inscription:
Messages: 113
IP: 81.250.159.158
Courriel

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


#22 

09-02-2010 06:27:52

nabouill
Membres
Avatar de nabouill
Date d'inscription:
Messages: 242
IP: 77.198.96.214
Courriel

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

Hors ligne


#23 

09-02-2010 22:59:45

narugohan
Membres
Avatar de narugohan
Date d'inscription:
Messages: 113
IP: 81.250.159.158
Courriel

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


#24 

10-02-2010 10:50:53

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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


#25 

10-02-2010 10:55:05

jonath313
Membres
Date d'inscription:
Messages: 240
IP: 195.221.123.215
Courriel

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é
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
119 invités en ligne
membre en ligne: -
RSS Feed