#ifdef GL_ES // Set default precision to medium 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 surfaceColor = vec4(texture2D(texture, v_texcoord)); if(!b_transparent) { surfaceColor.a = 1.0f; } gl_FragColor = vec4(brightness * light.intensities * surfaceColor.rgb, surfaceColor.a); }