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 :

Intégration de gluUnproject en GLSL


Sujet :

OpenGL

  1. #1
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut Intégration de gluUnproject en GLSL
    Bonjour

    Alors j'intègre actuellement un shader me permettant de calculer la transluscence de la peau. Prenons l'exemple suivant. J'ai un visage éclairé de de derrière par un spot light. Maintenant j'ai une caméra qui regarde ce même visage de face. Je dois donc constaté de la translucence au niveau des oreilles comme sur l'image suivante.

    http://www.hostingpics.net/viewer.ph...anslucency.jpg

    Le principe est assez simple. Pour un pixel donné dans mon pixel shader (celui vu par la caméra) je récupère sa profondeur. Ensuite je récupère la profondeur de ce même pixel dans la shadow map de mon spot light. Une soustraction entre les deux valeurs me donne mon coefficient de translucence.
    Pour simplifier deux cas de figures se présente :
    - mon coefficient est très petit, ce qui signifie une épaisseur très petite, donc une translucence plus forte (oreilles...)
    - mon coefficient est très grand, grande épaisseur, translucence très faible.

    Maintenant ce que j'aimerai c'est convertir la profondeur récupérer dans ma shadow map en coordonnés monde. J'ai entendu parlé de gluUnproject. Cependant je n'ai pas accès à l'API OpenGL mais seulement au GLSL (j'utilise une plateforme interne à l'entreprise).

    Voici le code que j'ai pour le moment, c'est un intégration de gluUnproject
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    vec4 shadowCoord = gl_TexCoord[TEX_UNIT] / gl_TexCoord[TEX_UNIT].w;
     
    vec4 v = vec4(0.0, 0.0, 2.0 * texture2D(shadowMap, shadowCoord.st).z - 1.0, 1.0);
    vec4 v2 = vec4(0.0, 0.0, 2.0 * shadowCoord.z - 1.0, 1.0);
     
    float d1 = (inverseMVP * v).z;
    float d2 = (inverseMVP * v2).z;
     
    return abs(d1-d2);
    Mais ce code ne semble pas fonctionner.
    shadowCoord correspond aux coordonnées de textures de mon pixel dans ma shadow map
    inverseMVP correspond à gl_ModelViewProjectionMatrixInverse

    Est-ce que j'ai mal intégré la transformation matricielle de gluUnProject ?

    Kromagg
    C'est dans ses rêves que l'homme trouve la liberté cela fut, est et restera la vérité! (John Keating - Le cercle des poètes disparus)

  2. #2
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Tu n'as qu'à pomper son implémentation (qui est surement optimisable en glsl) :
    http://webcvs.freedesktop.org/mesa/M....6&view=markup

  3. #3
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Tu n'as qu'à pomper son implémentation (qui est surement optimisable en glsl) :
    http://webcvs.freedesktop.org/mesa/M....6&view=markup
    Merci mais je suis déjà tombé sur ce lien. Le problème c'est que dans ces calculs il fait appel au viewport et je n'ai pas accès aux données du viewport en GLSL
    C'est dans ses rêves que l'homme trouve la liberté cela fut, est et restera la vérité! (John Keating - Le cercle des poètes disparus)

  4. #4
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Il te suffit de les passer par une variable uniform.

  5. #5
    Membre habitué Avatar de Kromagg
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2008
    Messages
    275
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Août 2008
    Messages : 275
    Points : 198
    Points
    198
    Par défaut
    Citation Envoyé par oxyde356 Voir le message
    Il te suffit de les passer par une variable uniform.
    Le problème c'est que je ne peux pas. Je n'ai pas accès au commande OpenGL car je travaille sur une plateforme qui encapsule toutes ces commandes. La description de ma scène se fait via des fichiers VRML. Le seul moyen serait peut-être de recoder glViewport dans le shader.

    Kromagg
    C'est dans ses rêves que l'homme trouve la liberté cela fut, est et restera la vérité! (John Keating - Le cercle des poètes disparus)

  6. #6
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Le problème reste le même, il te faut absolument les donner de glViewport : la taille de la zone d'affichage, c'est une donnée indispensable tu ne pourras pas faire sans il faut que tu trouve un moyen pour la récupérer.

Discussions similaires

  1. Intégration de code c++
    Par Raoul le perdu dans le forum MFC
    Réponses: 2
    Dernier message: 24/02/2004, 08h54
  2. intégration de sons
    Par pal200 dans le forum OpenGL
    Réponses: 2
    Dernier message: 09/02/2004, 11h17
  3. [MFC][Excel] Intégration excel et MFC!
    Par fadoua dans le forum MFC
    Réponses: 2
    Dernier message: 22/12/2003, 10h51
  4. [NETBEANS] Intégration de Jboss dans NetBeans
    Par Kleb dans le forum NetBeans
    Réponses: 1
    Dernier message: 09/06/2003, 18h45

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