ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cv/bsdf2klems.c
(Generate patch)

Comparing ray/src/cv/bsdf2klems.c (file contents):
Revision 2.6 by greg, Sat Jun 29 21:03:25 2013 UTC vs.
Revision 2.7 by greg, Thu Aug 1 16:10:13 2013 UTC

# Line 154 | Line 154 | static void
154   eval_bsdf(const char *fname)
155   {
156          ANGLE_BASIS     *abp = get_basis(kbasis);
157 +        float           *trans_mtx = NULL;
158          SDData          bsd;
159          SDError         ec;
160          FVECT           vin, vout;
# Line 209 | Line 210 | eval_bsdf(const char *fname)
210          }
211                                                  /* front transmission */
212          if (bsd.tf != NULL || bsd.tLamb.cieY > .002) {
213 +            if (bsd.tb == NULL)
214 +                trans_mtx = (float *)malloc(sizeof(float) *
215 +                                                abp->nangles*abp->nangles);
216              input_orient = 1; output_orient = -1;
217              data_prologue();
218              for (j = 0; j < abp->nangles; j++) {
# Line 223 | Line 227 | eval_bsdf(const char *fname)
227                          sum += sv.cieY;
228                      }
229                      printf("\t%.3e\n", sum/npsamps);
230 +                    if (trans_mtx != NULL)
231 +                        trans_mtx[j*abp->nangles + i] = sum/npsamps;
232                  }
233                  putchar('\n');                  /* extra space between rows */
234              }
235              data_epilogue();
236          }
237                                                  /* back transmission */
238 <        if (bsd.tb != NULL) {
238 >        if (bsd.tb != NULL || trans_mtx != NULL) {
239 >            if (bsd.tf == NULL)
240 >                trans_mtx = (float *)malloc(sizeof(float) *
241 >                                                abp->nangles*abp->nangles);
242              input_orient = -1; output_orient = 1;
243              data_prologue();
244              for (j = 0; j < abp->nangles; j++) {
245 <                for (i = 0; i < abp->nangles; i++) {
246 <                    sum = 0;                    /* average over patches */
247 <                    for (n = npsamps; n-- > 0; ) {
248 <                        fo_getvec(vout, j+(n+frandom())/npsamps, abp);
249 <                        bi_getvec(vin, i+urand(n), abp);
250 <                        ec = SDevalBSDF(&sv, vout, vin, &bsd);
251 <                        if (ec != SDEnone)
245 >                for (i = 0; i < abp->nangles; i++)
246 >                    if (bsd.tb != NULL) {       /* use tb if we have it */
247 >                        sum = 0;                /* average over patches */
248 >                        for (n = npsamps; n-- > 0; ) {
249 >                            fo_getvec(vout, j+(n+frandom())/npsamps, abp);
250 >                            bi_getvec(vin, i+urand(n), abp);
251 >                            ec = SDevalBSDF(&sv, vout, vin, &bsd);
252 >                            if (ec != SDEnone)
253                                  goto err;
254 <                        sum += sv.cieY;
254 >                            sum += sv.cieY;
255 >                        }
256 >                        printf("\t%.3e\n", sum/npsamps);
257 >                        if (trans_mtx != NULL)
258 >                            trans_mtx[i*abp->nangles + j] = sum/npsamps;
259 >                    } else {                    /* else transpose tf */
260 >                        printf("\t%.3e\n", trans_mtx[i*abp->nangles + j]);
261                      }
246                    printf("\t%.3e\n", sum/npsamps);
247                }
262                  putchar('\n');                  /* extra space between rows */
263              }
264              data_epilogue();
265          }
266 +                                                /* derived front transmission */
267 +        if (bsd.tf == NULL && trans_mtx != NULL) {
268 +            input_orient = 1; output_orient = -1;
269 +            data_prologue();
270 +            for (j = 0; j < abp->nangles; j++) {
271 +                for (i = 0; i < abp->nangles; i++)
272 +                    printf("\t%.3e\n", trans_mtx[j*abp->nangles + i]);
273 +                putchar('\n');                  /* extra space between rows */
274 +            }
275 +            data_epilogue();
276 +        }
277          SDfreeBSDF(&bsd);                       /* all done */
278 +        if (trans_mtx != NULL)
279 +                free(trans_mtx);
280          return;
281   err:
282          SDreportError(ec, stderr);

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines