From: Mikko Rasa Date: Sun, 9 Sep 2012 21:46:22 +0000 (+0300) Subject: Don't assume a directional light's position vector to be unit length X-Git-Url: http://git.tdb.fi/?a=commitdiff_plain;h=bd141418a0712feeb64bcaff7f57e29913b0317b;p=libs%2Fgl.git Don't assume a directional light's position vector to be unit length --- diff --git a/source/shadowmap.cpp b/source/shadowmap.cpp index ad40442f..6f62870b 100644 --- a/source/shadowmap.cpp +++ b/source/shadowmap.cpp @@ -74,6 +74,7 @@ void ShadowMap::setup_frame() const rendered = true; Vector4 lpos = light.get_position(); + if(lpos.w) { /* XXX Not really proper way to support positional lights, but good @@ -81,12 +82,13 @@ void ShadowMap::setup_frame() const 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 l = sqrt(lpos.x*lpos.x+lpos.y*lpos.y+lpos.z*lpos.z); + lpos.x /= l; + lpos.y /= l; + lpos.z /= l; + float matrix[16]; if(abs(lpos.z)>=abs(lpos.x) && abs(lpos.z)>=abs(lpos.y)) {