Extending Shrinkwrap modifier
All you have to do is ray cast in the direction of the lamp starting from the vertices locations and use the points of intersection as the new vertices locations.



The foregoing example showed an orthogonal projection, another kind of projection would choose the ray direction based on the vertices locations as follows.