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 de shaders ?


Sujet :

OpenGL

Mode arborescent

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 Problème de shaders ?
    Bonjour !

    Je travaille encore et toujours sur mon moteur 3D et j'éprouve actuellement quelques problèmes d'affichage, dont je n'arrive pas à trouver la source (cf. pièces jointes).
    Sur les pièces jointes on voit donc qu'il arrive de drôles de choses à l'oeil de ce pauvre ducky (Capture1), artefacts qui disparaissent plus ou moins (oui je pense qu'ils ne disparaissent pas mais sont réduits) lorsqu'on s'approche dudit oeil (Capture2).
    Pensant que ça pouvait venir des calculs sur flottants, je suis passé de float en double pour tous les calculs ainsi que les variables shaders (vertex buffers et matrices), mais sans changement.

    Donc je viens vous demander si vous avez une idée de là où ça pourrait venir.

    Je vous mets le code des shaders ayant servi au rendu de ce modèle :

    Vertex 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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    #version 140
    precision highp float;
    in vec4 vertex;
    in vec3 normal;
    uniform vec4 c3d_AmbientLight;
    uniform vec4 c3d_MatAmbient;
    uniform vec4 c3d_MatDiffuse;
    uniform vec4 c3d_MatEmissive;
    uniform vec4 c3d_MatSpecular;
    uniform float c3d_MatShininess;
    uniform mat4 ProjectionModelViewMatrix;
    uniform mat4 ModelViewMatrix;
    uniform mat3 NormalMatrix;
    uniform vec4 c3d_LightsPosition[3];
    uniform vec4 c3d_LightsDiffuse[3];
    uniform vec4 c3d_LightsAmbient[3];
    uniform vec4 c3d_LightsSpecular[3];
    out vec3 vtx_normal;
    out vec3 vtx_vertex;
    out vec3 raw_normal;
    out vec3 vtx_positions[3];
    out vec4 vtx_diffuses[3];
    out vec4 vtx_speculars[3];
    out vec4 vtx_ambient;
    out float vtx_shininess;
    void main()
    {
    	vtx_normal = normalize( NormalMatrix * normal);
    	raw_normal = normal;
    	raw_normal.x = abs( raw_normal.x);
    	raw_normal.y = abs( raw_normal.y);
    	raw_normal.z = abs( raw_normal.z);
    	vtx_vertex = normalize( (ModelViewMatrix * vertex).xyz);
    	vtx_ambient = c3d_AmbientLight;
    	int i;
    	for (i = 0 ; i < 3 ; ++i)
    	{
    		vtx_positions[i] = normalize( (ModelViewMatrix * c3d_LightsPosition[i]).xyz);
    		vtx_diffuses[i] = c3d_LightsDiffuse[i] * c3d_MatDiffuse;
    		vtx_ambient += c3d_LightsAmbient[i];
    		vtx_speculars[i] = c3d_LightsSpecular[i] * c3d_MatSpecular;
    	}
    	vtx_ambient = (vtx_ambient * c3d_MatAmbient) + c3d_MatAmbient + c3d_MatEmissive;
    	vtx_shininess = c3d_MatShininess;
    	gl_Position = ProjectionModelViewMatrix * vertex;
    }
    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
    22
    23
    24
    25
    #version 140
    precision highp float;
    in vec3 vtx_normal;
    in vec3 raw_normal;
    in vec3 vtx_vertex;
    in vec3 vtx_positions[3];
    in vec4 vtx_diffuses[3];
    in vec4 vtx_speculars[3];
    in vec4 vtx_ambient;
    in float vtx_shininess;
    out vec4 out_FragColor;
    void main()
    {
      out_FragColor = vtx_ambient;
      int i;
      vec4 l_diffuse;
      vec4 l_specular;
      for (i = 0 ; i < 3 ; i++)
      {
    	  l_diffuse = vtx_diffuses[i] * max( dot( vtx_positions[i], vtx_normal), 0.0);
    	  l_specular = vtx_speculars[i] * pow( max( dot( normalize( vtx_positions[i] - vtx_vertex), vtx_normal), 0.0), vtx_shininess);
    	  out_FragColor += l_diffuse + l_specular;
      }
      out_FragColor /= float( i );
    }
    Images attachées Images attachées   
    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).

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

Discussions similaires

  1. problème de shader DepthMask
    Par therev123 dans le forum Unity
    Réponses: 8
    Dernier message: 12/08/2014, 20h20
  2. Problème étrange - shader multi texturing
    Par Awakening dans le forum OpenGL
    Réponses: 1
    Dernier message: 20/12/2011, 18h08
  3. Problème Pixel Shader
    Par Monkey56 dans le forum Windows Presentation Foundation
    Réponses: 0
    Dernier message: 13/12/2010, 16h21
  4. Multitexturing et shaders = problème!
    Par filoo dans le forum OpenGL
    Réponses: 2
    Dernier message: 20/07/2007, 15h24
  5. Problème facétisation shaders
    Par Khastarax dans le forum OpenGL
    Réponses: 8
    Dernier message: 10/05/2007, 15h34

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