commit 3d1898266c762fb499aeaf86694d47df7def855b
parent af3f5499c28c8a909442ed7c30a5edcf21bf24ef
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Mon, 19 Sep 2016 14:56:50 +0200
Implement and test the ssf_bsdf_view_pdf function
Diffstat:
2 files changed, 17 insertions(+), 3 deletions(-)
diff --git a/src/ssf_bsdf_view.c b/src/ssf_bsdf_view.c
@@ -175,9 +175,7 @@ ssf_bsdf_view_sample
double
ssf_bsdf_view_eval
- (struct ssf_bsdf_view* view,
- const double wi[3],
- const double wo[3])
+ (struct ssf_bsdf_view* view, const double wi[3], const double wo[3])
{
double R = 0;
size_t i;
@@ -190,6 +188,21 @@ ssf_bsdf_view_eval
return R;
}
+double
+ssf_bsdf_view_pdf
+ (struct ssf_bsdf_view* view, const double wi[3], const double wo[3])
+{
+ double pdf = 0;
+ size_t i;
+ ASSERT(view && wi && wo);
+ ASSERT(d3_is_normalized(wi) && d3_is_normalized(wo));
+
+ FOR_EACH(i, 0, view->ncomponents) {
+ pdf += ssf_bxdf_pdf(view->components[i], wi, wo) * view->probas[i];
+ }
+ return pdf;
+}
+
/*******************************************************************************
* Local functions
******************************************************************************/
diff --git a/src/test_ssf_bsdf_view.c b/src/test_ssf_bsdf_view.c
@@ -78,6 +78,7 @@ main(int argc, char** argv)
const double v = rand_canonic();
const double weight = ssf_bsdf_view_sample(view, u, v, w, N, dir);
CHECK(ssf_bsdf_view_eval(view, w, dir), 0);
+ CHECK(ssf_bsdf_view_pdf(view, w, dir), 0);
sum += weight;
sqr_sum += weight*weight;
}