commit 424ed34658422dc46808cbfdc8b36d4e309609ab
parent 96738f21aef83519e46dab47a5166c039b8b54d8
Author: Vincent Forest <vincent.forest@meso-star.com>
Date: Thu, 23 Jul 2015 14:40:14 +0200
Fix a strong issue in the uniform sampling of a triangle
Diffstat:
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt
@@ -67,7 +67,7 @@ rcmake_append_runtime_dirs(_runtime_dirs RSys ${Boost_LIBRARY_DIRS})
################################################################################
set(VERSION_MAJOR 0)
set(VERSION_MINOR 2)
-set(VERSION_PATCH 0)
+set(VERSION_PATCH 1)
set(VERSION ${VERSION_MAJOR}.${VERSION_MINOR}.${VERSION_PATCH})
set(SSP_FILES_SRC ssp_rng.c ssp_rng_proxy.c)
diff --git a/src/ssp.h b/src/ssp.h
@@ -251,17 +251,17 @@ ssp_ran_triangle_uniform
const float v0[3], const float v1[3], const float v2[3],/*triangle vertices*/
float sample[3]) /* Sampled position */
{
- double u, v, one_minus_u;
+ double sqrt_u, v, one_minus_u;
int i;
ASSERT(rng && v0 && v1 && v2 && sample);
- u = ssp_rng_canonical(rng);
+ sqrt_u = sqrt(ssp_rng_canonical(rng));
v = ssp_rng_canonical(rng);
- one_minus_u = 1.0 - u;
+ one_minus_u = 1.0 - sqrt_u;
FOR_EACH(i, 0, 3) {
sample[i] = (float)
- (v2[i] + one_minus_u * (v0[i] - v2[i]) + (v*u) * (v1[i] - v2[i]));
+ (v2[i] + one_minus_u * (v0[i] - v2[i]) + (v*sqrt_u) * (v1[i] - v2[i]));
}
return sample;
}