Revision: 17532
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=17532
Author:   unclezeiv
Date:     2008-11-22 12:15:07 +0100 (Sat, 22 Nov 2008)

Log Message:
-----------
Forgot to add indirect lighting for meshlights. (Still no support for textured 
materials.)

Modified Paths:
--------------
    branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c

Modified: 
branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c
===================================================================
--- branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c 
2008-11-21 19:14:38 UTC (rev 17531)
+++ branches/soc-2008-unclezeiv/source/blender/render/intern/source/lightcuts.c 
2008-11-22 11:15:07 UTC (rev 17532)
@@ -1912,7 +1912,9 @@
 void add_meshlight(Render *re, LightcutsData *lcd, ObjectRen *obr, VlakRen 
*vla, float *co, float weight)
 {
        LampRen *lar;
-       Material *mat= vla->mat;
+       int i;
+       float col[3];
+       
        lar= MEM_callocN(sizeof(LampRen), "lampren");
        lamp_init(re, lar);
        lar->dist= lcd->indir_dist;
@@ -1933,12 +1935,25 @@
        /* VECCOPY(lcd->dbg_vis_vpl + 3 * lcd->light_counter, lar->co); */
        lar->ray_samp_method= LA_SAMP_CONSTANT;
        
-       lar->energy= mat->emit * weight;
+       lar->energy= vla->mat->emit * weight;
+       
+       col[0]= vla->mat->r;
+       col[1]= vla->mat->g;
+       col[2]= vla->mat->b;
 
-       lar->r= lar->energy * mat->r;
-       lar->g= lar->energy * mat->g;
-       lar->b= lar->energy * mat->b;
+       lar->r= lar->energy * col[0];
+       lar->g= lar->energy * col[1];
+       lar->b= lar->energy * col[2];
+       
+       /* indirect lighting */
+       for (i= 0; i < lcd->do_indir; i++)
+               add_virtual_point_light(re, lcd, lar, col, lcd->indir_bounces, 
1.0f / lcd->do_indir);
 
+       if (lcd->do_indir > 0 && (lcd->options & LC_OPT_ONLY_INDIR)) {
+               lamp_delete(lar);
+               return;
+       }
+
        BLI_addtail(&lcd->pointlights, lar);
 
        lcd->trees[TREE_SPOT].counter++;
@@ -2073,6 +2088,9 @@
                if (lcd->options & LC_OPT_ENV_LIGHT)
                        n_generated+= re->r.lightcuts_env_map;
                
+               /* TODO: here you could check if a meshlight is available... */
+               n_generated+= re->r.lightcuts_meshlights;
+               
                n_vpl= (n_orig + n_generated) * lcd->do_indir * 
lcd->indir_bounces;
 
                /* allocate array to hold coordinates for all possible virtual 
point lights */


_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to