ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/rt/ray.h
Revision: 2.17
Committed: Sat Jun 7 00:54:58 2003 UTC (20 years, 10 months ago) by schorsch
Content type: text/plain
Branch: MAIN
Changes since 2.16: +12 -51 lines
Log Message:
Instrumented headers against multiple inclusion and for use from C++.
Removed NOPROTO sections.

File Contents

# User Rev Content
1 schorsch 2.17 /* RCSid $Id: ray.h,v 2.16 2003/05/09 22:18:03 greg Exp $ */
2 greg 1.1 /*
3     * ray.h - header file for routines using rays.
4 greg 2.12 */
5 schorsch 2.17 #ifndef _RAD_RAY_H_
6     #define _RAD_RAY_H_
7     #ifdef __cplusplus
8     extern "C" {
9     #endif
10    
11 greg 2.12
12 greg 2.13 #include "copyright.h"
13 greg 1.1
14     #include "standard.h"
15    
16 greg 2.12 #include "octree.h"
17    
18 greg 1.1 #include "object.h"
19    
20     #include "color.h"
21    
22 greg 2.6 #define MAXDIM 32 /* maximum number of dimensions */
23    
24 greg 1.1 /* ray type flags */
25     #define PRIMARY 01 /* original ray */
26     #define SHADOW 02 /* ray to light source */
27     #define REFLECTED 04 /* reflected ray */
28     #define REFRACTED 010 /* refracted (bent) ray */
29     #define TRANS 020 /* transmitted/transferred ray */
30     #define AMBIENT 040 /* ray scattered for interreflection */
31 greg 2.2 #define SPECULAR 0100 /* ray scattered for specular */
32 greg 1.1
33     /* reflected ray types */
34 greg 2.2 #define RAYREFL (SHADOW|REFLECTED|AMBIENT|SPECULAR)
35 greg 1.1
36     typedef struct ray {
37 greg 2.3 unsigned long rno; /* unique ray number */
38 greg 2.12 int rlvl; /* number of reflections for this ray */
39     float rweight; /* cumulative weight of this ray */
40     short rtype; /* ray type */
41     short crtype; /* cumulative ray type */
42 greg 1.1 struct ray *parent; /* ray this originated from */
43 greg 2.12 FVECT rorg; /* origin of ray */
44     FVECT rdir; /* normalized direction of ray */
45     double rmax; /* maximum distance (aft clipping plane) */
46     int rsrc; /* source we're aiming for */
47     OBJECT *clipset; /* set of objects currently clipped */
48     OBJECT *newcset; /* next clipset, used for transmission */
49     void (*revf)(); /* evaluation function for this ray */
50 greg 2.14 void (*hitf)(); /* custom hit test for this traversal */
51 greg 2.11 OBJECT robj; /* intersected object number */
52 greg 2.12 OBJREC *ro; /* intersected object (one with material) */
53     double rot; /* distance to object */
54     FVECT rop; /* intersection point */
55     FVECT ron; /* intersection surface normal */
56     double rod; /* -DOT(rdir, ron) */
57     FULLXF *rox; /* object transformation */
58 greg 2.15 FLOAT uv[2]; /* local coordinates */
59 greg 2.12 FVECT pert; /* surface normal perturbation */
60     COLOR pcol; /* pattern color */
61     COLOR rcol; /* returned ray value */
62     double rt; /* returned effective ray length */
63     COLOR cext; /* medium extinction coefficient */
64     COLOR albedo; /* medium scattering albedo */
65     float gecc; /* scattering eccentricity coefficient */
66     int *slights; /* list of lights to test for scattering */
67 greg 1.1 } RAY;
68    
69 greg 2.12 #define rayvalue(r) (*(r)->revf)(r)
70    
71     extern char VersionID[]; /* Radiance version ID string */
72 greg 1.6
73 greg 2.12 extern CUBE thescene; /* our scene */
74     extern OBJECT nsceneobjs; /* number of objects in our scene */
75 greg 2.5
76 greg 2.12 extern unsigned long raynum; /* next ray ID */
77     extern unsigned long nrays; /* total rays traced so far */
78 greg 1.5
79 greg 2.12 extern OBJREC Lamb; /* a Lambertian surface */
80     extern OBJREC Aftplane; /* aft clipping object */
81    
82     extern void (*trace)(); /* global trace reporting callback */
83    
84     extern int dimlist[]; /* dimension list for distribution */
85     extern int ndims; /* number of dimensions so far */
86     extern int samplendx; /* index for this sample */
87    
88     extern int ray_savesiz; /* size of parameter save buffer */
89    
90     extern int do_irrad; /* compute irradiance? */
91    
92     extern double dstrsrc; /* square source distribution */
93     extern double shadthresh; /* shadow threshold */
94     extern double shadcert; /* shadow testing certainty */
95     extern int directrelay; /* number of source relays */
96     extern int vspretest; /* virtual source pretest density */
97     extern int directvis; /* light sources visible to eye? */
98     extern double srcsizerat; /* maximum source size/dist. ratio */
99    
100     extern double specthresh; /* specular sampling threshold */
101     extern double specjitter; /* specular sampling jitter */
102    
103     extern COLOR cextinction; /* global extinction coefficient */
104     extern COLOR salbedo; /* global scattering albedo */
105     extern double seccg; /* global scattering eccentricity */
106     extern double ssampdist; /* scatter sampling distance */
107    
108     extern int backvis; /* back face visibility */
109    
110     extern int maxdepth; /* maximum recursion depth */
111     extern double minweight; /* minimum ray weight */
112    
113     extern char *ambfile; /* ambient file name */
114     extern COLOR ambval; /* ambient value */
115     extern int ambvwt; /* initial weight for ambient value */
116     extern double ambacc; /* ambient accuracy */
117     extern int ambres; /* ambient resolution */
118     extern int ambdiv; /* ambient divisions */
119     extern int ambssamp; /* ambient super-samples */
120     extern int ambounce; /* ambient bounces */
121     extern char *amblist[]; /* ambient include/exclude list */
122     extern int ambincl; /* include == 1, exclude == 0 */
123    
124     extern int ray_pnprocs; /* number of child processes */
125     extern int ray_pnidle; /* number of idle processes */
126    
127     #define AMBLLEN 128 /* max. ambient list length */
128     #define AMBWORD 8 /* average word length */
129    
130     typedef struct { /* rendering parameter holder */
131     int do_irrad;
132     double dstrsrc;
133     double shadthresh;
134     double shadcert;
135     int directrelay;
136     int vspretest;
137     int directvis;
138     double srcsizerat;
139     COLOR cextinction;
140     COLOR salbedo;
141     double seccg;
142     double ssampdist;
143     double specthresh;
144     double specjitter;
145     int backvis;
146     int maxdepth;
147     double minweight;
148     char ambfile[512];
149     COLOR ambval;
150     int ambvwt;
151     double ambacc;
152     int ambres;
153     int ambdiv;
154     int ambssamp;
155     int ambounce;
156     int ambincl;
157     short amblndx[AMBLLEN+1];
158     char amblval[AMBLLEN*AMBWORD];
159     } RAYPARAMS;
160    
161     #define rpambmod(p,i) ( (i)>=AMBLLEN||(p)->amblndx[i]<0 ? \
162     (char *)NULL : (p)->amblval+(p)->amblndx[i] )
163    
164     /* defined in duphead.c */
165     extern void headclean(void);
166     extern void openheader(void);
167     extern void dupheader(void);
168     extern void pfdetach(void);
169     extern void pfclean(void);
170     extern void pflock(int lf);
171     extern void pfhold(void);
172     extern void io_process(void);
173     /* defined in freeobjmem.c */
174     extern int free_objs(OBJECT on, OBJECT no);
175     extern void free_objmem(void);
176     /* defined in preload.c */
177     extern int load_os(OBJREC *op);
178     extern void preload_objs(void);
179     /* defined in raycalls.c */
180     extern void ray_init(char *otnm);
181     extern void ray_trace(RAY *r);
182     extern void ray_done(int freall);
183     extern void ray_save(RAYPARAMS *rp);
184     extern void ray_restore(RAYPARAMS *rp);
185     extern void ray_defaults(RAYPARAMS *rp);
186     /* defined in raypcalls.c */
187     extern void ray_pinit(char *otnm, int nproc);
188     extern void ray_psend(RAY *r);
189     extern int ray_pqueue(RAY *r);
190     extern int ray_presult(RAY *r, int poll);
191     extern void ray_pdone(int freall);
192     extern void ray_popen(int nadd);
193     extern void ray_pclose(int nsub);
194     /* defined in raytrace.c */
195     extern int rayorigin(RAY *r, RAY *ro, int rt, double rw);
196     extern void rayclear(RAY *r);
197     extern void raytrace(RAY *r);
198 greg 2.14 extern void rayhit(OBJECT *oset, RAY *r);
199 greg 2.12 extern void raycont(RAY *r);
200     extern void raytrans(RAY *r);
201     extern int rayshade(RAY *r, int mod);
202     extern void rayparticipate(RAY *r);
203 greg 2.16 extern void raytexture(RAY *r, OBJECT mod);
204 greg 2.12 extern int raymixture(RAY *r, OBJECT fore, OBJECT back, double coef);
205     extern double raydist(RAY *r, int flags);
206     extern double raynormal(FVECT norm, RAY *r);
207     extern void newrayxf(RAY *r);
208     extern void flipsurface(RAY *r);
209     extern int localhit(RAY *r, CUBE *scene);
210     /* defined in renderopts.c */
211     extern int getrenderopt(int ac, char *av[]);
212     extern void print_rdefaults(void);
213     /* defined in srcdraw.c */
214     extern void drawsources(COLOR *pic[], float *zbf[],
215     int x0, int xsiz, int y0, int ysiz);
216     /* module main procedures */
217     extern void rtrace(char *fname);
218     extern void rview(void);
219     extern void rpict(int seq, char *pout, char *zout, char *prvr);
220 greg 1.6
221 schorsch 2.17
222     #ifdef __cplusplus
223     }
224 greg 2.12 #endif
225 schorsch 2.17 #endif /* _RAD_RAY_H_ */
226