[irrlicht]Generateur a particules Difficulté : 25/100
Publié le 05/02/2008 à 19h 51min par Marco565



Un générateur de particule



Competances et materiel requis
Une bonne maitrise du moteur 3d Irrlicht et bien sur son SDK.

Aide
Pour ce qui ne saurais pas ce que c'est un generateur de particules c'est ce que l'ont trouve dans tout bon jeux video, en effet les particules augmente le réalisme d'un jeux. Les particules sont utilisé par exemple lors d'une explosion des milliers de particules sont crée, ou par exemple pour créer une fontaine d'eau ....

dans irrlicht vous pouvez trouver dans la doc le prototype de la fonction ici.

bon voila ma tache est achevée bonne chance pour votre code



Correction



Vous n'y êtes pas arrivé, ne vous inquiétez pas sa viendras. En attendant regardez attentivement le code et puis essayer de le refaire.


Code : cpp
  1. #include <iostream>
  2. #include <IRR/irrlicht.h>
  3.  
  4. using namespace irr;
  5. using namespace std;
  6.  
  7. int main(int argc, char *argv[])
  8. {
  9. //Cette ligne va créer un contexte d'affichage OpenGL
  10. IrrlichtDevice *device = createDevice (video::EDT_OPENGL,
  11. core::dimension2d<s32>(800,600),32,false,true,false,0);
  12.  
  13. //On associe un driver à la fenêtre
  14. video::IVideoDriver* driver = device->getVideoDriver ();
  15. //Et on crée un gestionnaire de scène (scenegraph)
  16. scene::ISceneManager *scenegraph = device->getSceneManager ();
  17. //on cache le curseur
  18. //device->getCursorControl()->setVisible(false);
  19.  
  20.  
  21. // // // // La caméra // // // //
  22. scene::ICameraSceneNode *camera = scenegraph->addCameraSceneNode ();
  23. camera->setPosition(core::vector3df(150.0, 75.0, -100.0));
  24.  
  25.  
  26.  
  27.  
  28. // // // // la salle // // // //
  29. scene::IAnimatedMesh *room = scenegraph->getMesh("room.3ds");
  30. scene::IMeshSceneNode *Nroom = scenegraph->addMeshSceneNode(room->getMesh(0));
  31. Nroom->setMaterialFlag(video::EMF_LIGHTING, true);
  32. //On applique une texture à la salle.
  33. scenegraph->getMeshManipulator()->makePlanarTextureMapping(room->getMesh(0), 0.01f);
  34. Nroom->setMaterialTexture( 0, driver->getTexture("rockwall.bmp"));
  35. Nroom->setScale(core::vector3df(0.5,0.5,0.5));
  36.  
  37.  
  38.  
  39. // // // // la lumière // // // //
  40. scene::ISceneNode* lumiere;
  41. lumiere = scenegraph->addLightSceneNode(Nroom, core::vector3df(0,0,0),
  42. video::SColorf(0.2f, .2f, .2f, 1.0f), 10.0f);
  43.  
  44. scene::ISceneNodeAnimator *aim = scenegraph->createFlyCircleAnimator(
  45. core::vector3df(0,150,0),250.0f);
  46.  
  47. lumiere->addAnimator(aim);
  48. lumiere = scenegraph->addBillboardSceneNode(lumiere,
  49. core::dimension2d<f32>(50, 50));
  50. lumiere->setMaterialFlag(video::EMF_LIGHTING, false);
  51.  
  52. //on rend la couleur noire transparente
  53. lumiere->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
  54. lumiere->setMaterialTexture(0, driver->getTexture("particlewhite.bmp"));
  55.  
  56.  
  57.  
  58.  
  59. // // // // //Systeme a particules // // // // //
  60. scene::IParticleSystemSceneNode *ps = scenegraph->addParticleSystemSceneNode(false);
  61. ps->setPosition(core::vector3df(-35,30,25));
  62. ps->setScale(core::vector3df(2,2,2));
  63. ps->setParticleSize(core::dimension2d<f32>(20.0f, 10.0f));
  64.  
  65. scene::IParticleEmitter* em = ps->createBoxEmitter(
  66. core::aabbox3d<f32>(-7,0,-7,7,1,7),
  67. core::vector3df(0.0f,0.03f,0.0f),
  68. 80,100,
  69. video::SColor(0,255,255,255), video::SColor(0,255,255,255),
  70. 800,2000);
  71. ps->setEmitter(em);
  72.  
  73. scene::IParticleAffector* paf = ps->createFadeOutParticleAffector();
  74. ps->addAffector(paf);
  75. ps->setMaterialFlag(video::EMF_LIGHTING, false);
  76. ps->setMaterialTexture(0, driver->getTexture("particle.bmp"));
  77. ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);
  78.  
  79.  
  80.  
  81.  
  82. //La boucle de rendu
  83. while (device->run ())
  84. {
  85. //On indique qu'on démarre la scène
  86. driver->beginScene (true, true, video::SColor (255,255,255,255));
  87.  
  88. //On calcule le rendu
  89. scenegraph->drawAll ();
  90. //On affiche le rendu à l'écran
  91. driver->endScene ();
  92. }
  93.  
  94. //On libère la mémoire en détruisant le device
  95. device->drop ();
  96. }
  97.  
  98.