IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

[2D] Simuler des fumées en 2D


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    mat.M
    Invité(e)
    Par défaut [2D] Simuler des fumées en 2D
    Bon je la refais parce que j'ai eu peu de sujet , tant pis si ça râle parce que je fais du multipost
    Voilà le sujet je n'ai pas eu de réponses satisfaisantes :
    http://www.developpez.net/forums/viewtopic.php?t=447154

    quelqu'un a-t-il des idées pour simuler en 2D des fumées ou explosions toutes simples comme par exemple dans Sudden Strike ver I et II

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    va voir ici, tu trouvera une petite demo de terrain avec plein de moteurs de particules differents (en appuyant sur 't').

    en gros pour la fumée, le plus simple est d'avoir un point dans l'espace qui est le point de depart de la fumée, puis tu genere des particules vers le haut en gris...
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Bon je la refais parce que j'ai eu peu de sujet , tant pis si ça râle parce que je fais du multipost
    Si tu as eu peu de réponse correcte c'est peut-être parce que tu avais choisi le mauvais forum ? Si tu veux des réponse de programmeurs de jeux, il faut poster sur ce forum ; sur le forum Algorithmes tu auras plus de chances de tomber sur des matheux purs et durs.
    En tout cas le multipost est bel et bien toujours interdit, merci d'éviter la prochaine fois (au pire demande à un modo de déplacer ton post...).

    Bref, il te faut coder un système de particules pour réaliser les effets du genre feu ou fumée. Tu trouveras des milliers de tutos un peu partout sur le net.

    C'est pour quel genre d'appli (un jeu ?) ? Tu utilises quelle bibliothèque 2D ?

  4. #4
    mat.M
    Invité(e)
    Par défaut
    Merci Bafman

    Citation Envoyé par Loulou24
    Bref, il te faut coder un système de particules pour réaliser les effets du genre feu ou fumée. Tu trouveras des milliers de tutos un peu partout sur le net.
    C'est pour quel genre d'appli (un jeu ?) ? Tu utilises quelle bibliothèque 2D ?
    Je me doute bien qu'en faisant google je vais avoir des tas de tutoriaux et des tas de réponses !
    Je n'utilise aucune bibliothèque externe, tout est développé natif.
    Ah si ! j'ai pris DSUTIL.cpp et DDUTIL.cpp du SDK de Direct X.

    Pour ce qui est du multipostage je suis navré que personne ,excepté Bafman n'est pu me donner un petit élement de réponse.
    J'ai posé la question dans le forum algortihmes parce que je veux un peu de théorie illustrée par du code.
    Est-ce que vous me comprenez , est-ce qu'on est sur la même longueur d'ondes ?

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je me doute bien qu'en faisant google je vais avoir des tas de tutoriaux et des tas de réponses !
    Alors fais-le...

    Je n'utilise aucune bibliothèque externe, tout est développé natif
    Tu descends jusqu'où dans le bas niveau ? API Win32 ? VGA ?

    Pour ce qui est du multipostage je suis navré que personne ,excepté Bafman n'est pu me donner un petit élement de réponse.
    J'ai posé la question dans le forum algortihmes parce que je veux un peu de théorie illustrée par du code.
    Est-ce que vous me comprenez , est-ce qu'on est sur la même longueur d'ondes ?
    Oui mais la théorie que tu souhaites, c'est la théorie de rendu. Or, comme tu t'en es rendu compte, la théorie que tu as récupérée sur le forum Algorithme, c'est des formules de physique assez inutiles pour l'instant.

  6. #6
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Loulou24
    Tu descends jusqu'où dans le bas niveau ? API Win32 ? VGA ?
    Mais non !
    Simplement IDirectDraw::Lock !
    VGA c'est fini on ne programme plus cela....
    Et on s'en fiche je veux simplement connaitre la logique que j'ai exposée dans le forum algorithmes pour tracer selon 2 boucles en X et Y.
    C'est pas compliqué , j'aimerais avoir des fumées comme dans le screenshot que j'ai donné.

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Mais non !
    Simplement IDirectDraw::Lock !
    Donc tu utilises DirectDraw...

    Et on s'en fiche je veux simplement connaitre la logique que j'ai exposée dans le forum algorithmes pour tracer selon 2 boucles en X et Y.
    C'est pas compliqué , j'aimerais avoir des fumées comme dans le screenshot que j'ai donné
    Je pense que ton idée initiale de parcourir en X et en Y pour dessiner ta fumée n'est pas la bonne. Typiquement, avec un système de particules, il suffit de "lacher" suffisamment de particules avec les bons paramètres (durée de vie, taille, vitesse initiale, ...) et de les laisser vivre.

    Maintenant, si tu te tapes tout pixel par pixel, peut-être devras-tu t'orienter vers une technique old-school utilisée par exemple dans les démos 4K (sans doute à base de fractale). Mais ça ne sera pas forcément très joli, et surtout pas très rapide.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Autre chose, pour des petites fumées 2D le plus optimisé est à mon avis d'utiliser des sprites animés. Comme ça tu ne te fais pas ch*** à gérer toi-même la fumée. Ce sera donc bien sûr la même fumée partout, mais ça ne pose de problème que rarement.

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2004
    Messages
    616
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 616
    Points : 164
    Points
    164
    Par défaut
    Je plussoie loulou, si tu peut te passer d'un moteur de particule avec des sprites, fait la Sinon ... amuse toi bien ^^

  10. #10
    mat.M
    Invité(e)
    Par défaut
    Aah ça y est je commence à avoir des réponses satisfaisantes
    Loulou24 l'idée des bitmaps animées c'est celle actuellement utilisée..
    mais cela ne donne pas des effets terribles.
    Avec les fractales est-ce qu'on peut faire basiquement simple ?

    Faut-il faire des fonctions récursives ?
    BOn je vais chercher

    Je pense que ton idée initiale de parcourir en X et en Y pour dessiner ta fumée n'est pas la bonne. Typiquement, avec un système de particules, il suffit de "lacher" suffisamment de particules avec les bons paramètres (durée de vie, taille, vitesse initiale, ...) et de les laisser vivre.
    oui c'est le cas actuel: les explosions et autres sont des entités bien distinctes qui sont lachées comme tu dis et ont une durée de vie.
    Merci encore

  11. #11
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Je plussoie aussi ...

    Le mieux, c'est de définir la fumée comme une suite de sprites, de taille et surtout de forme variable. Chaque sprite est un "nuage" élémentaire.

    A chaque déplacement, l'objet fumigène laisse un sprite derrière (à ses coordonnées), et tu dois gérer une durée de vie de ces éléments (pour qu'ils finissent par s'estomper et disparaitre).

    Au niveau de l'effet 2D, c'est assez efficace (et c'est ce que fait Blitzkrieg (le 1)).

    De plus, tu peux tester la validité de la chose avec un outil de retouche d'image (Paint Shop Pro, ou mieux The Gimp ). Il te suffit de définir un pinceau animé avec tes différents sprites (dans PSP, je crois me souvenir que ça s'appelle un "tube"), et de tracer ... ta souris laissera une trace de fumée (qui ne s'effacera pas, par contre).
    La FAQ Perl est par ici
    : La fonction "Rechercher", on aurait dû la nommer "Retrouver" - essayez et vous verrez pourquoi !

  12. #12
    Membre averti Avatar de Rafy
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    415
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 415
    Points : 417
    Points
    417
    Par défaut
    Citation Envoyé par Loulou24
    Typiquement, avec un système de particules, il suffit de "lacher" suffisamment de particules avec les bons paramètres (durée de vie, taille, vitesse initiale, ...) et de les laisser vivre.
    Tout à fait, avec un petit moteur de particule, il est facile de simuler un effet de fumée, d'explosion.
    Pas besoin d'Havok
    Mais les particules sont pas très facile à coder avec directX.
    Je veux dire par la qu'il y a une possibilité de stockage d'info (sur les texture des particules) dans les cartes graphiques... Le monsieur voulais du simple, je ne sais pas si c'est le mieux un mini moteur de particule avec une gestion un peu complexe derrière....
    Je pense que les texture animées sont bien adaptées à ce cas la...
    Première grosse démo en construction :
    http://bitbucket.org/rafy/exo2/

  13. #13
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Points : 5 323
    Points
    5 323
    Par défaut
    a mon avis, la methode avec le meilleurs rendement qualitée/vitesse c'est de faire un moteur de particules en affichant les sprites avec une texture animée.
    et pour gerer la texture animée, la methode la plus classe est d'utiliser une texture 3D qui stocke sur chaque slice une des animations, ainsi on a une interpolation parfaite entre les images...

    sinon niveau representation de phenomenes volumetriques, regarder les videos du cry engine 2, leurs nuages volumetiques sont tout simplement bluffants
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  14. #14
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par 2Eurocents
    Le mieux, c'est de définir la fumée comme une suite de sprites, de taille et surtout de forme variable. Chaque sprite est un "nuage" élémentaire.

    A chaque déplacement, l'objet fumigène laisse un sprite derrière (à ses coordonnées), et tu dois gérer une durée de vie de ces éléments (pour qu'ils finissent par s'estomper et disparaitre).
    MErci 2eurocents c'est très sympa cette réponse mais apparemment tu n'as pas tout à fait lu ou compris ce que j'ai écris précedemment .
    Je gére des entités appelés Fx empilées avec std::list , elles ont une durée de vie.
    Plutot qu'à un moment donné on fasse Tampon_double->Blt(Bitmap_explosion), je voudrais dessiner avec des pixels .
    Tel un bohnomme et sa neige dans une boule...

    [quote]
    Citation Envoyé par bafman
    et pour gerer la texture animée, la methode la plus classe est d'utiliser une texture 3D qui stocke sur chaque slice une des animations, ainsi on a une interpolation parfaite entre les images...
    je ne veux pas gérer de 3d et je crains que cette méthode requiert du temps d'exécution

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Tu as une raison particulière de vouloir absolument générer et écrire ta fumée pixel par pixel ?

  16. #16
    Membre éprouvé
    Avatar de Zenol
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    812
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 812
    Points : 1 054
    Points
    1 054
    Par défaut
    Citation Envoyé par mat.M
    Citation Envoyé par bafman
    et pour gerer la texture animée, la methode la plus classe est d'utiliser une texture 3D qui stocke sur chaque slice une des animations, ainsi on a une interpolation parfaite entre les images...
    je ne veux pas gérer de 3d et je crains que cette méthode requiert du temps d'exécution
    Je croi qu'il voulais dire une texture qui contien une superposition de texture. Style un mille feuille, ou chaque feuille est une etape de la texture.
    Mes articles Développez | Dernier article : Raytracer en haskell
    Network library : SedNL | Zenol's Blog : http://zenol.fr

    N'oubliez pas de consulter la FAQ et les cours et tutoriels.

  17. #17
    mat.M
    Invité(e)
    Par défaut
    Citation Envoyé par Laurent Gomila
    Tu as une raison particulière de vouloir absolument générer et écrire ta fumée pixel par pixel ?
    ooops ça date un peu..
    Oui je veux gérer pixel par pixel .
    J'attends tjs des suggestions

  18. #18
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Ah oui, ça pour être vieux...

    Oui je veux gérer pixel par pixel
    On ne sait toujours pas pourquoi.

  19. #19
    Rédacteur

    Avatar de millie
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    7 015
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 7 015
    Points : 9 818
    Points
    9 818
    Par défaut
    Pour créer totalement une simulation de fumée très proche de qqch de réelle, il y a des méthodes basés sur des simulations de fluide (qui se base que les équations de navier et stokes).

    J'écris actuellement un cours là dessus (que je n'ai pas fini), qui permet d'effectuer des effets de "fumée" qui ressemble à ça :



    Mais c'est assez difficile, je te donnerai le lien quand j'aurai fini.

    Faut imaginer que c'est animé. Le source que je donnerai ne fonctionnera que en 2 dimensions (possible à faire en 3 dimensions, mais ça risque de ramer séverement)..


    Edit : si on s'y prend mal, ça peut aussi ressembler à ça (ça ressemble plus trop à de la fumée).

    Je ne répondrai à aucune question technique en privé

  20. #20
    Membre émérite
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Points : 2 568
    Points
    2 568
    Par défaut
    Oui les algorithmes de gestions des fluides sont complexes.

    Sinon moteur de particules 2D (si tu as besoin que de 2D), sprites animés et la durée de vie du sprite défini sa transparence.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    transparence
    1|   _______
     |  /        \__
     | |            \__
     |/                 \ mort
    0|-------------------x-->t
    Un super graphisme qui montre par exemple la vie d'un sprite et sa transparence.

Discussions similaires

  1. Réponses: 11
    Dernier message: 04/01/2006, 23h57
  2. Réponses: 5
    Dernier message: 29/12/2005, 15h03
  3. [XHTML][CSS] simuler des frames avec des div
    Par piwai dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 09/11/2005, 13h26
  4. simuler des onclick d'une fiche autre que la présente
    Par bertrand_declerck dans le forum Langage
    Réponses: 3
    Dernier message: 30/08/2005, 10h04
  5. Simuler des actions au clavier
    Par dosbastos dans le forum AWT/Swing
    Réponses: 3
    Dernier message: 03/05/2005, 15h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo