Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Irrlicht] System de particules.

    6 juillet 2007 à 13:07:58

    Salut,
    Je voudrais faire de la fumee avec irrlicht.
    Je sais que je dois utiliser les particules mais je sais pas comment l'utiliser.

    Merci d'avance.

    Gp2mv3
    • Partager sur Facebook
    • Partager sur Twitter
      6 juillet 2007 à 16:37:58

      il suffit de lire un TUTO sur les particules sur le site du zéro ^^


      EDIT: oups c'est en SDL... désolé :-°
      • Partager sur Facebook
      • Partager sur Twitter
        6 juillet 2007 à 18:24:11

        Même pas c'est en OpenGL. ^^

        Pour Irrlicht, je sais qu'il y a un exemple de code dans un des tutos officiels.

        Après il y a la doc, ça doit pas être bien sorcier...
        • Partager sur Facebook
        • Partager sur Twitter
          6 juillet 2007 à 18:39:52

          Il y a un exemple dans la doc qui fait quelque chose de tout moche, juste des gros carrés noirs qui montent.
          Mais sinon l'exemple du tuto 8 ou du tuto 11 peut t'aider car tu peut remplacer les gros carrés par des images ;)
          Comme sa tu peut faire du feu des laser des lucioles, enfin tout ceux que tu veut ^^
          • Partager sur Facebook
          • Partager sur Twitter
            6 juillet 2007 à 20:00:44

            Je vais aller me renseigner dans la doc alors.
            J'ai une autre question en rapport.
            Y a t'il moyen d'ajouter du vent aux particules?
            Si oui comment faire?
            Je n'ai rien vu dans la doc, il n'y avait qu'une fonction pour mettre de la graviter mais j'en ai pas besoin.

            Merci de votre aide.

            Gp2mv3
            • Partager sur Facebook
            • Partager sur Twitter
              6 juillet 2007 à 22:57:14

              Il y à plusieurs méthode pour le vent.
              La plus simple mais moins réaliste consiste à ajouter un angle aléatoire de la trajectoire des particules, tu peut le faire simplement en indiquant un entier dans le dernier paramettre de l'initialisation de l'emetteur.

              L'autre méthode(a ma connaissance) est de modifier la direction des particules.
              Plus compliquer a mettre en place mais plus concluant je pense ;)
              • Partager sur Facebook
              • Partager sur Twitter
                6 juillet 2007 à 23:04:06

                Et tu as pas un exemple d'utilisation?
                • Partager sur Facebook
                • Partager sur Twitter
                  7 juillet 2007 à 11:11:20

                  Avec du vent ?
                  Non, mais je peut te donner une exemple que j'ai fait et qui créer du feu un peu meilleur que celui proposer par Irrlicht.
                  Après il bouge un peu de droite à gauche(très légèrement) car les particules ne sont pas émisent d'un point mais d'une boundingbox, donc les flammes ne partent pas tout à fait du même endroit ce qui créer un oscillement ;)
                  De plus je rajoute 5° aléatoire à la trajectoire des particules(dernier paramètre de la création de l'émetteur), ce qui rajoute encore de l'oscillement.

                  Voici pour le code :
                  #include <iostream>
                  #include <IRR/irrlicht.h>

                  using namespace irr;
                  using namespace gui;

                  int main()
                  {
                      IrrlichtDevice* device = createDevice(video::EDT_OPENGL,
                      core::dimension2d<s32>(640, 480));
                     
                      if (device == 0)
                          return 1; // Impossible de créer la fenetre
                     
                      video::IVideoDriver* driver = device->getVideoDriver();
                      scene::ISceneManager* scenegraph =
                      device->getSceneManager();
                      IGUIEnvironment* guienv = device->getGUIEnvironment();
                     
                      driver->setTextureCreationFlag(video::ETCF_ALWAYS_32_BIT, true);
                     
                      // La camera
                      scene::ICameraSceneNode* camera =
                      scenegraph->addCameraSceneNodeFPS(0,100.0f,300.0f);
                      camera->setPosition(core::vector3df(-200,200,-200));
                     
                      // curseur invisible
                      device->getCursorControl()->setVisible(false);
                     
                      scenegraph->setAmbientLight(video::SColorf(1,1,1,0.0));
                     
                      // Système de particules
                      scene::IParticleSystemSceneNode* ps =
                      scenegraph->addParticleSystemSceneNode(false, light);
                         
                      ps->setParticleSize(core::dimension2d<f32>(7.0f, 14.0f));
                     
                      // création/initialisation de l'émmetteur
                      scene::IParticleEmitter* em = ps->createBoxEmitter(
                      core::aabbox3d<f32>(-5,0,-5,5,1,5),                         
                      core::vector3df(0.0f,0.03f,0.0f),
                      100,140,
                      video::SColor(0,64,64,64),
                      video::SColor(0,128,128,128),
                      400,1100,5);
                      ps->setEmitter(em);
                      ps->setPosition(light->getPosition());
                      em->drop();
                     
                      // Création/initialisation d'un affecteur
                      scene::IParticleAffector* paf =
                      ps->createFadeOutParticleAffector(
                      video::SColor(0,100,50,0),750);                                 
                      ps->addAffector(paf);
                      paf->drop();
                     
                      // ajustement des config materiel
                      ps->setMaterialFlag(video::EMF_LIGHTING, false);
                      ps->setMaterialTexture(0,
                      driver->getTexture("fireball.bmp"));
                      ps->setMaterialType(video::EMT_TRANSPARENT_VERTEX_ALPHA);
                     
                      // Création du compteur de FPS dans la fenêtre
                      core::stringw str;
                      IGUIStaticText *staticText =
                      guienv->addStaticText(str.c_str(),
                      core::rect<int>(10,10,95,25),
                      true, true,0,1);
                      staticText->setOverrideColor(video::SColor(255,255,255,255));
                      IGUIFont *font = guienv->getFont("fontcourier.bmp");
                      staticText->setOverrideFont(font);
                      int lastFPS = -1;
                      // Fin de la création du compteur de FPS dans la fenêtre
                     
                      while(device->run())
                          if (device->isWindowActive())
                          {
                              driver->beginScene(true, true, 0);
                             
                              scenegraph->drawAll();
                             
                                  guienv->drawAll();
                             
                              driver->endScene(); // Affichage
                             
                              /* Compteur de FPS */
                              int fps = driver->getFPS();
                             
                              if (lastFPS != fps)
                              {
                                  str = L"FX Lab : Feu";
                                  device->setWindowCaption(str.c_str());
                                 
                                  lastFPS = fps;
                                 
                                  str = "FPS : ";
                                  str += fps;
                                  staticText->setText(str.c_str());
                              }
                              /* Fin du compteur de FPS */
                          }
                         
                      device->drop(); // Destruction de la fenêtre
                     
                      return 0;
                  }
                   


                  L'image utiliser est fireball.bmp, que tu peut trouver dans le répertoire media du SDK de Irrlicht.

                  Pour le vent je te conseil la deuxieme méthode donc tu envois la direction de ton vent au deuxième paramètre de la création de l'émetter.
                  Si tu veut changer la direction du vent tu recréer un nouvel émetteur avec la nouvelle direction, puis tu réafecte le nouvel émetteur au système de particules.
                  En tout cas j'ai pas trouvé d'autre solutions, bien que cell-ci me parraisse lourde...
                  • Partager sur Facebook
                  • Partager sur Twitter
                    3 octobre 2007 à 19:44:52

                    sinon tu telecherge irrEdit et puis tu t'instire des exemples et tu en cree un mech :p
                    • Partager sur Facebook
                    • Partager sur Twitter
                      3 octobre 2007 à 20:04:34

                      Ouais c'est pas mal de déterrer les vieux sujets :p
                      • Partager sur Facebook
                      • Partager sur Twitter

                      [Irrlicht] System de particules.

                      × 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