diff --git a/source/src/shadow.cpp b/source/src/shadow.cpp index 04b8b6cb..28fb55d7 100644 --- a/source/src/shadow.cpp +++ b/source/src/shadow.cpp @@ -160,7 +160,7 @@ bool addshadowbox(const vec &bbmin, const vec &bbmax, const vec &extrude, const { vec4 &p = v[i]; mat.transform(vec(i&1 ? bbmax.x : bbmin.x, i&2 ? bbmax.y : bbmin.y, i&4 ? bbmax.z : bbmin.z), p); - if(p.z >= 0) + if(p.z >= -p.w) { float x = p.x / p.w, y = p.y / p.w; sx1 = min(sx1, x); @@ -172,13 +172,13 @@ bool addshadowbox(const vec &bbmin, const vec &bbmax, const vec &extrude, const } vec4 ev; mat.transform(extrude, ev); - if(ev.z < 0 && !front) return false; - if(front < 8 || ev.z < 0) loopi(8) + if(ev.z < -ev.w && !front) return false; + if(front < 8 || ev.z < -ev.w) loopi(8) { const vec4 &p = v[i]; - if(p.z >= 0) + if(p.z >= -p.w) { - if(ev.z >= 0) continue; + if(ev.z >= -ev.w) continue; float t = ev.z/(ev.z - p.z), w = ev.w + t*(p.w - ev.w), x = (ev.x + t*(p.x - ev.x))/w, @@ -192,7 +192,7 @@ bool addshadowbox(const vec &bbmin, const vec &bbmax, const vec &extrude, const loopj(3) { const vec4 &o = v[i^(1<= 0) + if(ev.z >= -ev.w) { float x = ev.x/ev.w, y = ev.y/ev.w; if((sx1 >= 1 && x >= 1) || (sy1 >= 1 && y >= 1) || (sx2 <= -1 && x <= -1) || (sy2 <= -1 && y <= -1)) return false;