| 85 |
|
|
| 86 |
|
if (wdb == NULL) /* no geometry section? */ |
| 87 |
|
return SDEnone; |
| 88 |
– |
sprintf(SDerrorDetail, "Negative size in \"%s\"", sd->name); |
| 88 |
|
sd->dim[0] = sd->dim[1] = sd->dim[2] = .0; |
| 89 |
|
if ((geom = ezxml_child(wdb, "Width")) != NULL) |
| 90 |
|
sd->dim[0] = atof(ezxml_txt(geom)) * |
| 95 |
|
if ((geom = ezxml_child(wdb, "Thickness")) != NULL) |
| 96 |
|
sd->dim[2] = atof(ezxml_txt(geom)) * |
| 97 |
|
to_meters(ezxml_attr(geom, "unit")); |
| 98 |
< |
if ((sd->dim[0] < .0) | (sd->dim[1] < .0) | (sd->dim[2] < .0)) |
| 98 |
> |
if ((sd->dim[0] < .0) | (sd->dim[1] < .0) | (sd->dim[2] < .0)) { |
| 99 |
> |
sprintf(SDerrorDetail, "Negative size in \"%s\"", sd->name); |
| 100 |
|
return SDEdata; |
| 101 |
+ |
} |
| 102 |
|
if ((geom = ezxml_child(wdb, "Geometry")) == NULL || |
| 103 |
|
(mgfstr = ezxml_txt(geom)) == NULL) |
| 104 |
|
return SDEnone; |
| 451 |
|
bitmask_t ndx, coord[MS_MAXDIM]; |
| 452 |
|
|
| 453 |
|
while (n > MS_MAXDIM) /* punt for higher dimensions */ |
| 454 |
< |
t[--n] = drand48(); |
| 454 |
> |
t[--n] = rand()*(1./RAND_MAX); |
| 455 |
|
nBits = (8*sizeof(bitmask_t) - 1) / n; |
| 456 |
|
ndx = randX * (double)((bitmask_t)1 << (nBits*n)); |
| 457 |
|
/* get coordinate on Hilbert curve */ |
| 459 |
|
/* convert back to [0,1) range */ |
| 460 |
|
scale = 1. / (double)((bitmask_t)1 << nBits); |
| 461 |
|
while (n--) |
| 462 |
< |
t[n] = scale * ((double)coord[n] + drand48()); |
| 462 |
> |
t[n] = scale * ((double)coord[n] + rand()*(1./RAND_MAX)); |
| 463 |
|
} |
| 464 |
|
|
| 465 |
|
#undef MS_MAXDIM |
| 489 |
|
if ((projSA == NULL) | (vec == NULL) | (sd == NULL)) |
| 490 |
|
return SDEargument; |
| 491 |
|
/* initialize extrema */ |
| 492 |
< |
switch (qflags & SDqueryMin+SDqueryMax) { |
| 492 |
> |
switch (qflags) { |
| 493 |
|
case SDqueryMax: |
| 494 |
|
projSA[0] = .0; |
| 495 |
|
break; |
| 519 |
|
if (ec) |
| 520 |
|
return ec; |
| 521 |
|
} |
| 522 |
< |
return ec; |
| 522 |
> |
if (ec) { /* all diffuse? */ |
| 523 |
> |
projSA[0] = M_PI; |
| 524 |
> |
if (qflags == SDqueryMin+SDqueryMax) |
| 525 |
> |
projSA[1] = M_PI; |
| 526 |
> |
} |
| 527 |
> |
return SDEnone; |
| 528 |
|
} |
| 529 |
|
|
| 530 |
|
/* Return BSDF for the given incident and scattered ray vectors */ |