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 :

Particule shader [GLSL]


Sujet :

OpenGL

  1. #1
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut Particule shader
    Bonjour,

    Je souhaite coder un shader pour mes particules.
    Pour le moment j'ai mon ensemble de particules que j'affiche avec des GL_POINTS.
    Le problème est que je n'arrive pas à afficher de grosse particule. Seul le pixel de la particule est affiché. Je voudrais pouvoir "colorier" le voisinage des pixels en fonction de la position de la particule mais aussi de sa vitesse et de sa direction.

    Nom : screenshot4.png
Affichages : 372
Taille : 4,6 Ko

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #version 330 core
     
    layout(location = 0) in vec3 vertexPosition_modelspace;
     
    uniform mat4 Model;
    uniform mat4 View;
    uniform mat4 Projection;
     
    void main()
    {
    	gl_Position =  Projection*View*Model *vec4(vertexPosition_modelspace,1);
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #version 330 core
     
    out vec4 color;
     
    void main()
    {
    	vec2 p = gl_FragCoord.xy;
    	color = vec4(p.x/1600, p.y/900, 1.0, 1.0);
    }

    Merci d'avance,
    Robin

  2. #2
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    Tu peux peux rendre tes particules sous forme de triangles (2 triangles pour faire un carré / rectangle), et tu pourras jouer avec plusieurs pixels dans ton fragment shader avec éventuellement une texture pour tes particules : un dégradé alpha radial est assez courant).

    Tu peux aussi continuer à rendre des GL_POINTS et avoir un geometry shader qui transforme chaque point en 2 triangles ou en plusieurs points.

    Niveau performance, aucune idée de qu'elle solution est préférable.
    (Note qu'avec un geometry shader, la géométrie supplémentaire n'existera qu'a l'affichage, ça peut être gênant si tu as besoin de faire des tests de collisions par exemple).

    Tu peux fournir les informations de vitesse / direction via une texture.

  3. #3
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut
    Je n'avais pas pensé à la texture

    Merci beaucoup !!!

  4. #4
    Membre à l'essai
    Homme Profil pro
    Collégien
    Inscrit en
    Avril 2015
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Collégien

    Informations forums :
    Inscription : Avril 2015
    Messages : 9
    Points : 12
    Points
    12
    Par défaut
    Bonjour,
    concernant la taille des particules, lorsque dessinée avec GL_POINTS, il suffit d'activer le mode Point Size pour le programme courant, avec glEnable(GL_PROGRAM_POINT_SIZE), puis d'utiliser la variable built-in dans le shader nommée gl_PointSize afin de lui donner sa taille.
    Par contre (à confirmer) je ne sais pas s'il est possible de colorier différemment un même point.
    Pour dessiner des particules arrondies, j'utilise un geometry shader qui, à partir d'une primitive de types GL_POINTS, dessine un carré, ce dernier me permettant d'afficher une sphère qui est coloriée ensuite dans le fragment shader en fonction de différents attributs (position, velocité etc...).

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    On peut faire rapidement des particules (avec texture) grâce à l'extension des point sprites.
    On peut aussi utiliser la fonction glPointSize, qui change la taille des points (cf, la réponse de Ayak973, qui est plus à jour que moi ). Par contre, ça reste des gros carrés "moche".

    On peut colorier tous les points différement, en utilisant un tampon de couleur. À chaque sommet (ou point), vous associer une couleur. Après, il faut juste adapter les shader pour prendre en compte la couleur, rien de très compliqué.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut
    La nouvelle interrogation est : est-il possible de colorier un des carrés "moche" de plusieurs couleur.
    En tout cas merci pour ses réponses

  7. #7
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Plusieurs couleur pour un même point, ce n'est pas possible.
    C'est dans un tel cas que l'on ferait du point sprite pour pouvoir utiliser une texture.
    Ou alors, on utilise le geometry shader, pour avec un point, en générer 4 ou plus et leur appliquer des couleurs (?).
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  8. #8
    Membre habitué Avatar de robinsondesbois
    Homme Profil pro
    Etudiant
    Inscrit en
    Avril 2012
    Messages
    171
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Etudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2012
    Messages : 171
    Points : 173
    Points
    173
    Par défaut
    oki

    gl_FragCoord.xy donne bien les coordonnées courante et gl_PointCoord.xy les coordonnées de mon point ?

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Rendu de particules et billboarding avec le geometry shader (GLSL)
    Par LittleWhite dans le forum Développement 2D, 3D et Jeux
    Réponses: 0
    Dernier message: 13/10/2014, 22h23
  2. moteur de particule utilisant les shader
    Par Gakusei dans le forum OpenGL
    Réponses: 1
    Dernier message: 31/01/2012, 11h01
  3. moteur de particules :Dessiner un point
    Par houssa dans le forum OpenGL
    Réponses: 2
    Dernier message: 25/06/2003, 22h13
  4. Vertex et Pixel Shader
    Par Riko dans le forum OpenGL
    Réponses: 2
    Dernier message: 06/06/2003, 16h45
  5. carte graphique et pixels shader
    Par yeeep dans le forum DirectX
    Réponses: 2
    Dernier message: 26/04/2003, 10h54

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