Bonjour,
Je suis en train de suivre le tutoriel D'OpenGL moderne sur ce site. Je suis plus ou moins coincé sur le shader d'illumination.
Le shader du tuto fonctionne correctement mais je n'arrive pas à avoir un rendu lisse de mes faces.
Pourtant j'effectue bien mes calcules dans le fragment shader.
Voici le vertex shader
et le 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
26
27
28
29
30 #version 330 core layout(location = 0) in vec3 vertexPosition_modelspace; layout(location = 1) in vec3 vertexNormal; // Output data out vec3 Position_worldspace; out vec3 Normal_cameraspace; out vec3 LightDirection_cameraspace; out vec3 EyeDirection_cameraspace; uniform mat4 Model; uniform mat4 View; uniform mat4 Projection; uniform vec3 PosLamp01; uniform vec3 PosCamera; void main() { gl_Position = Projection*View*Model * vec4(vertexPosition_modelspace,1); Position_worldspace = (Model * vec4(vertexPosition_modelspace,1)).xyz; Normal_cameraspace = (View * Model * vec4(vertexNormal, 0)).xyz; vec3 vertexPosition_cameraspace = ( View * Model * vec4(vertexPosition_modelspace,1)).xyz; EyeDirection_cameraspace = PosCamera - vertexPosition_cameraspace; vec3 LightPosition_cameraspace = ( View * vec4(PosLamp01,1)).xyz; LightDirection_cameraspace = LightPosition_cameraspace + EyeDirection_cameraspace; }
Merci d'avance pour votre aide
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 #version 330 core // Input data in vec3 Position_worldspace; in vec3 Normal_cameraspace; in vec3 LightDirection_cameraspace; in vec3 EyeDirection_cameraspace; // Ouput data out vec3 color; uniform vec3 PosLamp01; void main() { vec3 LightColor = vec3(1,1,1); float LightPower = 30.0f; vec3 MaterialDiffuseColor = vec3(1.0, 0.0, 0.0); vec3 MaterialAmbientColor = vec3(0.1,0.1,0.1) * MaterialDiffuseColor; vec3 MaterialSpecularColor = vec3(0.3,0.3,0.3); float distance = length(PosLamp01 - Position_worldspace ); vec3 N = normalize(Normal_cameraspace); vec3 L = normalize(LightDirection_cameraspace); vec3 E = normalize(EyeDirection_cameraspace); vec3 R = reflect(-L, N); vec3 i_a = MaterialAmbientColor; vec3 i_d = MaterialDiffuseColor * LightColor * LightPower * clamp(dot(L, N), 0, 1) / (distance*distance); vec3 i_s = MaterialSpecularColor * LightColor * LightPower * pow(clamp(dot(E, R), 0, 1), 50) / (distance*distance); color = i_a + i_d + i_s; }
Robin
Partager