attribute vec3 vPosition; attribute vec2 vTexCoord; attribute vec3 vNormal; #ifdef INSTANCED attribute vec4 iModel0; attribute vec4 iModel1; attribute vec4 iModel2; attribute vec4 iModel3; #endif varying vec2 texCoord; varying vec4 fragPosLightSpace; varying vec3 fragNormal; varying float fogDistance; uniform mat4 ProjectionModelViewMatrix; uniform mat4 ModelViewMatrix; uniform mat4 uLightFromCamera; uniform vec3 uPlayerEyePos; void main() { vec4 worldPos = vec4(vPosition, 1.0); vec3 normal = vNormal; #ifdef INSTANCED mat4 instanceModel = mat4(iModel0, iModel1, iModel2, iModel3); worldPos = instanceModel * worldPos; normal = normalize(mat3(instanceModel) * normal); #endif vec4 eyePos = ModelViewMatrix * worldPos; fogDistance = length(eyePos.xyz - uPlayerEyePos); gl_Position = ProjectionModelViewMatrix * worldPos; texCoord = vTexCoord; fragPosLightSpace = uLightFromCamera * eyePos; fragNormal = mat3(ModelViewMatrix) * normal; }