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 :

écran noir avec un shader d'éclairage au pixel près


Sujet :

OpenGL

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut écran noir avec un shader d'éclairage au pixel près
    Bonjour,
    je cafouille un peu avec le vertex shader, avant dans mon fragment shader j'utilisais gl_FragCoord pour la coordonnée du fragment mais on m'a dis que cela concernait la coordonnée à l'écran et pas la coordonnée de l'oeuil j'ai donc créé une varying variable dans mon vertex shader qui reçoit la position du vertex, c'est depuis que je fais ça que j'ai un écran noir...

    PS : avec renderMonkey par défaut dans le vertex shader j'ai
    gl_Position = ftransform();
    le problem viendrait il de là ?

    voici mon code (vertex puis fragment shader):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    varying vec3 normal ;
    varying vec4 coordinate ;
     
    void main(void)
    {
       normal=gl_Normal ;
       coordinate = gl_ModelViewMatrix * gl_Vertex;
       gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex ; //ftransform();
    }
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    varying vec3 normal ;
    varying vec4 coordinate ;//coordinate of the fragment
     
    void main(void)
    {
     
    //ambient component
       vec4 lightVector = vec4(gl_LightSource[0].position - coordinate) ;
     
       vec4 ambientLight = gl_FrontMaterial.ambient * gl_LightSource[0].ambient ;
     
    //diffuse component
       //lightVector = normalize(lightVector) ;
       float intensity = max(dot (normal, lightVector.xyz), 0.0);
       vec4 diffuseLight = gl_FrontMaterial.diffuse * gl_LightSource[0].diffuse * intensity ;
     
    //specular component
     
       //lightVector = normalize(lightVector) ;
     
       vec4 eyeVector = vec4(gl_ModelViewMatrixInverse[3][0] - coordinate.x,
                             gl_ModelViewMatrixInverse[3][1] - coordinate.y,
                             gl_ModelViewMatrixInverse[3][2] - coordinate.z, 0.0);
     
       //eyeVector.xyz = normalize(eyeVector.xyz);
       vec3 eyePlusLight = normalize(eyeVector.xyz + lightVector.xyz) ;
     
          vec4 specularLight=gl_FrontMaterial.specular * /*red*/gl_LightSource[0].specular  *pow(max(dot(eyePlusLight, normal), 0.0), gl_FrontMaterial.shininess);
     
     
    //attenuation  
       float attenuation = 1.0/(gl_LightSource[0].constantAttenuation + 
          gl_LightSource[0].linearAttenuation*distance(gl_LightSource[0].position, coordinate)
           + pow(distance(gl_LightSource[0].position, coordinate), 2.0)) ; 
     
       gl_FragColor = gl_FrontMaterial.emission + (ambientLight + diffuseLight + specularLight)*attenuation ; 
     
    }

  2. #2
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    j'ai normalisé les vecteurs et mis l'attenuation en commentaire et ça marche, le probleme c'est que je voudrais implémenter l'attenuation et je ne vois pas d'erreur a ce niveau là, pouvez vous m'aider ?

  3. #3
    Expert confirmé
    Avatar de shenron666
    Homme Profil pro
    avancé
    Inscrit en
    Avril 2005
    Messages
    2 524
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : avancé

    Informations forums :
    Inscription : Avril 2005
    Messages : 2 524
    Points : 5 184
    Points
    5 184
    Par défaut
    elle vient d'où ta formule pour le calcul de l'atténuation ?
    j'ai l'impression que c'est le résultat de ton calcul qui est erroné ou mal utilisé

    perso, je calculerai l'atténuation en prenant comme informations :
    la distance entre le point à éclairer et la lumière
    une formule pour une atténuation linéaire ou une atténuation non linéaire

    donc je prend la couleur du pixel
    je multiplie cette couleur par l'intensité lumineuse qu'il reçoit
    je module avec la couleur ambiante
    et j'obtiens la couleur du pixel

    bon c'est surement pas très clair mais avec un peu de chance tu comprendras ma pensée
    Tutoriels OpenGL
    Je ne répondrai à aucune question en MP
    - Si c'est simple tu dis que c'est compliqué et tu le fait
    - Si c'est compliqué tu dis que c'est simple et tu le sous-traite ou le fait faire par un stagiaire.

Discussions similaires

  1. écran noir avec curseur clignotant
    Par jowelle dans le forum Ordinateurs
    Réponses: 7
    Dernier message: 28/10/2012, 14h57
  2. écran noir avec windows média center
    Par rvm31 dans le forum Windows 7
    Réponses: 4
    Dernier message: 30/04/2012, 20h07
  3. Vista : écran noir avec curseur
    Par Uango dans le forum Windows Vista
    Réponses: 12
    Dernier message: 24/03/2012, 11h55
  4. [VBO/Shaders] L'art d'obtenir un écran noir :/
    Par Solaroid dans le forum OpenGL
    Réponses: 16
    Dernier message: 13/02/2012, 17h23
  5. pas d'éclairage du tout avec un shader "phong shading&q
    Par captainSeb dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/06/2005, 11h48

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