#version 100 precision mediump int; precision mediump float; uniform mat4 world; uniform mat4 worldIT; uniform mat4 worldViewProj; uniform mat4 texViewProj; uniform vec4 lightPosition; uniform vec4 lightColour; uniform vec4 shadowDepthRange; attribute vec4 position; attribute vec3 normal; attribute vec4 ambient; varying vec4 shadowUV; varying vec4 vColor; varying vec4 oColour; void main() { gl_Position = position * worldViewProj; oColour = ambient; vec4 worldPos = world * position; vec3 worldNorm = (worldIT * vec4(normal, 1.0)).xyz; // Calculate lighting (simple vertex lighting) vec3 lightDir = normalize(lightPosition.xyz - (worldPos.xyz * lightPosition.w)); vColor = lightColour * max(dot(lightDir, worldNorm), 0.0); // Calculate shadow map coords shadowUV = texViewProj * worldPos; #if LINEAR_RANGE // Adjust by fixed depth bias, rescale into range shadowUV.z = (shadowUV.z - shadowDepthRange.x) * shadowDepthRange.w; shadowUV.xy = shadowUV.xy / shadowUV.w; #else shadowUV = shadowUV / shadowUV.w; #endif }