bonjour
voici mon code
je ne comprend pas pourquoi il ne marche pas ?
tout se lance, je vois mes 2 mesh mais malheureusement je passe à travers...
un tout grand merci d'avance
Lionel
#include <irr/irrlicht.h> #include <irr/IMetaTriangleSelector.h> using namespace irr; using namespace core; using namespace scene; using namespace video; using namespace io; using namespace gui; int main(void) { //Cette ligne va créer un contexte d'affichage OpenGL IrrlichtDevice *device = createDevice (video::EDT_OPENGL, core::dimension2d<s32>(800,600),32,false,true,false,0); //On associe un driver à la fenêtre IVideoDriver* driver = device->getVideoDriver (); //Et on crée un gestionnaire de scène (scenegraph) ISceneManager *scenegraph = device->getSceneManager (); //scenegraph->loadScene("map5.irr"); IAnimatedMesh* mesh2 = scenegraph->getMesh("decor.tour_eiffel0.01.b3d"); IAnimatedMesh* mesh3 = scenegraph->getMesh("solmur.b3d"); ISceneNode* node2 = 0; ISceneNode* node3 = 0; if (mesh2) { node2 = scenegraph->addOctTreeSceneNode(mesh2->getMesh(0)); node2->setPosition(core::vector3df(100,0,100)); node2->setMaterialTexture(0, driver->getTexture("sydney.bmp") ); node2->setMaterialFlag(EMF_LIGHTING, false); } if (mesh3) { node3 = scenegraph->addOctTreeSceneNode(mesh3->getMesh(0)); node3->setPosition(core::vector3df(0,0,100)); node3->setMaterialTexture(0, driver->getTexture("sydney.bmp") ); node3->setMaterialFlag(EMF_LIGHTING, false); node3->setScale(core::vector3df(10,10,10)); } ITriangleSelector* selector = 0; ITriangleSelector* selector3 = 0; selector = scenegraph->createTriangleSelector(mesh2,node2); node2->setTriangleSelector(selector); selector3 = scenegraph->createTriangleSelector(mesh3,node3); node3->setTriangleSelector(selector3); IMetaTriangleSelector* metaSelector = scenegraph->createMetaTriangleSelector(); metaSelector->addTriangleSelector(selector); metaSelector->addTriangleSelector(selector3); ICameraSceneNode * camera1 = scenegraph->addCameraSceneNodeFPS(0,50.0f,60,-1,0,0,true); if (camera1) { camera1->setPosition(core::vector3df(100,10,0)); camera1->setRotation(core::vector3df(0,260.0f,0)); } device->getCursorControl()->setVisible(false); ISceneNodeAnimatorCollisionResponse* anim = scenegraph->createCollisionResponseAnimator(metaSelector, camera1, core::vector3df(5,5,5), core::vector3df(0,0,0), core::vector3df(0,50,0)); metaSelector->drop(); camera1->addAnimator(anim); anim->drop(); while (device->run ()) { //On indique qu'on démarre la scène driver->beginScene (true, true, video::SColor (1,255,255,255)); //On calcule le rendu scenegraph->drawAll (); //On affiche le rendu à l'écran driver->endScene (); } //On libère la mémoire en détruisant le device device->drop (); return 0; }
Hors ligne
par contre j'ai une autre question
voila mes parametres
ISceneNodeAnimatorCollisionResponse* anim = scenegraph->createCollisionResponseAnimator(metaSelector, camera1, core::vector3df(1,5,1), core::vector3df(0,-3,0), core::vector3df(0,0,0));
que dois je faire pour qu'il ne monte pas sur les murs (les murs à 90 degrés, il ne les montes pas mais si c'est une mur à 85 degrés il monte dessus...
merci
Lionel
Hors ligne
peut être est ce mieux d'utiliser newton... mais je préfèrerai dans un 1er temps éviter
merci
Hors ligne
Une solution que j'envisage de mon coté c'est d'utiliser une line3d qui race une ligne qui part du personnage jusqu'à une certaine distance, pour vérifier qu'il n'y a pas collision avant d'effectuer un mouvement. Il y a peut être une meilleur solution !!
Hors ligne