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 :

Problème envoi de données du geometry shader au fragment shader [OpenGL 3.x]


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Problème envoi de données du geometry shader au fragment shader
    Bonjour,
    J'ai un problème avec l'envoi de données du geometry shader au fragment shader : le geometry shader envoi 2 vec3 mais je ne peux pas faire d’opérations dessus :
    Dans le geometry shader j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    out GS_OUT {
        vec3 Normal;
        vec3 FragPos;
    } gs_out
    ;
    Et je réceptionne les données dans le fragment shader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    in GS_OUT {
        vec3 Normal;
        vec3 FragPos;
    } fs_in;
    Jusqu'ici aucun problème, ces 2 codes marchent :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FragColor = vec4(fs_in.Normal, 1.0);
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FragColor = vec4(fs_in.FragPos, 1.0);
    Ce qui montre bien que les données sont bien envoyées.
    Le problème c'est que ce code ne marche pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FragColor = vec4(fs_in.FragPos + fs_in.Normal, 1.0);
    Il n'y a pas d'erreur de compilation mais l'écran devient blanc.
    Merci.

  2. #2
    Expert éminent sénior

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

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 391
    Points
    11 391
    Billets dans le blog
    11
    Par défaut
    Salut!
    On peut avoir des captures d'écran des 2 rendus non blancs? (donc l'affichage de la normale et l'affichage de la position)
    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
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Nom : fragpos.png
Affichages : 138
Taille : 42,6 KoNom : normal.png
Affichages : 134
Taille : 32,2 Ko

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai réussi à mieux situer le problème, il vient du geometry shader :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    while(inTriangle(vec3(pointEmit)))
    {
        gs_out.FragPos = pointReel;
        gl_Position = pointEmit;
        EmitVertex();
        EndPrimitive();
     
        vec3 pointReelY = pointReel + translationReelY;
        vec4 pointEmitY = pointEmit + translationEmiseY;
    }
    La fonction inTriangle revoit un bool et n’émet pas de point.
    Là on pourrait se dire qu'il y a un problème avec la fonction inTriangle mais ce code ne marche pas non plus (si dans le fragment je fais FragColor = vec4(fs_in.Normal + fs_in.FragPos, 1.0); ) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    bool continuer = true;
    while(continuer)
    {
        gs_out.FragPos = pointReel;
        gl_Position = pointEmit;
        EmitVertex();
        EndPrimitive();
     
        vec3 pointReelY = pointReel + translationReelY;
        vec4 pointEmitY = pointEmit + translationEmiseY;
     
        continuer = false;
    }
    Alors que ce code marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    int continuer = 0;
    while(continuer < 1)
    {
        gs_out.FragPos = pointReel;
        gl_Position = pointEmit;
        EmitVertex();
        EndPrimitive();
     
        vec3 pointReelY = pointReel + translationReelY;
        vec4 pointEmitY = pointEmit + translationEmiseY;
     
        continuer++;
    }
    Je ne comprend pas du tout pourquoi et ça ne marche pas si je fais continuer += inTriangle(vec3(pointEmit)) (dans ce cas inTriangle renvoi 0 ou 1) si inTriangle renvoi au moins une fois 0.
    C'est comme si ça ne marchait que si le nombre d’exécutions de la boucle était prédéfinit à l'avance.
    Est-il possible d'utiliser une boucle while en glsl ?
    Merci

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2016
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2016
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai à peu près résolu le problème (je dis "à peu près" car en faites je n'ai pas supprimé mais contourné le problème). Apparemment c'est un problème assez courant en GLSL concernant les boucles dynamiques.
    Pour mon problème j'ai tout simplement ajouté le vecteur de l’opération (ici c'était Normal + FragPos) dans les variables envoyés par le geometry shader. Ainsi c'est donc le geometry shader qui s'occupe des calculs et non le fragment shader.
    Je ne sais pas pourquoi ce problème intervient et comment le corriger réellement donc si quelqu'un à une solution je suis preneur

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

Discussions similaires

  1. Client/Serveur problème envoi de données
    Par france38 dans le forum Débuter
    Réponses: 0
    Dernier message: 02/05/2011, 10h49
  2. Problème envoi de données de jQuery et PHP
    Par Paul75 dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 05/01/2010, 10h31
  3. Réponses: 3
    Dernier message: 02/03/2009, 22h34
  4. Problème envoie de données sur le port Serie
    Par petiteso dans le forum C#
    Réponses: 6
    Dernier message: 06/12/2007, 13h33
  5. Réponses: 10
    Dernier message: 07/02/2007, 07h43

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