Workshop 2 - Shadow-Mapping
The base code for this lab can be found on GitHub here
How things start:

Task 1:
Set up the transforms to be able to “draw from the light” - edit:
Fill in SetLightView and SetOrthoMatrix with reasonable values and send the matrices to the appropriate shaders.
Task 2:
Once you get the transforms in place - make sure your matrices are right.
First, get the geometric debug to show your scene from the light’s perspective to work.
In the base code SHOW_LIGHT_COLOR can be set to true to show the colors of the scene from the light camera’s view.
Hold the L key to toggle SHOW_LIGHT_COLOR.
There are two shaders used for this debug view: depth_vertDebug.glsl and depth_fragDebug.glsl.
Correct output should look something like the image below, except with texture colors visible:

Task 3:
SHOW_LIGHT_DEPTH can be used to display the depths of the scene as rendered from the light’s perspective.
Hold the K key to toggle SHOW_LIGHT_DEPTH.
There are depth debug shaders: pass_vert.glsl and pass_texfrag.glsl (“DebugProg”),
that will draw a large quad and texture map on the depth map.
When the light depth’s map view to work, it should look something like:

Task 4:
Now that we have the shadow depth rendered, we need to use this information to shade the objects.
First, we need to do some setup in main.cpp:
- 
    In render(), provide the shadow map texture to the scene draw call.
- 
    Also provide the light matrix. 
To complete the shadow mapping, you need to edit the final pair of shaders
- 
    Edit shadow_vert.glslto transform the point into Light space per vertex (hint: what matrix do you need)
- 
    Edit shadow_frag.glslto complete the shadow depth test:- shift the coordinates from to
- read off the stored depth (.) from the ShadowDepth, using the shifted.xy
- compare to the current depth (.z) of the projected depth
- return if the point is shadowed
 
You can also implement percentage closer shadows, which blend neighboring depth values to scale shadow intensity.
Final shadow mapped look:
