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

Comparing ray/src/rt/pmapsrc.c (file contents):
Revision 2.4 by greg, Thu May 21 13:54:59 2015 UTC vs.
Revision 2.10 by rschregle, Tue Sep 29 18:16:34 2015 UTC

# Line 1 | Line 1
1 + #ifndef lint
2 + static const char RCSid[] = "$Id$";
3 + #endif
4   /*
5     ==================================================================
6     Photon map support routines for emission from light sources
# Line 7 | Line 10
10     (c) Lucerne University of Applied Sciences and Arts,
11     supported by the Swiss National Science Foundation (SNSF, #147053)
12     ==================================================================
13 <  
11 <   $Id$
13 >
14   */
15  
16  
# Line 532 | Line 534 | void getPhotonPorts ()
534     for (i = 0; i < nobjects; i++) {
535        obj = objptr(i);
536        
537 <      if (inset(ambset, obj -> omod)) {
537 >      /* Check if object is a surface and NOT a light source (duh) and
538 >       * resolve its material via any aliases, then check for inclusion in
539 >       * port modifier list */
540 >      if (issurface(obj -> otype) && !islight(obj -> otype) &&
541 >          inset(ambset, objndx(findmaterial(obj)))) {
542           /* Add photon port */
543           photonPorts = (SRCREC*)realloc(photonPorts,
544                                          (numPhotonPorts + 1) *
# Line 671 | Line 677 | void initPhotonEmission (EmissionMap *emap, float numP
677          
678        VCOPY(r.rorg, emap -> photonOrg);
679        VCOPY(r.rop, emap -> photonOrg);
680 <      r.rmax = FHUGE;
680 >      r.rmax = 0;
681        
682        for (t = 0; t < emap -> numTheta; t++) {
683           for (p = 0; p < emap -> numPhi; p++) {
# Line 746 | Line 752 | void emitPhoton (const EmissionMap* emap, RAY* ray)
752     /* Choose a new origin within current partition for every
753        emitted photon to break up clustering artifacts */
754     photonOrigin [emap -> src -> so -> otype] ((EmissionMap*)emap);
755 +   /* If we have a local glow source with a maximum radius, then
756 +      restrict our photon to the specified distance (otherwise no limit) */
757 +   if (mod -> otype == MAT_GLOW && !(emap -> src -> sflags & SDISTANT)
758 +                && mod -> oargs.farg[3] > FTINY)
759 +      ray -> rmax = mod -> oargs.farg[3];
760 +   else
761 +      ray -> rmax = 0;
762     rayorigin(ray, PRIMARY, NULL, NULL);
750   ray -> rmax = FHUGE;
763    
764     if (!emap -> numSamples) {
765        /* Source is unmodified and has no port, and either local with

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines