diff --git a/RayTracer/tools/Random.cpp b/RayTracer/tools/Random.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6e685859dbd690671e7132e8be3143acb66810ac --- /dev/null +++ b/RayTracer/tools/Random.cpp @@ -0,0 +1,20 @@ +#include "Random.h" + +namespace util { + +Vec3 rand_vec3() { + return Vec3(dis(gen), dis(gen), dis(gen)); +} + +bool in_circle(const Vec3& v) { + return v.length() <= 1; +} + +Vec3 rand_vec3_in_circle(float r) { + Vec3 result; + do { + result = rand_vec3(); + } while (!in_circle(result)); + return result * r; +} +} // namespace util \ No newline at end of file diff --git a/RayTracer/tools/Random.h b/RayTracer/tools/Random.h new file mode 100644 index 0000000000000000000000000000000000000000..dfc8b4fc4602dce76a28fca8bfee33d79d237e27 --- /dev/null +++ b/RayTracer/tools/Random.h @@ -0,0 +1,15 @@ +#pragma once + +#include <random> + +#include "Vec3.h" + +namespace util { + +static std::random_device rd; +static std::mt19937 gen(rd()); +static std::uniform_real_distribution<> dis(-1.0, 1.0); +Vec3 rand_vec3(); +bool in_circle(const Vec3& v); +Vec3 rand_vec3_in_circle(float r); +} // namespace util