- - Szene aus sicht der Lichtquelle Rendern (€: nur Backfaces werden gezeichnet)
- - DepthBuffer in Textur speichern
- - Bias * ProjektionsMatrix * ModelviewMatrix in TexturMatrix7 speichern
- - Szene mit folgendem Schader zeichnen
- //VERTEX
- varying vec4 ShadowCoord;
- void main()
- {
- ShadowCoord = gl_TextureMatrix[7] * gl_Vertex;
- gl_Position = gl_ModelViewProjectionMatrix * gl_Vertex;
- gl_FrontColor = gl_Color;
- gl_TexCoord[0] = gl_MultiTexCoord0 * gl_TextureMatrix[0];
- }
- //FRAGMENT
- uniform sampler2D ShadowMap;
- uniform sampler2D ColorMap;
- varying vec4 ShadowCoord;
- void main()
- {
- vec4 shadowCoordinateWdivide = ShadowCoord / ShadowCoord.w ;
- shadowCoordinateWdivide.z -= 0.001;
- float distanceFromLight = texture2D(ShadowMap, shadowCoordinateWdivide.xy).r;
- float shadow = 1.0;
- if (ShadowCoord.w > 0.0)
- shadow = distanceFromLight < shadowCoordinateWdivide.z ? 0.1 : 1.0 ;
- vec4 color = texture2D(ColorMap, gl_TexCoord[0].xy);
- if (length(color) == 0)
- color = vec4(1.0, 1.0, 1.0, 1.0);
- gl_FragColor = shadow * color;
- }