Salut,
Je decouvre les shaders depuis quelques jours maintenant, et j'essaye d'implementer la luminosite per pixel via un shader.
Le probleme c'est que mon resultat n'est qu'un plan miserablement gris... et je ne comprend pas pourquoi j'ai l'impression de suivre correctement le tuto4 de typhoonlabs...
Voila en gros ce que j'obtiens avec sans shader :
et avec :
Je m'aventure donc a en deduire que mon code marche en ce qui concerne la partie OpenGL...
Au niveau du code du shader c'est globalement le meme que dans le tuto typhoonlabs, je le paste quand meme au cas ou :
Vertex Shader :
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 uniform sampler2D texture; varying vec3 normal; varying vec3 position; //uniform vec3 CAMERA_POSITION; void main(void) { gl_TexCoord[0] = gl_TextureMatrix[0] * gl_MultiTexCoord0; gl_Position = ftransform(); normal = gl_Normal.xyz; position = gl_Vertex.xyz; }
J'ai bien conscience que ca fait un peu "debugguez mon programme pour moi" donc je suis tout a fait preneur d'une ligne directrice pour chercher la solution a mon probleme
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 uniform sampler2D texture; //uniform vec3 CAMERA_POSITION; varying vec3 normal; varying vec3 position; void main(void) { vec4 color = texture2D(texture, vec2(gl_TexCoord[0].x, gl_TexCoord[0].y)); vec4 specular = vec4(0.0); vec4 diffuse; vec3 norm = normalize(normal); vec3 lightVector = gl_LightSource[0].position.xyz - position; float dist = length(lightVector); float attenuation = 1.0 / (gl_LightSource[0].constantAttenuation + gl_LightSource[0].linearAttenuation * dist + gl_LightSource[0].quadraticAttenuation * dist * dist); lightVector = normalize(lightVector); float nxDir = max(0.0, dot(norm, lightVector)); diffuse = gl_LightSource[0].diffuse * nxDir * attenuation; // if (nxDir != 0.0) // { // vec3 cameraVector = normalize(CAMERA_POSITION - position.xyz); // vec3 halfVector = normalize(lightVector + cameraVector); // float nxHalf = max(0.0, dot(norm, halfVector)); // float specularPower = pow(nxHalf, gl_FrontMaterial.shininess); // specular = gl_LightSource[0].specular * specularPower * attenuation; // } gl_FragColor = gl_LightSource[0].ambient + (diffuse * vec4(color.rgb, 1.0)) + (specular * color.a); }
Merci beaucoup a ceux qui prendront le temps de m'aider
Partager