ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/common/bsdf.h
(Generate patch)

Comparing ray/src/common/bsdf.h (file contents):
Revision 2.15 by greg, Thu Jun 9 17:09:39 2011 UTC vs.
Revision 2.22 by greg, Sun Apr 21 21:36:23 2013 UTC

# Line 58 | Line 58 | extern "C" {
58   typedef enum {SDEnone=0, SDEmemory, SDEfile, SDEformat, SDEargument,
59                  SDEdata, SDEsupport, SDEinternal, SDEunknown} SDError;
60  
61 < /* English ASCII strings corresponding to ennumerated errors */
61 > /* English strings corresponding to ennumerated errors */
62   extern const char       *SDerrorEnglish[];
63  
64 < /* Additional information on last error (ASCII English) */
64 > /* Pointer to error list in preferred language */
65 > extern const char       **SDerrorList;
66 >
67 > /* Additional information on last error (generally in English) */
68   extern char             SDerrorDetail[];
69  
70   /* Holder for BSDF value and spectral color */
# Line 71 | Line 74 | typedef struct {
74   } SDValue;
75  
76   /* Cached, encoded, cumulative distribution for one incident (solid) angle */
77 < #define SD_CDIST_BASE   double          cTotal; \
78 <                        struct SDCDst_s *next
77 > #define SD_CDIST_BASE(styp)     double          cTotal; \
78 >                                struct styp     *next
79   typedef struct SDCDst_s {
80 <        SD_CDIST_BASE;                  /* base fields first */
80 >        SD_CDIST_BASE(SDCDst_s);        /* base fields first */
81          /* ...encoded distribution extends struct */
82   } SDCDst;
83  
84 + extern const SDCDst     SDemptyCD;      /* empty distribution */
85 +
86   /* Forward declaration of BSDF component */
87   typedef struct SDComp_s SDComponent;
88  
# Line 118 | Line 123 | typedef struct {
123   /* Loaded BSDF data */
124   typedef struct {
125          char            name[SDnameLn]; /* BSDF name (usu. derived from file) */
126 +        char            matn[SDnameLn]; /* material name */
127 +        char            makr[SDnameLn]; /* manufacturer */
128          char            *mgf;           /* geometric description (if any) */
129          float           dim[3];         /* width, height, thickness (meters) */
130          SDValue         rLambFront;     /* diffuse front reflectance */
131          SDValue         rLambBack;      /* diffuse rear reflectance */
132          SDValue         tLamb;          /* diffuse transmission */
133 <        SDSpectralDF    *rf, *rb, *tf;  /* non-diffuse BSDF components */
133 >        SDSpectralDF    *rf, *rb;       /* non-diffuse BRDF components */
134 >        SDSpectralDF    *tf, *tb;       /* non-diffuse BTDF components */
135   } SDData;
136  
137   /* List of loaded BSDFs */
# Line 147 | Line 155 | extern int             SDretainSet;    /* =SDretainNone by default *
155  
156   #define SDisLoaded(sd)  ((sd)->rLambFront.spec.flags != 0)
157  
158 < /* Report an error to the indicated stream (in English) */
159 < extern SDError          SDreportEnglish(SDError ec, FILE *fp);
158 > /* Report an error to the indicated stream */
159 > extern SDError          SDreportError(SDError ec, FILE *fp);
160  
161   /* Shorten file path to useable BSDF name, removing suffix */
162   extern void             SDclipName(char res[SDnameLn], const char *fname);
# Line 156 | Line 164 | extern void            SDclipName(char res[SDnameLn], const char
164   /* Allocate new spectral distribution function */
165   extern SDSpectralDF     *SDnewSpectralDF(int nc);
166  
167 + /* Add component(s) to spectral distribution function */
168 + extern SDSpectralDF     *SDaddComponent(SDSpectralDF *odf, int nadd);
169 +
170   /* Free a spectral distribution function */
171   extern void             SDfreeSpectralDF(SDSpectralDF *df);
172  
# Line 182 | Line 193 | extern SDError         SDsampComponent(SDValue *sv, FVECT ioV
193   extern void             SDmultiSamp(double t[], int n, double randX);
194  
195   /* Map a [0,1]^2 square to a unit radius disk */
196 < void                    SDsquare2disk(double ds[2], double seedx, double seedy);
196 > extern void             SDsquare2disk(double ds[2], double seedx, double seedy);
197  
198   /* Map point on unit disk to a unit square in [0,1]^2 range */
199 < void                    SDdisk2square(double sq[2], double diskx, double disky);
199 > extern void             SDdisk2square(double sq[2], double diskx, double disky);
200  
201   /*****************************************************************
202   * The calls below are the ones most applications require.
# Line 193 | Line 204 | void                   SDdisk2square(double sq[2], double diskx, doubl
204   */
205  
206   /* Get BSDF from cache (or load and cache it on first call) */
207 < /* Report any problems to stderr (in English), return NULL on failure */
207 > /* Report any problems to stderr, return NULL on failure */
208   extern const SDData     *SDcacheFile(const char *fname);
209  
210   /* Free a BSDF from our cache (clear all if sd==NULL) */
# Line 237 | Line 248 | extern SDData          *loadBSDF(char *name);
248  
249   /* Application-specific BSDF error translator (not part of our library) */
250   extern char             *transSDError(SDError ec);
240
241 /*################################################################*/
242 /*######### DEPRECATED DEFINITIONS AWAITING PERMANENT REMOVAL #######*/
243 /*
244 * Header for BSDF i/o and access routines
245 */
246
247 #include "mat4.h"
248                                /* up directions */
249 typedef enum {
250        UDzneg=-3,
251        UDyneg=-2,
252        UDxneg=-1,
253        UDunknown=0,
254        UDxpos=1,
255        UDypos=2,
256        UDzpos=3
257 } UpDir;
258                                /* BSDF coordinate calculation routines */
259                                /* vectors always point away from surface */
260
261 typedef int     b_vecf2(FVECT v, int n, void *cd);
262 typedef int     b_ndxf2(FVECT v, void *cd);
263 typedef double  b_radf2(int n, void *cd);
264
265 /* Bidirectional Scattering Distribution Function */
266 struct BSDF_data {
267        int     ninc;                   /* number of incoming directions */
268        int     nout;                   /* number of outgoing directions */
269        float   dim[3];                 /* width, height, thickness (meters) */
270        char    *mgf;                   /* geometric description (if any) */
271        void    *ib_priv;               /* input basis private data */
272        b_vecf2 *ib_vec;                /* get input vector from index */
273        b_ndxf2 *ib_ndx;                /* get input index from vector */
274        b_radf2 *ib_ohm;                /* get input radius for index */
275        void    *ob_priv;               /* output basis private data */
276        b_vecf2 *ob_vec;                /* get output vector from index */
277        b_ndxf2 *ob_ndx;                /* get output index from vector */
278        b_radf2 *ob_ohm;                /* get output radius for index */
279        float   *bsdf;                  /* scattering distribution data */
280 };                              /* bidirectional scattering distrib. func. */
281
282 #define getBSDF_incvec(v,b,i)   (*(b)->ib_vec)(v,i,(b)->ib_priv)
283 #define getBSDF_incndx(b,v)     (*(b)->ib_ndx)(v,(b)->ib_priv)
284 #define getBSDF_incohm(b,i)     (*(b)->ib_ohm)(i,(b)->ib_priv)
285 #define getBSDF_outvec(v,b,o)   (*(b)->ob_vec)(v,o,(b)->ob_priv)
286 #define getBSDF_outndx(b,v)     (*(b)->ob_ndx)(v,(b)->ob_priv)
287 #define getBSDF_outohm(b,o)     (*(b)->ob_ohm)(o,(b)->ob_priv)
288 #define BSDF_value(b,i,o)       (b)->bsdf[(o)*(b)->ninc + (i)]
289
290 extern struct BSDF_data *load_BSDF(char *fname);
291 extern void free_BSDF(struct BSDF_data *b);
292 extern int r_BSDF_incvec(FVECT v, struct BSDF_data *b, int i,
293                                double rv, MAT4 xm);
294 extern int r_BSDF_outvec(FVECT v, struct BSDF_data *b, int o,
295                                double rv, MAT4 xm);
296 extern int getBSDF_xfm(MAT4 xm, FVECT nrm, UpDir ud, char *xfbuf);
297
298 /*######### END DEPRECATED DEFINITIONS #######*/
299 /*################################################################*/
251  
252   #ifdef __cplusplus
253   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines