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:
Et voici les shaders:
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);
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(); }Une idée sur le souci ?
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; }
Partager