Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Irrlicht] problème de particules

plusieurs emitter pour un IParticleSystemNode.

    20 juin 2007 à 3:29:31

    Bonjour tout le monde !

    En ce moment je m'amuse un peu avec les capacitées d'irrlicht.
    Je viens de découvrir les particules, très pratique pour faire des éffets spéciaux.

    Je voudais maintenant faire une exlosion, pour faire simple je reprend le modèle du feu(que je viens de terminer :p ) que j'amplifi et auquel je voudrais rajouter des traits lumineux horizontal à la base de l'explosion.
    Une image parle mieux, je voudrais arriver à créer le genre de trait que l'on vois sur cette image : http://www.dizoo.net/creations/screens/mush_1125298433.jpg

    Alors je me suis dis le plus simple est de faire un IParticleSystemNode comme pour le feu et de modifier la trajectoire des particules directement dans la boucle de rendu.
    Comme la trajectoire et son intensité est défini par un core::vectord3df() j'utilise la méthode core::vector3df::rotateXZBy(15, ps->getPosition()) où ps est le IParticleSystemNode.

    Concrètement sa donne sa :

    while(device->run())
            if(device->isWindowActive())
            {
                driver->beginScene(true, true, 0);
               
                    direction.rotateXZBy(rotate, ps->getPosition());
                    direction.setLength(0.5);
                   
                   
                    if(timer->getTime() - last > 30)
                    {
                        direction.normalize();
                       
                        em = ps->createBoxEmitter(
                                 core::aabbox3d<f32>(-3,0,-3,3,1,3),
                                 direction,
                                 100,150,
                                 video::SColor(0,255,255,255),
                                 video::SColor(0,255,255,255),
                                 400,1100,
                                 0);
                        ps->setEmitter(em);
                        last = timer->getTime();
                    }
                   
                    scenegraph->drawAll();
                    rotate += 15;
               
                    guienv->drawAll();
               
                driver->endScene();
               
            }


    Je limite par un timer le temps entre deux modification car sinon si l'emetteur est changer trop souvent alors les particules n'ont pas le temps de s'afficher...

    Mais voila le resultat obtenu n'est pas terrible : http://img225.imageshack.us/img225/5213/particulepbin5.jpg
    En fait les particules ne décrivent pas une formes droite mais de courbe, logique puisque j'effectue une rotation sur la trajectoire.
    Donc je cherche une solution pour que mes particules effectuent une ligne droite et qu'il y en ait plusieurs en même temps.
    Les lignes devront apparaître et disparaitre en même temps, juste le temps d'une petite explosion : quelque fraction de secondes.
    Je voudrais garder un seul IParticleSystemNode car sinon sa devient lourd à integrer dans le code...


    Merci à tous ^^
    • Partager sur Facebook
    • Partager sur Twitter
      21 juin 2007 à 5:08:33

      Tu crois vraiment que c'est raisonnable de faire un "up" à 4h20 du matin ?!
      • Partager sur Facebook
      • Partager sur Twitter
        21 juin 2007 à 18:32:39

        Bah quand le topic commence a plonger je vois pas le problème.
        Moi je passe et pas grand monde va le lire a cette heure la certe mais moi je peut pas passer le matin, dumoins pas avant 13h donc je fais en sorte que les gens puisse le lire le matin...

        Menfin je m'attendais de l'aide, pas a des remarques sur mon emploi du temps...

        EDIT : puisque je peut poster plus tôt j'en profite pour dire que pour mon problème je pensais a faire une rotation de l'image sur les particule.
        Si je donne une image en forme de trait et que je l'allonge j'ai bien un trait mais faut-il encore pouvoir faire une rotation a l'image, quelqu'un sait ?
        • Partager sur Facebook
        • Partager sur Twitter
          21 juin 2007 à 20:13:46

          Nan, oublie ce que j'ai dit, je me suis gourré.

          J'ai cru que tu avais écris les 2 posts le même jour, j'ai pas vu qu'il y avait 1 jour d'intervalle :).

          Sinon, pour ta question : ben, un émetteur de particules rectangulaires très allongées te conviendra.

          Je sais pas comment ça marche dans irrlicht, mais chaque particule doit être représenté par un sprite, et tu devrais pouvoir donner une orientation initiale à chaque sprite représentant une particule.
          • Partager sur Facebook
          • Partager sur Twitter
            22 juin 2007 à 3:42:16

            Ok alors j'oublie ^^

            Pour les particules en fait je fait un émetteur et je met une image (le sprite) sur les particule.
            En fait sa je le faisait déjà, j'avais éssayer en faisant justement une image allonger mais le problème est que je dois faire des trait sur 360° !

            Ducoup quand mon émetteur tourne mes sprite eux tournent dans la direction vers laquelle il vont mais l'image ne tourne pas.
            Je sais pas si tu vois ce que je veut dire mais en gros, il faut que je fasse une rotation de l'image du sprite pour que sa done toujours une trajectore interieur->exterieur.

            Et justement je sais pas faire cette rotation, j'ai chercher partout dans la doc et j'ai cru trouver une solution.

            Je me suis dis que si je modifiait la taille de l'image(chose possible)je pourrait simuler une rotation.
            Par exemple la tailler 1;50 = 0°, la taille 50;1 = 90° ect...
            C'est ce que tu propose, ma logique allais dans le même sens ^^
            Mais en fait sa ne marche pas, j'obtiens pas de bons résultats, voir aucuns résultat(fenêtre noire).


            Donc est ce qu'il y à une méthode plus propre pour faire une rotation sur une image ?
            • Partager sur Facebook
            • Partager sur Twitter
              22 juin 2007 à 11:09:06

              Un billboard, l'image fera toujours face à la caméra.

              Mais je ne pense pas que les particules puissent être des billboards (j'en sais rien au fait :-° ).

              • Partager sur Facebook
              • Partager sur Twitter
                22 juin 2007 à 16:03:34

                J'y avais pensé aussi :p
                Mais sa ne marche pas non plus.

                C'est bizarre il y à quand même bien une solution non ?
                • Partager sur Facebook
                • Partager sur Twitter
                  22 juin 2007 à 16:46:22

                  Dans ce tuto, le feu n'est jamais "plat".

                  N'ayant jamais fait de générateur de particules sous Irrlicht pour le moment, je ne peut pas te dire comment ni pourquoi.
                  Mais la solution est dans le code. ;)
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 juin 2007 à 18:48:41

                    En fait c'est qu'une impression.
                    C'est juste des particule en 2D qui sont emise non pas a partir d'un point mais d'une boite, ducoup elle apparaisse sur une surface ce qui donne l'impression de volume.

                    C'est déjà le code que j'utilisais je me suis inspiré de celui la pour faire un code créant du feu un peu plus réel que celui d'Irrlicht, voici le resultat que j'avais obtenu :
                    Image utilisateur


                    Menfin quoi qu'il en soit le problème porte tujours sur la rotation je pense ...
                    • Partager sur Facebook
                    • Partager sur Twitter

                    [Irrlicht] problème 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