void ShadowMap::prepare()
{
- const Vector4 &lpos=light.get_position();
+ Vector4 lpos=light.get_position();
if(lpos.w)
- throw Exception("Non-directional lights not supported at the moment");
+ {
+ /* XXX Not really proper way to support positional lights, but good
+ enough when the light source is far away */
+ lpos.x-=target.x;
+ lpos.y-=target.y;
+ lpos.z-=target.z;
+ float d=sqrt(lpos.x*lpos.x+lpos.y*lpos.y+lpos.z*lpos.z);
+ lpos.x/=d;
+ lpos.y/=d;
+ lpos.z/=d;
+ }
float matrix[16];
if(abs(lpos.z)>=abs(lpos.x) && abs(lpos.z)>=abs(lpos.y))