28-05-2008 16:54:44
- lionelconvent
- Membres
- Date d'inscription:
- Messages: 4
- IP: 91.178.113.249
- Courriel
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
28-05-2008 17:58:07
- lionelconvent
- Membres
- Date d'inscription:
- Messages: 4
- IP: 91.178.113.249
- Courriel
oups mill excuse, j'avait juste mit des valeur trop petite dans
ISceneNodeAnimatorCollisionResponse* anim = scenegraph->createCollisionResponseAnimator(metaSelector, camera1, core::vector3df(5,5,5), core::vector3df(0,0,0), core::vector3df(0,50,0));
metaSelector->drop();
tout marche nickel
Lionel
Hors ligne
28-05-2008 18:31:24
- lionelconvent
- Membres
- Date d'inscription:
- Messages: 4
- IP: 91.178.113.249
- Courriel
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
28-05-2008 19:12:09
- lionelconvent
- Membres
- Date d'inscription:
- Messages: 4
- IP: 91.178.113.249
- Courriel
peut être est ce mieux d'utiliser newton... mais je préfèrerai dans un 1er temps éviter
merci
Hors ligne
29-05-2008 04:28:47
- nikska
- Membres
- Date d'inscription:
- Messages: 36
- IP: 82.239.138.147
- Courriel
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



