Partage
  • Partager sur Facebook
  • Partager sur Twitter

irrlicht colisions

colision avec un mesh

Sujet résolu
    5 octobre 2007 à 23:49:28

    bonjour j'ai encore un probleme ^^, je me suis inspiré du tuto officiel 7 pour les colision de la cam. cela marche nomalement, le probleme c'est que j'ai attaqué une ak47 (fusil d'asseau)
    a la cam, elle se deplace donc avec celle ci, ce que j'aime pas c'est qua l'ak47 passe a travers les murs (c'est vraiment moche).


    je me demandait s'il n'ecistait pas une solution comme avec la cam car le code suivant ne fonctione que pour le noeud de la cam et non celui de l'arme(son fils)

    1. #include <iostream>
    2. #include <string>
    3. #include <IRR/irrlicht.h>
    4. using namespace irr;
    5. int main()
    6. {
    7.     core::dimension2d<s32>tailleEcran(640,480);
    8.     IrrlichtDevice* device = createDevice(video::EDT_OPENGL,tailleEcran,32,false,false,false);
    9.     video::IVideoDriver* driver = device->getVideoDriver ();
    10.     scene::ISceneManager *scenegraph = device->getSceneManager ();
    11.     //On rend invisible le curseur
    12.     device->getCursorControl ()-> setVisible (false);
    13.     //la sale
    14.     device->getFileSystem()->addZipFileArchive("map-20kdm2.pk3");
    15.     scene::IAnimatedMesh *room = scenegraph->getMesh("20kdm2.bsp");
    16.     scene::ISceneNode *sale = scenegraph->addOctTreeSceneNode(room->getMesh(0));
    17.     sale->setPosition(core::vector3df(-1300,-144,-1249));
    18.     //colision sale
    19.     scene::ITriangleSelector *selector = scenegraph->createOctTreeTriangleSelector(room->getMesh(0), sale, 128);
    20.     sale->setTriangleSelector(selector);
    21.     //La caméra
    22.     scene::ICameraSceneNode *camera = scenegraph->addCameraSceneNodeFPS (0,100.0f,300.0f, 0, 0, 0, false);
    23.     camera->setPosition(core::vector3df(-100,100,-150));
    24.     //colision avec la cam
    25.     scene::ISceneNodeAnimator *animator = scenegraph->createCollisionResponseAnimator(selector, camera, core::vector3df(30,50,30),core::vector3df(0,-3,0),core::vector3df(0,50,0));
    26.     camera->addAnimator(animator);
    27.     //L'arme
    28.     scene::IAnimatedMesh* modele = scenegraph->getMesh("ak47wstock.3ds");
    29.     scene::IAnimatedMeshSceneNode* Nmodele = scenegraph->addAnimatedMeshSceneNode(modele);
    30.     //On modifie les propriétés de l'arme
    31.     Nmodele->setMaterialFlag(video::EMF_LIGHTING, true);
    32.     Nmodele->setRotation(core::vector3df(180,0,180));
    33.     Nmodele->setPosition(core::vector3df(20,-8,65));
    34.     Nmodele->setParent(camera);
    35.     //colision avec l'arme
    36.     scene::ISceneNodeAnimator *aim = scenegraph->createCollisionResponseAnimator(selector, Nmodele, core::vector3df(30,50,30),core::vector3df(0,-3,0),core::vector3df(50,50,50));
    37.     Nmodele->addAnimator(aim);
    38.     //viseur
    39.     video::ITexture *viseur = driver->getTexture("viseur.PNG");
    40.     driver->makeColorKeyTexture(viseur, video::SColor(0,0,0,255));
    41.     //La boucle de rendu
    42.     while (device->run())
    43.     {
    44.         driver->beginScene(true,true,video::SColor(0,200,200,200));
    45.         //on dessine la scene
    46.         scenegraph->drawAll ();
    47.         //on affiche le viseur
    48.         core::position2d<s32>pos(tailleEcran.Width / 2 - 15, tailleEcran.Height / 2 - 15);
    49.         driver->draw2DImage(viseur, pos, core::rect<s32>(0,0,30,30), 0, video::SColor(255, 255, 255, 255), true);
    50.         //Un peut de lumiere
    51.         scenegraph->addLightSceneNode (0, core::vector3df(0,300,0), video::SColorf(0.4f,0.4f,0.6f,0.0f), 300.0f);
    52.         //On afiche la pos de la cam dans le titre
    53.         core::stringw titre = camera->getPosition().X;
    54.         device->setWindowCaption(titre.c_str());
    55.         driver->endScene ();
    56.     }
    57.     device->drop ();
    58.     return 0;
    59. }





    merci de votre aide encore une fois ^^.
    • Partager sur Facebook
    • Partager sur Twitter
      6 octobre 2007 à 10:44:46

      Salut.
      Tu peux toujours augmenter la distance délimitant les collisions devant toi de manière à englober l'arme.

      A priori pour le code j'aurais fait comme toi, bizarre que ça ne fonctionne pas...
      • Partager sur Facebook
      • Partager sur Twitter
        6 octobre 2007 à 12:39:49

        ben j'ai essayé d'augmenter la distance mais le probleme c'est qu'apres je passe plus sous les portes ^^
        • Partager sur Facebook
        • Partager sur Twitter
          6 octobre 2007 à 14:04:09

          Je ne sais dans quel paramètre exactement, mais au moment de définir les distances avant une collision, c'est une bouding box qui est définie.
          Donc tu peut à priori augmenter l'écart entre 2 cotés du cube sans toucher à l'écart entre les autres. Augmenter la distance devant et derrière sans toucher à celle des cotés et du dessus/dessous.
          • Partager sur Facebook
          • Partager sur Twitter
            6 octobre 2007 à 14:09:12

            Je sais pas si la parenté de deux meshs influe sur les collisions, peut-être que si c'etait l'arme le parent alors ce serait la collision de l'arme qui serait pris en compte non ?
            • Partager sur Facebook
            • Partager sur Twitter
              6 octobre 2007 à 14:10:49

              Peut être bien mais le problème resterais le même à l'envers, la caméra pourrait traverser les murs en reculant. ^^
              • Partager sur Facebook
              • Partager sur Twitter
                6 octobre 2007 à 14:12:13

                c'est ce que je pensait car quand j'associ une colision a la cam je pence que s'il y a une colision sa envoi un message a la cam pour lui dire de ne plus avencer (c'est une hypotese)

                et si on pouvait recupere se message qui viendrais de l'arme, il suffirait de l'envoyer a la cam.





                sinon j'ai contouné le probleme en reduisant la taille de l'arme et en augmentant les angles de colision.

                merci quand meme
                • Partager sur Facebook
                • Partager sur Twitter

                irrlicht colisions

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown