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

Comparing ray/src/rt/virtuals.c (file contents):
Revision 2.7 by greg, Sat Feb 22 02:07:29 2003 UTC vs.
Revision 2.14 by schorsch, Tue Mar 30 16:13:01 2004 UTC

# Line 8 | Line 8 | static const char      RCSid[] = "$Id$";
8   *  External symbols declared in source.h
9   */
10  
11 < /* ====================================================================
12 < * The Radiance Software License, Version 1.0
13 < *
14 < * Copyright (c) 1990 - 2002 The Regents of the University of California,
15 < * through Lawrence Berkeley National Laboratory.   All rights reserved.
16 < *
17 < * Redistribution and use in source and binary forms, with or without
18 < * modification, are permitted provided that the following conditions
19 < * are met:
20 < *
21 < * 1. Redistributions of source code must retain the above copyright
22 < *         notice, this list of conditions and the following disclaimer.
23 < *
24 < * 2. Redistributions in binary form must reproduce the above copyright
25 < *       notice, this list of conditions and the following disclaimer in
26 < *       the documentation and/or other materials provided with the
27 < *       distribution.
28 < *
29 < * 3. The end-user documentation included with the redistribution,
30 < *           if any, must include the following acknowledgment:
31 < *             "This product includes Radiance software
32 < *                 (http://radsite.lbl.gov/)
33 < *                 developed by the Lawrence Berkeley National Laboratory
34 < *               (http://www.lbl.gov/)."
35 < *       Alternately, this acknowledgment may appear in the software itself,
36 < *       if and wherever such third-party acknowledgments normally appear.
37 < *
38 < * 4. The names "Radiance," "Lawrence Berkeley National Laboratory"
39 < *       and "The Regents of the University of California" must
40 < *       not be used to endorse or promote products derived from this
41 < *       software without prior written permission. For written
42 < *       permission, please contact [email protected].
43 < *
44 < * 5. Products derived from this software may not be called "Radiance",
45 < *       nor may "Radiance" appear in their name, without prior written
46 < *       permission of Lawrence Berkeley National Laboratory.
47 < *
48 < * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
49 < * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
50 < * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
51 < * DISCLAIMED.   IN NO EVENT SHALL Lawrence Berkeley National Laboratory OR
52 < * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
53 < * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
54 < * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
55 < * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
56 < * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
57 < * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
58 < * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
59 < * SUCH DAMAGE.
60 < * ====================================================================
61 < *
62 < * This software consists of voluntary contributions made by many
63 < * individuals on behalf of Lawrence Berkeley National Laboratory.   For more
64 < * information on Lawrence Berkeley National Laboratory, please see
65 < * <http://www.lbl.gov/>.
66 < */
11 > #include "copyright.h"
12  
13   #include  "ray.h"
14  
# Line 81 | Line 26 | static OBJECT  *vobject;               /* virtual source objects */
26   static int  nvobjects = 0;              /* number of virtual source objects */
27  
28  
29 < void
30 < markvirtuals()                  /* find and mark virtual sources */
29 > extern void
30 > markvirtuals(void)                      /* find and mark virtual sources */
31   {
32          register OBJREC  *o;
33          register int  i;
# Line 90 | Line 35 | markvirtuals()                 /* find and mark virtual sources */
35          if (directrelay <= 0)
36                  return;
37                                          /* find virtual source objects */
38 <        for (i = 0; i < nobjects; i++) {
38 >        for (i = 0; i < nsceneobjs; i++) {
39                  o = objptr(i);
40                  if (!issurface(o->otype) || o->omod == OVOID)
41                          continue;
# Line 104 | Line 49 | markvirtuals()                 /* find and mark virtual sources */
49                  if (nvobjects == 0)
50                          vobject = (OBJECT *)malloc(sizeof(OBJECT));
51                  else
52 <                        vobject = (OBJECT *)realloc((char *)vobject,
52 >                        vobject = (OBJECT *)realloc((void *)vobject,
53                                  (unsigned)(nvobjects+1)*sizeof(OBJECT));
54                  if (vobject == NULL)
55                          error(SYSTEM, "out of memory in addvirtuals");
# Line 124 | Line 69 | markvirtuals()                 /* find and mark virtual sources */
69   }
70  
71  
72 < void
73 < addvirtuals(sn, nr)             /* add virtuals associated with source */
74 < int  sn;
75 < int  nr;
72 > extern void
73 > addvirtuals(            /* add virtuals associated with source */
74 >        int  sn,
75 >        int  nr
76 > )
77   {
78          register int  i;
79                                  /* check relay limit first */
# Line 142 | Line 88 | int  nr;
88   }
89  
90  
91 < void
92 < vproject(o, sn, n)              /* create projected source(s) if they exist */
93 < OBJREC  *o;
94 < int  sn;
95 < int  n;
91 > extern void
92 > vproject(               /* create projected source(s) if they exist */
93 >        OBJREC  *o,
94 >        int  sn,
95 >        int  n
96 > )
97   {
98          register int  i;
99          register VSMATERIAL  *vsmat;
# Line 170 | Line 117 | int  n;
117   }
118  
119  
120 < OBJREC *
121 < vsmaterial(o)                   /* get virtual source material pointer */
122 < OBJREC  *o;
120 > extern OBJREC *
121 > vsmaterial(                     /* get virtual source material pointer */
122 >        OBJREC  *o
123 > )
124   {
125          register int  i;
126          register OBJREC  *m;
127  
128          i = o->omod;
129 <        m = objptr(i);
129 >        m = findmaterial(objptr(i));
130 >        if (m == NULL)
131 >                return(objptr(i));
132          if (m->otype != MAT_ILLUM || m->oargs.nsargs < 1 ||
133                          !strcmp(m->oargs.sarg[0], VOIDID) ||
134                          (i = lastmod(objndx(m), m->oargs.sarg[0])) == OVOID)
# Line 187 | Line 137 | OBJREC  *o;
137   }
138  
139  
140 < int
141 < makevsrc(op, sn, pm)            /* make virtual source if reasonable */
142 < OBJREC  *op;
143 < register int  sn;
144 < MAT4  pm;
140 > extern int
141 > makevsrc(               /* make virtual source if reasonable */
142 >        OBJREC  *op,
143 >        register int  sn,
144 >        MAT4  pm
145 > )
146   {
147          FVECT  nsloc, nsnorm, ocent, v;
148          double  maxrad2, d;
# Line 249 | Line 200 | MAT4  pm;
200                  else
201                          nsflags &= ~SSPOT;
202                  if (source[sn].sflags & SSPOT) {
203 <                        copystruct(&theirspot, source[sn].sl.s);
203 >                        theirspot = *(source[sn].sl.s);
204                          multv3(theirspot.aim, source[sn].sl.s->aim, pm);
205                          normalize(theirspot.aim);
206                          if (nsflags & SSPOT) {
# Line 259 | Line 210 | MAT4  pm;
210                                          return(-1);     /* no overlap */
211                          } else {
212                                  nsflags |= SSPOT;
213 <                                copystruct(&ourspot, &theirspot);
213 >                                ourspot = theirspot;
214                                  d = 2.*ourspot.siz;
215                          }
216                          if (ourspot.siz < d-FTINY) {    /* it shrunk */
# Line 299 | Line 250 | MAT4  pm;
250          if (nsflags & SSPOT) {
251                  if ((source[i].sl.s = (SPOT *)malloc(sizeof(SPOT))) == NULL)
252                          goto memerr;
253 <                copystruct(source[i].sl.s, &ourspot);
253 >                *(source[i].sl.s) = ourspot;
254          }
255          if (nsflags & SPROX)
256                  source[i].sl.prox = source[sn].sl.prox;
# Line 308 | Line 259 | MAT4  pm;
259          return(i);
260   memerr:
261          error(SYSTEM, "out of memory in makevsrc");
262 +        return -1; /* pro forma return */
263   }
264  
265  
266 < double
267 < getdisk(oc, op, sn)             /* get visible object disk */
268 < FVECT  oc;
269 < OBJREC  *op;
270 < register int  sn;
266 > extern double
267 > getdisk(                /* get visible object disk */
268 >        FVECT  oc,
269 >        OBJREC  *op,
270 >        register int  sn
271 > )
272   {
273          double  rad2, roffs, offs, d, rd, rdoto;
274          FVECT  rnrm, nrm;
# Line 343 | Line 296 | register int  sn;
296   }
297  
298  
299 < int
300 < vstestvis(f, o, oc, or2, sn)            /* pretest source visibility */
301 < int  f;                 /* virtual source flags */
302 < OBJREC  *o;             /* relay object */
303 < FVECT  oc;              /* relay object center */
304 < double  or2;            /* relay object radius squared */
305 < register int  sn;       /* target source number */
299 > extern int
300 > vstestvis(              /* pretest source visibility */
301 >        int  f,                 /* virtual source flags */
302 >        OBJREC  *o,             /* relay object */
303 >        FVECT  oc,              /* relay object center */
304 >        double  or2,            /* relay object radius squared */
305 >        register int  sn        /* target source number */
306 > )
307   {
308          RAY  sr;
309          FVECT  onorm;
# Line 450 | Line 404 | register int  sn;      /* target source number */
404          
405  
406   #ifdef DEBUG
407 < void
408 < virtverb(sn, fp)        /* print verbose description of virtual source */
409 < register int  sn;
410 < FILE  *fp;
407 > extern void
408 > virtverb(       /* print verbose description of virtual source */
409 >        register int  sn,
410 >        FILE  *fp
411 > )
412   {
413          register int  i;
414  

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines