diff --git a/QtMeshViewer/Resources/fshader.glsl b/QtMeshViewer/Resources/fshader.glsl index f1145dd..f855a85 100644 --- a/QtMeshViewer/Resources/fshader.glsl +++ b/QtMeshViewer/Resources/fshader.glsl @@ -4,21 +4,37 @@ precision mediump int; precision mediump float; #endif +uniform mat3 n_matrix; uniform sampler2D texture; +uniform struct Light { + vec3 position; + vec3 intensities; +} light; + uniform bool b_transparent; varying vec2 v_texcoord; +varying vec4 v_position; +varying vec3 v_normal; void main() { + + vec3 normal = normalize(n_matrix * v_normal); + + vec3 surfaceToLight = light.position - v_position; + + float brightness = dot(normal, surfaceToLight) / (length(surfaceToLight) * length(normal)); + brightness = clamp(brightness, 0, 1); + // Set fragment color from texture - vec4 finalColor = vec4(texture2D(texture, v_texcoord)); + vec4 surfaceColor = vec4(texture2D(texture, v_texcoord)); if(!b_transparent) { - finalColor.a = 1.0f; + surfaceColor.a = 1.0f; } - gl_FragColor = finalColor; + gl_FragColor = vec4(brightness * light.intensities * surfaceColor.rgb, surfaceColor.a); }