To render lights and shadows, we need to extend the approach shown in the previous paragraphs. The next code example we will discuss is 2_ShadowMaps
. Shadow mapping will be done using projected shadow maps (https://en.wikipedia.org/wiki/Shadow_mapping). This way a scene is rendered into an off-screen depth buffer from the light's point of view. Next, the scene is rendered as usual and every fragment is projected onto the lights shadow map and the depth value relative to the light is compared to the value in the constructed shadow map. The fragment is in shadow if the depth value is larger than the corresponding depth value from the shadow map. To do an off-screen rendering, we need to revisit our OpenGL wrapper introduced in Chapter 6, OpenGL ES 3.1 and Cross-platform Rendering, and add a framebuffer abstraction to it.
The clGLFrameBuffer
class is declared in GLFrameBuffer.h
:
class clGLFrameBuffer: public iIntrusiveCounter { public: clGLFrameBuffer(): FFrameBuffer...