diff options
author | Ton Roosendaal <ton@blender.org> | 2004-04-29 20:20:34 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2004-04-29 20:20:34 +0400 |
commit | 97f2cf05f595e293bd313de55edaea169fa81315 (patch) | |
tree | 2f93c3d843201fcf9c78685f79ba41f4f3c38a03 | |
parent | d6eeceb83d06a82f14301b8204e320cb396b6db5 (diff) |
Fix #1207
Flag for 'only shadow' was still working when lamp type switched to
Hemi. Also 'only shadow' didnt work yet for ray_shadow Spot lamp.
-rw-r--r-- | source/blender/render/intern/source/rendercore.c | 49 | ||||
-rw-r--r-- | source/blender/renderconverter/intern/convertBlenderScene.c | 2 |
2 files changed, 26 insertions, 25 deletions
diff --git a/source/blender/render/intern/source/rendercore.c b/source/blender/render/intern/source/rendercore.c index 224714b0956..8669e820842 100644 --- a/source/blender/render/intern/source/rendercore.c +++ b/source/blender/render/intern/source/rendercore.c @@ -1927,32 +1927,33 @@ void shade_lamp_loop(ShadeInput *shi, ShadeResult *shr) if(i>0.0 && (R.r.mode & R_SHADOW)) { if(ma->mode & MA_SHADOW) { - - if(lar->shb) { - shadfac[3] = testshadowbuf(lar->shb, shi->co, inp); - } - else if(lar->type==LA_HEMI); // no shadow - else if(lar->mode & LA_SHAD_RAY) { - // this extra 0.001 prevents boundary cases (shadow on smooth sphere) - if((shi->vlr->n[0]*lv[0] + shi->vlr->n[1]*lv[1] + shi->vlr->n[2]*lv[2]) > -0.001) - ray_shadow(shi, lar, shadfac); - else shadfac[3]= 0.0; - } - - /* warning, here it skips the loop */ - if(lar->mode & LA_ONLYSHADOW) { - - shadfac[3]= i*lar->energy*(1.0-shadfac[3]); - shr->diff[0] -= shadfac[3]; - shr->diff[1] -= shadfac[3]; - shr->diff[2] -= shadfac[3]; + if(lar->type==LA_HEMI); // no shadow + else { + if(lar->shb) { + shadfac[3] = testshadowbuf(lar->shb, shi->co, inp); + } + else if(lar->mode & LA_SHAD_RAY) { + // this extra 0.001 prevents boundary cases (shadow on smooth sphere) + if((shi->vlr->n[0]*lv[0] + shi->vlr->n[1]*lv[1] + shi->vlr->n[2]*lv[2]) > -0.001) + ray_shadow(shi, lar, shadfac); + else shadfac[3]= 0.0; + } + + /* warning, here it skips the loop */ + if(lar->mode & LA_ONLYSHADOW) { + + shadfac[3]= i*lar->energy*(1.0-shadfac[3]); + shr->diff[0] -= shadfac[3]; + shr->diff[1] -= shadfac[3]; + shr->diff[2] -= shadfac[3]; + + continue; + } - continue; + if(shadfac[3]==0.0) continue; + + i*= shadfac[3]; } - - if(shadfac[3]==0.0) continue; - - i*= shadfac[3]; } } diff --git a/source/blender/renderconverter/intern/convertBlenderScene.c b/source/blender/renderconverter/intern/convertBlenderScene.c index 47f70f64e13..3494874314d 100644 --- a/source/blender/renderconverter/intern/convertBlenderScene.c +++ b/source/blender/renderconverter/intern/convertBlenderScene.c @@ -1763,7 +1763,7 @@ void RE_add_render_lamp(Object *ob, int doshadbuf) lar->spottexfac= 1.0/(xn); if(lar->mode & LA_ONLYSHADOW) { - if((lar->mode & LA_SHAD)==0) lar->mode -= LA_ONLYSHADOW; + if((lar->mode & (LA_SHAD|LA_SHAD_RAY))==0) lar->mode -= LA_ONLYSHADOW; } } |