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 :

[GLSL] Problème de normales et camera


Sujet :

OpenGL

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    28
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Suisse

    Informations forums :
    Inscription : Juillet 2007
    Messages : 28
    Points : 12
    Points
    12
    Par défaut [GLSL] Problème de normales et camera
    Hello, je me met sérieusement aux shaders et je me retrouve face à quelques problèmes dont je ne me sort pas... Pas faute d'avoir éplucher la doc et les tutoriaux...

    Voici ce que donne mon shader actuel qui souhaite exploiter un effet Fresnel (1-dot(N, EyeVec)). Donc faire varié qqchose en fonction de l'orientation vers la caméra...

    Comme vous le voyez, le problème est que l'effet est là mais ne suit pas la camera et tourne avec le model.

    Voici comment je fait mes calculs de projection:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    cam.x = cos(a)*10.0;
        cam.y = -5.0;
        cam.z = sin(a)*10.0;
        gluLookAt(cam.x,cam.y,cam.z,
            0.0,0.0,0.0,
         0.0f,1.0f,0.0f);
     
    ... 
    glUniform3f(cameraPosLoc, cam.x, cam.y, cam.z);
    Et voici les shaders:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    varying vec3 normal, position, camera;
    uniform vec3 cameraPos;
    void main()
    { 
       normal = gl_Normal.xyz;
       position = vec3(gl_ModelViewMatrix * gl_Vertex);
       camera = vec3(gl_NormalMatrix * cameraPos);
       lightVec = vec3(gl_LightSource[0].position.xyz - position); 
       gl_Position = ftransform(); 
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    varying vec3 normal, position, camera;
    uniform vec3 cameraPos;
    void main (void)
    {
    vec3 N = normalize(normal);
    vec3 E =  normalize(camera - position); 
     
    float FresnelTerm = 1.0 - dot(N,-E);
     
    vec4 final_color = vec4(vec3(1.0,1.0,1.0)*pow(FresnelTerm, 20.0), 1.0);
     
     gl_FragColor = final_color;   
    }
    Une idée sur le souci ?
    Images attachées Images attachées  

  2. #2
    Membre régulier
    Inscrit en
    Décembre 2005
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Décembre 2005
    Messages : 117
    Points : 109
    Points
    109
    Par défaut
    Oui une petite idée un peu tardive... est-ce que par hazard un shader ne réagit pas aussi en fonction de la lumière?
    As tu éssayé de déplacer tes sources lumineuses pour voir ce qu'il en est?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 80
    Points : 62
    Points
    62
    Par défaut
    Il me semble que :

    position = vec3(gl_ModelViewMatrix * gl_Vertex);
    transfert le vertex dans le repere de la camera, et donc, a ce moment là,
    le vecteur de vue est simplement "position". En fait : camera = vec3(0,0,0);

    De plus, si tu met ton vertex dans le repere de la vue, alors met y aussi la lumiere, sinon c'est faux. ne pas mettre :

    lightVec = vec3(gl_LightSource[0].position.xyz - position);
    mais

    lightVec = vec3((gl_ModelViewMatrix * gl_LightSource[0].position).xyz - position);
    J'espere que ca t'aidera, meme si ton post est un peu vieu. J'suis tombé dessus par hasard.

    HopeLeaves.

Discussions similaires

  1. Problème de normales avec OpenGL
    Par ndech dans le forum OpenGL
    Réponses: 13
    Dernier message: 28/04/2010, 11h53
  2. Réponses: 0
    Dernier message: 24/02/2009, 04h36
  3. [VSTO2005]Word problème avec Normal.dot
    Par totoen dans le forum C#
    Réponses: 18
    Dernier message: 11/04/2008, 13h41
  4. [GLSL] Problème de compilation VS/FS
    Par Happy dans le forum OpenGL
    Réponses: 3
    Dernier message: 13/08/2007, 14h21
  5. Problème ou normal : Boolean / GetValue ?
    Par mchicoix dans le forum XMLRAD
    Réponses: 11
    Dernier message: 14/11/2005, 23h27

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