ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/source.h
Revision: 1.12
Committed: Tue Jul 16 15:56:44 1991 UTC (32 years, 9 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 1.11: +4 -1 lines
Log Message:
added redirecting materials

File Contents

# Content
1 /* Copyright (c) 1986 Regents of the University of California */
2
3 /* SCCSid "$SunId$ LBL" */
4
5 /*
6 * source.h - header file for ray tracing sources.
7 *
8 * 8/20/85
9 */
10
11 #define AIMREQT 100 /* required aim success/failure */
12
13 #define SDISTANT 01 /* source distant flag */
14 #define SSKIP 02 /* source skip flag */
15 #define SPROX 04 /* source proximity flag */
16 #define SSPOT 010 /* source spotlight flag */
17 #define SVIRTUAL 020 /* source virtual flag */
18 #define SFLAT 040 /* source flat flag */
19 #define SFOLLOW 0100 /* source follow path flag */
20
21 typedef struct {
22 FVECT aim; /* aim direction or center */
23 float siz; /* output solid angle or area */
24 float flen; /* focal length */
25 } SPOT; /* spotlight */
26
27 typedef struct {
28 int sflags; /* source flags */
29 FVECT sloc; /* direction or position of source */
30 FVECT snorm; /* surface normal of flat source */
31 float ss; /* tangent or disk radius */
32 float ss2; /* domega or projected area */
33 struct {
34 float prox; /* proximity */
35 SPOT *s; /* spot */
36 } sl; /* localized source information */
37 union {
38 int success; /* successes - AIMREQT*failures */
39 struct {
40 short pn; /* projection number */
41 short sn; /* next source to aim for */
42 } sv; /* virtual source */
43 } sa; /* source aiming information */
44 long ntests, nhits; /* shadow tests and hits */
45 OBJREC *so; /* source destination object */
46 } SRCREC; /* light source */
47
48 /*
49 * Special support functions for sources
50 */
51
52 /*
53 * Virtual source materials must define the following.
54 *
55 * vproj(pm, op, sp, i) Compute i'th virtual projection
56 * of source sp in object op and assign
57 * the 4x4 transformation matrix pm.
58 * Return 1 on success, 0 if no i'th projection.
59 *
60 * nproj The number of projections. The value of
61 * i passed to vproj runs from 0 to nproj-1.
62 */
63
64 typedef struct {
65 int (*vproj)(); /* project virtual sources */
66 int nproj; /* number of possible projections */
67 } VSMATERIAL; /* virtual source material functions */
68
69 typedef struct {
70 int (*setsrc)(); /* set light source for object */
71 double (*getpleq)(); /* plane equation for surface */
72 double (*getdisk)(); /* maximum disk for surface */
73 } SOBJECT; /* source object functions */
74
75 typedef union {
76 VSMATERIAL *mf; /* material functions */
77 SOBJECT *of; /* object functions */
78 } SRCFUNC; /* source functions */
79
80 extern SRCFUNC sfun[]; /* source dispatch table */
81
82 extern SRCREC *source; /* our source list */
83 extern int nsources; /* the number of sources */
84
85 extern double srcray(); /* ray to source */
86 extern int srcvalue(); /* compute source value w/o shadows */
87
88 extern double intercircle(); /* intersect two circles */
89 extern double spotdisk(); /* intersecting disk for spot */
90 extern double beamdisk(); /* intersecting disk for beam */
91
92 extern SPOT *makespot(); /* make spotlight */
93
94 extern double dstrsrc; /* source distribution amount */
95 extern double shadthresh; /* relative shadow threshold */
96 extern double shadcert; /* shadow testing certainty */
97 extern int directrelay; /* maximum number of source relays */
98 extern int vspretest; /* virtual source pretest density */
99
100 #define getplaneq(c,o) (*sfun[(o)->otype].of->getpleq)(c,o)
101 #define getmaxdisk(c,o) (*sfun[(o)->otype].of->getdisk)(c,o)
102 #define setsource(s,o) (*sfun[(o)->otype].of->setsrc)(s,o)