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

OpenGL Discussion :

Rendre un volume (fluide)


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut Rendre un volume (fluide)
    Bonjour,

    Je voudrais fournir une interface OpenGL à un solveur d'écoulement de fluides que j'ai écrit, mais je n'arrive qu'à faire des trucs assez moches !

    En fait je dispose dans 2 VBO d'un tableau 3D contenant la couleur, de chaque point, et un tableau associé contenant les coordonnées x, y, z. J'aimerais donc afficher ça à l'écran.

    Le volume est en fait un parallélépipède.

    Le truc, c'est que l'action se déroule à l'intérieur de ce parallélépidède, puisqu'en fait, j'ai 2 fluides qui cohabitent, le but étant d'admirer l'évolution du premier à l'intérieur du 2ème.

    Je suis relativment novice en OpenGL, j'ai essayé de jouer avec la transparence (je fais varier l'alpha selon le fluide que je veux observer), mais ça ne donne pas quelque chose d'acceptable du tout... !

    Mon but n'est pas d'avoir quelque chose de magnifique, mais simplement quelque chose ou on voit ce qui se passe !


    Auriez-vous une idée ?


    Merci !

  2. #2
    Membre très actif
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Par défaut
    bonjour,

    quelques snapshots ou videos seraient les bienvenus je pense, histoire que l'on comprenne ce que vous cherchez à obtenir

    vous voulez simuler des précipités ?

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut
    Salut,

    Malheureusement je n'ai pas de snapshot à proposer (si je vous montre ce que j'ai déjà fait, on ne verra absolument rien).

    Le plus simple est d'imaginer quelqu'un versant du lait dans son thé dans un verre transparent, je voudrais pouvoir rendre ça correctement (sans le verre bien sur )
    Mes données se composent de, en chaque point, la fraction massique de lait par rapport au thé (que j'utilise pour la couleur), et l'emplacement des vertices (qui est en fait un quadrillage uniforme de 100x50x50 points)

    J'ai fait un essai infructueux qui a consisté à afficher ces données à partir de VBO avec de bêtes GL_POINTS, ou le thé avait une composante alpha proche de 0, et le lait proche de 1, mais je n'ai rien eu de vraiment transparent

  4. #4
    Expert confirmé

    Profil pro
    Fabricant et casseur d'avions
    Inscrit en
    Avril 2004
    Messages
    3 820
    Détails du profil
    Informations personnelles :
    Localisation : France, Tarn (Midi Pyrénées)

    Informations professionnelles :
    Activité : Fabricant et casseur d'avions
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2004
    Messages : 3 820
    Par défaut
    Salut,

    Citation Envoyé par bloomenthal Voir le message
    Le plus simple est d'imaginer quelqu'un versant du lait dans son thé dans un verre transparent, je voudrais pouvoir rendre ça correctement (sans le verre bien sur )
    Mes données se composent de, en chaque point, la fraction massique de lait par rapport au thé (que j'utilise pour la couleur), et l'emplacement des vertices (qui est en fait un quadrillage uniforme de 100x50x50 points)
    Plutôt que de jouer sur les transparences, pourquoi ne pas justement n'afficher que le thé? Et éventuellement la surface libre du lait afin de voir où il se situe. Pour le reste, même si il n'y a rien, on sait forcément que c'est du lait... Et tu joue sur la couleur de tes points de thé en fonction de la fraction massique de thé (plus c'est concentré, plus c'est couleur... thé? Ou moins transparent)
    "Errare humanum est, sed perseverare diabolicum"

    Ma page sur DVP.com

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut
    Salut, et merci !

    Effectivement, ça serait un excellent début (dans l'idéal, j'aimerais aussi visualiser la masse volumique du fluide, qui n'est pas constante partout, mais bon, je vais pas en demander trop vu ma faible pratique d'OpenGL, sauf si vous avez une idée)

    Le "problème" à cette solution, c'est que la simulation derrière est un truc est un code assez important écrit en CUDA, les données sont donc déjà sur la CG. Vu que la lourdeur du calcul est déjà assez critique, il faut que je puisse faire ça à la volée sur la CG, sinon ça va ramer pas mal (je suis déjà limite, et je dois accepter des tailles de grilles beaucoup plus grandes)

    J'utilise un VBO partagé CUDA/OpenGL pour l'affichage, plus un autre VBO statique contenant les coordonnées des vertices. Comment pourrais-je faire pour dire à OpenGL de n'afficher que les points dont la fraction massique est > 0.1 par exemple ? Ca me paraissait assez compliqué / couteux de faire ça, j'avais donc abandonné.
    Je pensais à faire un post traitement coté CUDA ou je reconstruirais un tableau contenant uniquement les points significatifs, mais en fait, ce genre de chose toute bête n'est absolument pas parallélisable en temps raisonnable (je pressens l'utilisation intensive d'atomics)

    J'ai essayé de regarder du côté des shaders en GLSL, mais vu que je ne suis pas très à l'aise j'ai bien peur de n'aboutir à rien. Est-ce compliqué de faire un shader (vertex shader je suppose) implémentant ça ? (affichage ssi la couleur est > 0.1 par exemple)


    Voilà voilà... merci encore.

    Je suis tout à fait preneur d'autres idées aussi. (et ça m'intéresserait aussi de savoir comment sont implémentés les rendus "pros" de ce genre de scène 3D)

  6. #6
    Membre extrêmement actif

    Profil pro
    Inscrit en
    Février 2006
    Messages
    2 408
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 2 408
    Par défaut
    Citation Envoyé par bloomenthal Voir le message
    J'ai essayé de regarder du côté des shaders en GLSL, mais vu que je ne suis pas très à l'aise j'ai bien peur de n'aboutir à rien. Est-ce compliqué de faire un shader (vertex shader je suppose) implémentant ça ? (affichage ssi la couleur est > 0.1 par exemple)
    sachant si j'ai bien compris que tu as en entrée une liste de points, la seule manière simple (selon moi) de n'afficher qu'un sous-ensemble c'est le geometry shader où tu pourras soit ajouter de la géométrie, soit en retirer.

  7. #7
    Membre très actif
    Profil pro
    Dev
    Inscrit en
    Mai 2009
    Messages
    257
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Dev

    Informations forums :
    Inscription : Mai 2009
    Messages : 257
    Par défaut
    Citation Envoyé par bloomenthal Voir le message
    Salut,

    Malheureusement je n'ai pas de snapshot à proposer (si je vous montre ce que j'ai déjà fait, on ne verra absolument rien).

    Le plus simple est d'imaginer quelqu'un versant du lait dans son thé dans un verre transparent, je voudrais pouvoir rendre ça correctement (sans le verre bien sur )
    Mes données se composent de, en chaque point, la fraction massique de lait par rapport au thé (que j'utilise pour la couleur), et l'emplacement des vertices (qui est en fait un quadrillage uniforme de 100x50x50 points)

    J'ai fait un essai infructueux qui a consisté à afficher ces données à partir de VBO avec de bêtes GL_POINTS, ou le thé avait une composante alpha proche de 0, et le lait proche de 1, mais je n'ai rien eu de vraiment transparent
    ah je vois il s'agit d'un système de particules en fait

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    27
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 27
    Par défaut
    Effectivement, je n'avais jamais regardé du côté des geometry shaders, mais là ce que je veux faire, ça m'a l'air vraiment cadeau !
    Je vais faire ça donc. Merci beaucoup ! (en espérant que tout se passe bien)

Discussions similaires

  1. Volume d'un fluide
    Par diodd dans le forum MATLAB
    Réponses: 1
    Dernier message: 17/02/2010, 11h31
  2. Rendre une animation (sliders) plus fluide
    Par boutmos dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 11/05/2009, 12h38
  3. Comment rendre transparent le tour d un icone
    Par NeoRonin dans le forum Composants VCL
    Réponses: 7
    Dernier message: 03/03/2003, 02h40
  4. Rendre le curseur invisible sur une fenêtre donnée
    Par Meuhmeuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 22/11/2002, 13h25

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