Calculate terrain normals and enable lighting

This commit is contained in:
saschawillems 2016-06-25 13:30:55 +02:00
parent c26e1b7918
commit 81bd22834e
5 changed files with 84 additions and 33 deletions

View file

@ -24,7 +24,7 @@ layout (location = 1) in vec2 inUV[];
layout (location = 0) out vec3 outNormal;
layout (location = 1) out vec2 outUV;
layout (location = 2) out vec3 outEyePos;
layout (location = 2) out vec3 outViewVec;
layout (location = 3) out vec3 outLightVec;
void main()
@ -34,10 +34,9 @@ void main()
vec2 uv2 = mix(inUV[3], inUV[2], gl_TessCoord.x);
outUV = mix(uv1, uv2, gl_TessCoord.y);
// Interpolate normals
vec3 nm1 = mix(inNormal[0], inNormal[1], gl_TessCoord.x);
vec3 nm2 = mix(inNormal[3], inNormal[2], gl_TessCoord.x);
outNormal = mix(nm1, nm2, gl_TessCoord.y);
vec3 n1 = mix(inNormal[0], inNormal[1], gl_TessCoord.x);
vec3 n2 = mix(inNormal[3], inNormal[2], gl_TessCoord.x);
outNormal = mix(n1, n2, gl_TessCoord.y);
// Interpolate positions
vec4 pos1 = mix(gl_in[0].gl_Position, gl_in[1].gl_Position, gl_TessCoord.x);
@ -49,6 +48,6 @@ void main()
gl_Position = ubo.projection * ubo.modelview * pos;
// Calculate vectors for lighting based on tessellated position
outEyePos = -pos.xyz;
outLightVec = normalize(ubo.lightPos.xyz + outEyePos);
outViewVec = -pos.xyz;
outLightVec = normalize(ubo.lightPos.xyz + outViewVec);
}