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

Comparing ray/src/rt/source.c (file contents):
Revision 2.14 by greg, Wed Jan 12 21:25:59 1994 UTC vs.
Revision 2.17 by greg, Thu Nov 2 17:37:58 1995 UTC

# Line 1 | Line 1
1 < /* Copyright (c) 1993 Regents of the University of California */
1 > /* Copyright (c) 1995 Regents of the University of California */
2  
3   #ifndef lint
4   static char SCCSid[] = "$SunId$ LBL";
# Line 68 | Line 68 | marksources()                  /* find and mark source objects */
68                                  o->otype != OBJ_SOURCE &&
69                                  m->oargs.farg[3] <= FTINY)
70                          continue;                       /* don't bother */
71 +                if (m->oargs.farg[0] <= FTINY && m->oargs.farg[1] <= FTINY &&
72 +                                m->oargs.farg[2] <= FTINY)
73 +                        continue;                       /* don't bother */
74  
75                  if (sfun[o->otype].of == NULL ||
76                                  sfun[o->otype].of->setsrc == NULL)
# Line 152 | Line 155 | SRCINDEX  *si;                 /* source sample index */
155  
156  
157   srcvalue(r)                     /* punch ray to source and compute value */
158 < RAY  *r;
158 > register RAY  *r;
159   {
160          register SRCREC  *sp;
161  
# Line 161 | Line 164 | RAY  *r;
164                                          /* check intersection */
165                  if (!(*ofun[sp->so->otype].funp)(sp->so, r))
166                          return;
167 <                raycont(r);             /* compute contribution */
167 >                if (!rayshade(r, r->ro->omod))  /* compute contribution */
168 >                        goto nomat;
169                  return;
170          }
171                                          /* compute intersection */
# Line 169 | Line 173 | RAY  *r;
173                          (*ofun[sp->so->otype].funp)(sp->so, r)) {
174                  if (sp->sa.success >= 0)
175                          sp->sa.success++;
176 <                raycont(r);             /* compute contribution */
176 >                if (!rayshade(r, r->ro->omod))  /* compute contribution */
177 >                        goto nomat;
178                  return;
179          }
180 +                                        /* we missed our mark! */
181          if (sp->sa.success < 0)
182                  return;                 /* bitched already */
183          sp->sa.success -= AIMREQT;
# Line 180 | Line 186 | RAY  *r;
186          sprintf(errmsg, "aiming failure for light source \"%s\"",
187                          sp->so->oname);
188          error(WARNING, errmsg);         /* issue warning */
189 +        return;
190 + nomat:
191 +        objerror(r->ro, USER, "material not found");
192   }
193  
194  
# Line 318 | Line 327 | char  *p;                      /* data for f */
327                                  ( sr.ro != source[scp->sno].so ||
328                                  source[scp->sno].sflags & SFOLLOW )) {
329                                                  /* follow entire path */
330 <                        raycont(&sr);
330 >                        if (!raycont(&sr))
331 >                                objerror(sr.ro, USER, "material not found");
332                          if (trace != NULL)
333                                  (*trace)(&sr);  /* trace execution */
334                          if (bright(sr.rcol) <= FTINY)
# Line 395 | Line 405 | return(o->otype==MAT_ILLUM|o->otype==MAT_GLOW);}
405   * (Glows with negative radii should NEVER participate in illumination.)
406   */
407  
408 < #define  distglow(m, r)         (m->otype==MAT_GLOW && \
408 > #define  distglow(m, r, d)      (m->otype==MAT_GLOW && \
409                                  m->oargs.farg[3] >= -FTINY && \
410 <                                r->rot > m->oargs.farg[3])
410 >                                d > m->oargs.farg[3])
411  
412   /* badcomponent *
413   *
# Line 410 | Line 420 | return(o->otype==MAT_ILLUM|o->otype==MAT_GLOW);}
420  
421   #define  badcomponent(m, r)     (r->crtype&(AMBIENT|SPECULAR) && \
422                                  !(r->crtype&SHADOW || r->rod < 0.0 || \
423 <                                        distglow(m, r)))
423 >                /* not 100% correct */  distglow(m, r, r->rot)))
424  
425   /* passillum *
426   *
# Line 428 | Line 438 | return(o->otype==MAT_ILLUM|o->otype==MAT_GLOW);}
438   * The -dv flag is normally on for sources to be visible.
439   */
440  
441 < #define  srcignore(m, r)        (!directvis && !(r->crtype&SHADOW) && \
442 <                                !distglow(m, r))
441 > #define  srcignore(m, r)        !(directvis || r->crtype&SHADOW || \
442 >                                distglow(m, r, raydist(r,PRIMARY)))
443  
444  
445   m_light(m, r)                   /* ray hit a light source */
# Line 439 | Line 449 | register RAY  *r;
449                                                  /* check for over-counting */
450          if (badcomponent(m, r))
451                  return(1);
452 <        if (wrongsource(m,r))
452 >        if (wrongsource(m, r))
453                  return(1);
454                                                  /* check for passed illum */
455          if (passillum(m, r)) {

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines