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 :

affichage d'objets multiples avec GLSL [OpenGL 2.x]


Sujet :

OpenGL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Par défaut affichage d'objets multiples avec GLSL
    bonjour,comme indiqué dans le titre,j'ai un petit problème que je n'arrive pas a résoudre,et qui concerne l'affichage avec des shaders.
    J'ai commencé a apprendre ceux ci il n'y a pas si longtemps,ducoup pardonnez le noob que je suis si il m'arrive de heurter l'illustre intelligence de certains ici par mon QI négatif.

    Voila,je programme actuellement un moteur de particules.
    Ma première idée avant l'utilisation des shaders,c'est de faire de minuscules triangles a coup de glVertex auxquels j'attribue des propriétés physiques,donc chutes,paraboles etc etc.
    Le problème,c'est que c'est que faire des triangles en faisant des rendus de couleurs via le pipeline fixe,c'est moche...le deuxième problème,c'est que je n'aime pas ce qui est moche
    Ce qui m'amène a l'utilisation des shaders(qui a fait mon bonheur...m'oyez,toutes ces couleurs )...
    Et la...voici le truc qui cloche...(je vous link une vidéo de ce que j'arrive a faire avec des shaders pour l'instant
    ):
    Ce que je veux obtenir,ce sont des particules "lumineuses" comme sur la vidéo...le problème c'est que ces particules sont en fait dessinées sur un seul et unique GL_QUAD,ce qui fait que les couleurs,qui vont de (0,0) jusqu'a (taille de l'écran,taille de l'écran) sont uniformes,je veux dire par la que les couleurs ne peuvent pas passer du rouge flambant,au noir directement,ce qui m'amène a la problématique du sujet:

    Comment faire pour garder une meme qualité de rendu,en utilisant des particules comme celles ci?
    -je ne peux pas utiliser de formes géométriques GL_TRIANGLES,GL_QUADS etc comme quand j'utilisais le pipeline fixe...J'ai essayé,et c'est assez moche lorsque le fragment shader rend des couleurs a l'intérieur,celles ci diffèrent du fond d'écran noir,ce qui fait que les formes géométriques sont visibles,si elles sont trop grandes (dans un moteur de particules on est pas censé voir des rectangles de 2m² censés representer vos particules) et si elles sont trop petites,l'effet du shader ne se voit pas...de plus,comme je l'ai dis plus haut,ses couleurs ne vont pas plus loin que la forme dans lequel il est rendu,vu que c'est un shader et qu'ils s'execute sur des vertex.

    -y'a t'il un moyen de faire ceci avec un seul rectangle ou sont rendus les effets du shader,et que la simulation des particules se fasse seulement dans le fragment shader,ou le vertex shader...le nombre des corps étant variable,j'ai des doutes concernant cette méthode.

    Enfin bref,vous feriez comment vous?

  2. #2
    Expert confirmé

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 034
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 034
    Billets dans le blog
    12
    Par défaut
    Bonjour !

    Je ne sais pas si ça répondrait à ta problématique, mais en tout cas, quand je me mettrai aux particules, je pense utiliser la technique décrite ICI. Par contre je n'ai pas encore eu le temps de me pencher sur les détails.
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 151
    Billets dans le blog
    150
    Par défaut
    Bonjour,

    Je me demande quel est votre rendu actuel, je dois avouer ne pas avoir tout saisi.

    Il faut savoir qu'il y a une triche dans la vidéo, c'est qu'il y a un halo, autour des particules et, j'ose croire, que cet halo est produit avec du multipass et un shader qui floute le rendu.
    Sinon, la technique des particules, oui, ce sont des GL_QUADS, ou deux triangles qui forment un carré, ou des GL_POINTS et les rectangles seront produits par un geometry shader.

    Ensuite, vous parlez de couleur uniforme. Oui, mais les couleurs uniformes sont des floats, et donc vous pouvez avoir des couleurs intermédiaires avec des (0.6, 0.2, 0.2), par exemple (un rouge pas trop rouge), donc je ne comprend pas votre remarque.
    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.

  4. #4
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Par défaut
    haha,en fait il n'y a aucun effet de floutage,ni rien
    voici le code du fragment shader
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
     
    void main(){
     
    vec2 p = (gl_FragCoord.xy - 0.7* resolution) / min(resolution.x, resolution.y);
      vec2 t = vec2(gl_FragCoord.xy / resolution);
     
    	vec3 c = vec3(0);
        float y=0.;
    	float x=0.;
    	for(int i = 0; i < 300; i++) {
    		float t = 0.7 * PI * float(i*8) / 50.0 * time * 0.5;
            x = angle.x*cos(color1*t+x+y);
            y = angle.y*sin(color2*t+y+x);
    		vec2 o = 0.5 * vec2(x, y);
    		float r = fract(y+x);
    		float g = 1. - r;
    		c += 0.0009 / (length(p-o)) * vec3(r, g, x+y);
    	}
     
    	gl_FragColor = vec4(c, 1);
    }
    la question c'est comment adapter ce code a des milliers de particules qui ont chacune un comportement différent sans pour autant altérer le rendu

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 151
    Billets dans le blog
    150
    Par défaut
    Qu'appelez vous comportement différent ?
    Le shader est exécuté pour chaque particule, indépendamment.
    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 actif
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Par défaut
    LittleWhite:
    En fait oui,les particules lorsque j'utilise le pipeline fixe,je ferais ça directement avec des GL_TRIANGLES.
    le truc,c'est que si je fait ça comme ça,le shader va dessiner a l'interieur de ces triangles,et ça n'aura pas l'effet escompté parce que la difference de couleurs entre ce qu'il y'aura dans le triangle,et la fenetre exterieure fera que l'on verra ces triangles,si ils sont trop grands,ou qu'on ne verra aucune différence avec le rendu en pipeline fixe,si ils sont trop petits,a part une grosse chute de perf.
    lorsque je parlais des couleurs,en fait l'endroit ou ce shader dessine c'est un enorme GL_QUADS qui fait la taille de l'écran...
    regardez attentivement la distribution de couleurs a travers tout l'écran...vous verrez qu'il n'y en a aucune qui est a (0,0,0,0),ce sont toutes des nuances qui vont décroissantes vers les bords de l'écran sans jamais atteindre le noir.Et étant donné qu'un fragment shader necessite obligatoirement des vertex pour travailler,j'imagine que je suis obligé de dessiner des primitives(comme le GL_QUAD de l'écran),pour chaque particules.
    Ce que je voulais savoir,c'est y'a t'il un moyen de dessiner ces particules sans avoir recours a ces autres primitives,c'est a dire directement dans le gros GL_QUAD.
    j'espere que j'ai bien expliqué le problème,c'est vrai qu'il est un peu compliqué a comprendre...Ou peut etre est ce moi qui ne m'y prend pas correctement...
    Je viens peut etre d'avoir une idée,je verrais si ça marche.

  7. #7
    Membre actif
    Inscrit en
    Janvier 2012
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Janvier 2012
    Messages : 39
    Par défaut
    sur le shader,les particules qui sont générées ne sont pas des sommets de primitives...c'est vraiment le shader qui fait tout ça.
    Il n'y a que 4 vertices,c'est ceux de l'écran,mais le reste est généré par le shader.
    j'ai une idée, ça consiste a exporter le code du fragment shader dans l'appli opengl,et l'adapter pour que les positions de x et de y correspondent aux positions des particules...et,sur le fragment shader,je ne ferais qu'un simple gl_FragColor=vec4(c,0),avec un c comme attribute.

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


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

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 27 151
    Billets dans le blog
    150
    Par défaut
    Avec juste un GL_QUADS qui recouvrent l'écran, ce n'est pas possible. Car, vous ne pourrez pas parcourir une liste de particules pour afficher la bonne couleur pour les pixels au bon endroit.
    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.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 20/10/2008, 15h38
  2. Réponses: 2
    Dernier message: 14/06/2008, 18h03
  3. Objet Query avec un héritage multiple
    Par QAYS dans le forum Langage
    Réponses: 5
    Dernier message: 01/11/2007, 10h18
  4. Objets/Classes avec un SGBD
    Par tiboleo dans le forum Décisions SGBD
    Réponses: 13
    Dernier message: 09/11/2003, 16h04
  5. Réponses: 27
    Dernier message: 03/02/2003, 12h27

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