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; |
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 */ |
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; |
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 = 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) |
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; |
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; |
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; |
361 |
|
sr.rdir[i] = -onorm[i]; |
362 |
|
} |
363 |
|
sr.rmax = 0.0; |
364 |
< |
rayorigin(&sr, NULL, PRIMARY, 1.0); |
364 |
> |
rayorigin(&sr, PRIMARY, NULL, NULL); |
365 |
|
} while (!(*ofun[o->otype].funp)(o, &sr)); |
366 |
|
/* check against source */ |
367 |
|
VCOPY(sr.rorg, sr.rop); /* starting from intersection */ |
373 |
|
if (!srcray(&sr, NULL, &si) || sr.rsrc != sn) |
374 |
|
continue; /* can't get there from here */ |
375 |
|
} |
376 |
< |
sr.revf = srcvalue; |
368 |
< |
rayvalue(&sr); /* check sample validity */ |
376 |
> |
srcvalue(&sr); /* check sample validity */ |
377 |
|
if (bright(sr.rcol) <= FTINY) |
378 |
|
continue; |
379 |
|
nok++; /* got sample; check obstructions */ |
380 |
|
rayclear(&sr); |
373 |
– |
sr.revf = raytrace; |
381 |
|
rayvalue(&sr); |
382 |
|
if (bright(sr.rcol) > FTINY) |
383 |
|
nhit++; |
402 |
|
|
403 |
|
|
404 |
|
#ifdef DEBUG |
405 |
< |
void |
406 |
< |
virtverb(sn, fp) /* print verbose description of virtual source */ |
407 |
< |
register int sn; |
408 |
< |
FILE *fp; |
405 |
> |
extern void |
406 |
> |
virtverb( /* print verbose description of virtual source */ |
407 |
> |
register int sn, |
408 |
> |
FILE *fp |
409 |
> |
) |
410 |
|
{ |
411 |
|
register int i; |
412 |
|
|