ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/pmapcontrib.c
(Generate patch)

Comparing ray/src/rt/pmapcontrib.c (file contents):
Revision 2.5 by greg, Wed May 20 12:58:31 2015 UTC vs.
Revision 2.6 by greg, Wed May 20 13:43:28 2015 UTC

# Line 158 | Line 158 | void photonContrib (PhotonMap *pmap, RAY *ray, COLOR i
158           OBJREC *srcMod = objptr(sp -> so -> omod);
159           MODCONT *srcContrib = (MODCONT*)lu_find(pmap -> srcContrib,
160                                                   srcMod -> oname) -> data;
161 <        
162 <         if (srcContrib) {
163 <            /* Photon's emitting light source has modifier whose
164 <             * contributions are sought */
165 <            double srcBinReal;
166 <            int srcBin;
167 <            RAY srcRay;
161 >         if (!srcContrib)
162 >            continue;
163  
164 <            if (srcContrib -> binv -> type != NUM) {
165 <               /* Use intersection function to set shadow ray parameters
166 <                */
167 <               rayorigin(&srcRay, SHADOW, NULL, NULL);
168 <               srcRay.rsrc = primary -> srcIdx;
169 <               VCOPY(srcRay.rorg, primary -> pos);
170 <               VCOPY(srcRay.rdir, primary -> dir);
171 <               if (!(source [primary -> srcIdx].sflags & SDISTANT ?
164 >         /* Photon's emitting light source has modifier whose
165 >          * contributions are sought */
166 >         double srcBinReal;
167 >         int srcBin;
168 >         RAY srcRay;
169 >
170 >         if (srcContrib -> binv -> type != NUM) {
171 >            /* Use intersection function to set shadow ray parameters
172 >             * if it's not simply a constant
173 >             */
174 >            rayorigin(&srcRay, SHADOW, NULL, NULL);
175 >            srcRay.rsrc = primary -> srcIdx;
176 >            VCOPY(srcRay.rorg, primary -> pos);
177 >            VCOPY(srcRay.rdir, primary -> dir);
178 >            if (!(source [primary -> srcIdx].sflags & SDISTANT ?
179                          sourcehit(&srcRay) :
180                          (*ofun[sp -> so -> otype].funp)(sp -> so, &srcRay)))
181 <                    continue;           /* XXX shouldn't happen! */
182 <               worldfunc(RCCONTEXT, &srcRay);
183 <               set_eparams((char *)srcContrib -> params);
184 <          }
185 <            if ((srcBinReal = evalue(srcContrib -> binv)) < -.5)
186 <                continue;               /* silently ignore negative bins */
181 >                continue;               /* XXX shouldn't happen! */
182 >            worldfunc(RCCONTEXT, &srcRay);
183 >            set_eparams((char *)srcContrib -> params);
184 >         }
185 >
186 >         if ((srcBinReal = evalue(srcContrib -> binv)) < -.5)
187 >             continue;          /* silently ignore negative bins */
188    
189 <            if ((srcBin = srcBinReal + .5) >= srcContrib -> nbins) {
190 <               error(WARNING, "bad bin number (ignored)");
191 <               continue;
192 <            }
189 >         if ((srcBin = srcBinReal + .5) >= srcContrib -> nbins) {
190 >             error(WARNING, "bad bin number (ignored)");
191 >             continue;
192 >         }
193              
194 <            if (!contrib) {
195 <               /* Ray coefficient mode; normalise by light source radiance
196 <                * after applying distrib pattern */
197 <               int j;
198 <               raytexture(ray, srcMod -> omod);
199 <               setcolor(ray -> rcol, srcMod -> oargs.farg [0],
194 >         if (!contrib) {
195 >             /* Ray coefficient mode; normalise by light source radiance
196 >              * after applying distrib pattern */
197 >             int j;
198 >             raytexture(ray, srcMod -> omod);
199 >             setcolor(ray -> rcol, srcMod -> oargs.farg [0],
200                          srcMod -> oargs.farg [1], srcMod -> oargs.farg [2]);
201 <               multcolor(ray -> rcol, ray -> pcol);
202 <               for (j = 0; j < 3; j++)
203 <                  flux [j] = ray -> rcol [j] ? flux [j] / ray -> rcol [j]
201 >             multcolor(ray -> rcol, ray -> pcol);
202 >             for (j = 0; j < 3; j++)
203 >                flux [j] = ray -> rcol [j] ? flux [j] / ray -> rcol [j]
204                                               : 0;
205 <            }
205 >         }
206                      
207 <            multcolor(flux, rayCoeff);
208 <            addcolor(srcContrib -> cbin [srcBin], flux);
206 <         }
207 <         else fprintf(stderr, "Skipped contrib from %s\n", srcMod -> oname);
207 >         multcolor(flux, rayCoeff);
208 >         addcolor(srcContrib -> cbin [srcBin], flux);
209        }
210     }
211          

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines