Height maps
The main point of illuminating the world is to make all the visual details pop up in a realistic manner. We have already added artificial dynamic lighting, fake 3D geometry, and shininess, so what's left? Well, there's nothing that shows the proper height of the scene yet. Until this very moment, we've been dealing with the scene as if it's completely flat when calculating the lighting distances. Instead of this, we need to work on something referred to as the height map that will store the heights of the pixels.
Adapting the existing code
Drawing heights properly can be quite tricky, especially in the case of tile maps. We need to know which way a tile is facing when drawing realistic heights. Consider the following illustration:
The tiles right next to point A have no normals associated with them, while the tiles next to point B are all facing the camera. We can store normal data inside our map files by making these few simple alterations:
struct Tile { ... sf::Vector3f m_normal...