ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/gen/mkillum.h
Revision: 2.14
Committed: Sat Dec 8 01:43:09 2007 UTC (16 years, 4 months ago) by greg
Content type: text/plain
Branch: MAIN
Changes since 2.13: +13 -12 lines
Log Message:
Additional changes towards BSDF implementation

File Contents

# Content
1 /* RCSid: $Id: mkillum.h,v 2.13 2007/12/05 20:07:34 greg Exp $ */
2 /*
3 * Common definitions for mkillum
4 */
5 #ifndef _RAD_MKILLUM_H_
6 #define _RAD_MKILLUM_H_
7
8 #include "ray.h"
9 #include "otypes.h"
10 #include "random.h"
11
12 #ifdef __cplusplus
13 extern "C" {
14 #endif
15 /* illum flags */
16 #define IL_LIGHT 0x1 /* light rather than illum */
17 #define IL_COLDST 0x2 /* use color distribution */
18 #define IL_COLAVG 0x4 /* use average color */
19 #define IL_DATCLB 0x8 /* OK to clobber data file */
20
21 /* up directions */
22 typedef enum {
23 UDzneg=-3,
24 UDyneg=-2,
25 UDxneg=-1,
26 UDunknown=0,
27 UDxpos=1,
28 UDypos=2,
29 UDzpos=3
30 } UpDir;
31 /* BSDF coordinate calculation routines */
32 /* vectors always point away from surface */
33 typedef int b_vecf(FVECT, int, void *);
34 typedef int b_ndxf(FVECT, void *);
35 typedef double b_radf(int, void *);
36
37 /* Bidirectional Scattering Distribution Function */
38 struct BSDF_data {
39 int ninc; /* number of incoming directions */
40 int nout; /* number of outgoing directions */
41 void *ib_priv; /* input basis private data */
42 b_vecf *ib_vec; /* get input vector from index */
43 b_ndxf *ib_ndx; /* get input index from vector */
44 b_radf *ib_ohm; /* get input radius for index */
45 void *ob_priv; /* output basis private data */
46 b_vecf *ob_vec; /* get output vector from index */
47 b_ndxf *ob_ndx; /* get output index from vector */
48 b_radf *ob_ohm; /* get output radius for index */
49 float *bsdf; /* scattering distribution data */
50 }; /* bidirectional scattering distrib. func. */
51
52 struct illum_args {
53 int flags; /* flags from list above */
54 UpDir udir; /* up direction */
55 double thick; /* object thickness */
56 char matname[MAXSTR]; /* illum material name */
57 char datafile[MAXSTR]; /* distribution data file name */
58 int dfnum; /* data file number */
59 char altmat[MAXSTR]; /* alternate material name */
60 int sampdens; /* point sample density */
61 int nsamps; /* # of samples in each direction */
62 struct BSDF_data
63 *sd; /* scattering data (if set) */
64 float minbrt; /* minimum average brightness */
65 COLOR col; /* computed average color */
66 }; /* illum options */
67
68 #define getBSDF_incvec(v,b,i) (*(b)->ib_vec)(v,i,(b)->ib_priv)
69 #define getBSDF_incndx(b,v) (*(b)->ib_ndx)(v,(b)->ib_priv)
70 #define getBSDF_incohm(b,i) (*(b)->ib_ohm)(i,(b)->ib_priv)
71 #define getBSDF_outvec(v,b,o) (*(b)->ob_vec)(v,o,(b)->ob_priv)
72 #define getBSDF_outndx(b,v) (*(b)->ob_ndx)(v,(b)->ob_priv)
73 #define getBSDF_outohm(b,o) (*(b)->ob_ohm)(o,(b)->ob_priv)
74 #define BSDF_visible(b,i,o) (b)->bsdf[(o)*(b)->ninc + (i)]
75
76 extern struct BSDF_data *load_BSDF(char *fname);
77 extern void free_BSDF(struct BSDF_data *b);
78 extern int r_BSDF_incvec(FVECT v, struct BSDF_data *b, int i,
79 double rv, MAT4 xm);
80 extern int r_BSDF_outvec(FVECT v, struct BSDF_data *b, int o,
81 double rv, MAT4 xm);
82 extern int getBSDF_xfm(MAT4 xm, FVECT nrm, UpDir ud);
83 extern void redistribute(struct BSDF_data *b, int nalt, int nazi,
84 FVECT u, FVECT v, FVECT w, MAT4 xm);
85
86 extern void printobj(char *mod, OBJREC *obj);
87 extern int average(struct illum_args *il, COLORV *da, int n);
88 extern void flatout(struct illum_args *il, COLORV *da, int n, int m,
89 FVECT u, FVECT v, FVECT w);
90 extern void illumout(struct illum_args *il, OBJREC *ob);
91 extern void roundout(struct illum_args *il, COLORV *da, int n, int m);
92
93 extern void newdist(int siz);
94 extern int process_ray(RAY *r, int rv);
95 extern void raysamp(int ndx, FVECT org, FVECT dir);
96 extern void rayclean(void);
97
98 extern void flatdir(FVECT dv, double alt, double azi);
99
100 extern int my_default(OBJREC *, struct illum_args *, char *);
101 extern int my_face(OBJREC *, struct illum_args *, char *);
102 extern int my_sphere(OBJREC *, struct illum_args *, char *);
103 extern int my_ring(OBJREC *, struct illum_args *, char *);
104
105 extern COLORV * distarr; /* distribution array */
106 extern int distsiz;
107
108 extern char *progname;
109
110 #ifdef __cplusplus
111 }
112 #endif
113
114 #endif /* _RAD_MKILLUM_H_ */
115