--- ray/src/common/bsdf_t.h 2011/04/19 21:31:22 3.5 +++ ray/src/common/bsdf_t.h 2012/09/02 15:33:15 3.10 @@ -1,4 +1,4 @@ -/* RCSid $Id: bsdf_t.h,v 3.5 2011/04/19 21:31:22 greg Exp $ */ +/* RCSid $Id: bsdf_t.h,v 3.10 2012/09/02 15:33:15 greg Exp $ */ /* * bsdf_t.h * @@ -28,6 +28,32 @@ typedef struct SDNode_s { float v[1]; /* scattering value(s) */ } u; /* subtrees or values (extends struct) */ } SDNode; + +#define SD_FREFL 1 /* component reflects off front side */ +#define SD_BREFL 2 /* component reflects off back side */ +#define SD_FXMIT 3 /* component transmits through front side */ +#define SD_BXMIT 4 /* component transmits through back side */ + +/* Variable-resolution BSDF holder */ +typedef struct { + int sidef; /* transmitted component? */ + SDNode *st; /* BSDF tree */ +} SDTre; + +/* Holder for cumulative distribution (sum of BSDF * projSA) */ +typedef struct SDTreCDst_s { + /* base fields; must come first */ + SD_CDIST_BASE(SDTreCDst_s); + double clim[2][2]; /* input coordinate limits */ + double max_psa; /* maximum projected solid angle */ + short sidef; /* which mode is in play */ + short isodist; /* isotropic distribution? */ + int calen; /* cumulative array length */ + struct { + unsigned hndx; /* hilbert index */ + unsigned cuml; /* cumulative value */ + } carr[1]; /* cumulative array (extends struct) */ +} SDTreCDst; #ifdef _EZXML_H /* Load a variable-resolution BSDF tree from an open XML file */