1uniform mat4 m_LightViewProjectionMatrix0; 2uniform mat4 m_LightViewProjectionMatrix1; 3uniform mat4 m_LightViewProjectionMatrix2; 4uniform mat4 m_LightViewProjectionMatrix3; 5 6uniform mat4 g_WorldViewProjectionMatrix; 7uniform mat4 g_WorldMatrix; 8 9varying vec4 projCoord0; 10varying vec4 projCoord1; 11varying vec4 projCoord2; 12varying vec4 projCoord3; 13 14varying float shadowPosition; 15 16attribute vec3 inPosition; 17 18const mat4 biasMat = mat4(0.5, 0.0, 0.0, 0.0, 19 0.0, 0.5, 0.0, 0.0, 20 0.0, 0.0, 0.5, 0.0, 21 0.5, 0.5, 0.5, 1.0); 22 23 24void main(){ 25 gl_Position = g_WorldViewProjectionMatrix * vec4(inPosition, 1.0); 26 27 shadowPosition = gl_Position.z; 28 // get the vertex in world space 29 vec4 worldPos = g_WorldMatrix * vec4(inPosition, 1.0); 30 31 32 // populate the light view matrices array and convert vertex to light viewProj space 33 projCoord0 = biasMat * m_LightViewProjectionMatrix0 * worldPos; 34 projCoord1 = biasMat * m_LightViewProjectionMatrix1 * worldPos; 35 projCoord2 = biasMat * m_LightViewProjectionMatrix2 * worldPos; 36 projCoord3 = biasMat * m_LightViewProjectionMatrix3 * worldPos; 37}