star-sf

Set of surface and volume scattering functions
git clone git://git.meso-star.fr/star-sf.git
Log | Files | Refs | README | LICENSE

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:
Msrc/ssf_bsdf_view.c | 19++++++++++++++++---
Msrc/test_ssf_bsdf_view.c | 1+
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; }