]> git.tdb.fi Git - libs/gl.git/commitdiff
Add a hackish support for positional lights in ShadowMap
authorMikko Rasa <tdb@tdb.fi>
Fri, 15 Jan 2010 21:13:48 +0000 (21:13 +0000)
committerMikko Rasa <tdb@tdb.fi>
Fri, 15 Jan 2010 21:13:48 +0000 (21:13 +0000)
source/shadowmap.cpp

index 5f66d8984279ce55f9cfc98fcf2298d34fa31337..9dadb8fe16ee4991eda732ceb0219373d8267bfe 100644 (file)
@@ -54,9 +54,19 @@ void ShadowMap::set_texture_unit(unsigned u)
 
 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))