Message #7798
Sujet: Gérer la gravité d'un véhicule et pas de la caméra
| Type | Date | Auteur | Contenu |
|---|---|---|---|
| Création du message | 23-01-2010 22:11:54 | jonath313 |
Voila mon probleme, j'utilise la detection de colision d'irrlicht, cela fonction très bien mais que avec la caméra d'où le :
irr::scene::ICameraSceneNode *camera = sceneManager->addCameraSceneNodeFPS (0, 100.0f, 0.9f,ID_IsNotPickable, keyMap, 5,true, 4.f); // La caméra Sauf que moi je voudrais que ce soit un véhicule qui subisse la gravité et je ne vois pas comment faire cela car ma caméra est fixer derrière le véhicule. Je vous file le code : #include <IRR/irrlicht.h> using namespace irr; using namespace std; //////////////////////////////////////////////////////////////////////////////// ////////////////////ENUMERATION POUR LES COLISIONS////////////////////////////// //////////////////////////////////////////////////////////////////////////////// #ifdef _MSC_VER #pragma comment(lib, "Irrlicht.lib") #endif enum { // Je utiliser ce ID ISceneNode d'indiquer un noeud de scène qui est // Pas cueille par getSceneNodeAndCollisionPointFromRay () ID_IsNotPickable = 0, // Je utiliser cet indicateur dans ISceneNode identifiants pour indiquer que le // Node scène peut être ramassé par la sélection ray. IDFlag_IsPickable = 1 << 0, // J utiliser cet indicateur dans ISceneNode identifiants pour indiquer que le // Node scène peut être mis en évidence. Dans cet exemple, le // Homonids peut être mis en évidence, mais le niveau de maillage ne peut pas. IDFlag_IsHighlightable = 1 << 1 }; int main(void) { 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 *sceneManager = device->getSceneManager (); device->getCursorControl ()-> setVisible (false); // curseur invisible irr::scene::IAnimatedMesh* modele = sceneManager->getMesh("azert.md2"); // chargement du camion irr::scene::IAnimatedMeshSceneNode* Nmodele = sceneManager->addAnimatedMeshSceneNode(modele); // creation du noeud Nmodele->setPosition(irr::core::vector3df(4000.0,1000.0,-1000.0)) ; Nmodele->setRotation(irr::core::vector3df(0.0,90.0,0.0)) ; Nmodele->setMaterialFlag(irr::video::EMF_LIGHTING, false); Nmodele->setMaterialTexture(0,driver->getTexture("fer2.bmp") ); Nmodele->setFrameLoop(1,20); Nmodele->setScale (irr::core::vector3df(5.4f, 5.4f, 5.4f)); //irr::scene::ICameraSceneNode *camera = sceneManager->addCameraSceneNodeFPS ( 0,100.0f,3.0f); // camera->setRotation (irr::core::vector3df(0,90 ,0 )); //////////////////////////////////////////////////////////////////////////////// //////////////////////////////////LA CAMERA///////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// irr::SKeyMap keyMap[5]; keyMap[0].Action = irr::EKA_MOVE_FORWARD; keyMap[0].KeyCode = irr::KEY_KEY_Z; keyMap[1].Action = irr::EKA_MOVE_BACKWARD; keyMap[1].KeyCode = irr::KEY_KEY_S; keyMap[2].Action = irr::EKA_STRAFE_LEFT; keyMap[2].KeyCode = irr::KEY_KEY_Q; keyMap[3].Action = irr::EKA_STRAFE_RIGHT; keyMap[3].KeyCode = irr::KEY_KEY_D; keyMap[4].Action = irr::EKA_JUMP_UP; keyMap[4].KeyCode = irr::KEY_SPACE; irr::scene::ICameraSceneNode *camera = sceneManager->addCameraSceneNodeFPS (0, 100.0f, 0.9f,ID_IsNotPickable, keyMap, 5,true, 4.f); // La caméra camera->setPosition(irr::core::vector3df(-3000.0, 210.0, -50.0)); // positionnement camera->setFarValue(camera->getFarValue() + 20000.0f); camera->setNearValue(0.03f); camera->setTarget(irr::core::vector3df(-7.132532f, -0.294052f, -5.266525f)); //Nmodele->setParent(camera); //////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////LA LUMIERE/////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// scene::ILightSceneNode * light = sceneManager->addLightSceneNode(0, core::vector3df(-60,100,400),video::SColorf(1.0f,1.0f,1.0f,1.0f), 600.0f); light->setID(ID_IsNotPickable); // Make it an invalid target for selection. // Remember which scene node is highlighted scene::ISceneNode* highlightedSceneNode = 0; scene::ISceneCollisionManager* collMan = sceneManager->getSceneCollisionManager(); int lastFPS = -1; //////////////////////////////////////////////////////////////////////////////// /////////////////////////////////LES OBJETS 3D////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// //LA MAP scene::IAnimatedMesh* circuit = sceneManager->getMesh("circuit2.3ds"); scene::IMeshSceneNode* Ncircuit = 0; // Le maillage Quake est cueille, mais ne soit pas mis en évidence. if (circuit) Ncircuit = sceneManager->addOctTreeSceneNode(circuit->getMesh(0), 0, IDFlag_IsPickable); Ncircuit->setScale(irr::core::vector3df(25.3f, 25.3f, 25.3f)); Ncircuit->setMaterialTexture(0,driver->getTexture("IRRLICHT.bmp") ); Ncircuit->setMaterialFlag(irr::video::EMF_LIGHTING, false); //////////////////////////////////////////////////////////////////////////////// /////////////////////////////////LES COLLISIONS////////////////////////////////// //////////////////////////////////////////////////////////////////////////////// scene::ITriangleSelector* selector = 0; if (circuit) { Ncircuit->setPosition(core::vector3df(0,-2000,0)); selector = sceneManager->createOctTreeTriangleSelector(Ncircuit->getMesh(), Ncircuit, 128); Ncircuit->setTriangleSelector(selector); // We're not done with this selector yet, so don't drop it. } if (selector) { scene::ISceneNodeAnimator* anim = sceneManager->createCollisionResponseAnimator( selector, camera, core::vector3df(30,260,30),core::vector3df(0,-10,0), core::vector3df(0,30,0)); selector->drop(); // As soon as we're done with the selector, drop it. camera->addAnimator(anim); anim->drop(); // And likewise, drop the animator when we're done referring to it. } //Ajout de la petite étoile // Add the billboard. scene::IBillboardSceneNode * bill = sceneManager->addBillboardSceneNode(); bill->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR ); bill->setMaterialTexture(0, driver->getTexture("texture/particle.bmp")); bill->setMaterialFlag(video::EMF_LIGHTING, false); bill->setMaterialFlag(video::EMF_ZBUFFER, false); bill->setSize(core::dimension2d<f32>(20.0f, 20.0f)); bill->setID(ID_IsNotPickable); // This ensures that we don't accidentally ray-pick it while (device->run()) // la boucle de rendu { driver->beginScene(true,true, irr::video::SColor(0,200,200,200)); sceneManager->drawAll (); driver->endScene (); } device->drop (); return 0; } Quelqu'un peut m'aider svp? merci d'avance |
| Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
|---|---|---|---|---|
|
Préférences cookies Corrections |
![]() ![]() ![]() ![]() |
Propulsé par Django xhtml 1.0 css 2.1 |
884 membres 1440 sujets 11337 messages |
Dernier membre inscrit: Saidov17 163 invités en ligne membre en ligne: - RSS Feed |