From bc27be0f85ac0ec245f5bc2d39aea86187ca742b Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Fri, 25 Jun 2010 16:16:08 +0000 Subject: [PATCH] added Ray::randomRay() to generated a ray with origin at (0,0,0) and a random direction git-svn-id: svn://anubis/fart/trunk@254 7f9b0f55-74a9-4bce-be96-3c2cd072584d --- main/fart.cc | 10 ++++++++-- util/Ray.cc | 17 ++++++++++++++++- util/Ray.h | 1 + 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/main/fart.cc b/main/fart.cc index cd9b787..3087655 100644 --- a/main/fart.cc +++ b/main/fart.cc @@ -1,15 +1,19 @@ -#include #include #include /* sysconf() */ -#include +#include /* rand(), srand() */ +#include /* time() */ #include #include /* gettimeofday() */ + +#include #include #include + #include "Scene.h" #include "distrib/distrib.h" #include "BMP.h" + using namespace std; void usage(const char * progname) @@ -163,6 +167,8 @@ int main(int argc, char * argv[]) usage(argv[0]); } + srand(time(NULL)); + const char * filename = argv[optind]; client_options.push_back(filename); Scene scene(scene_options, filename); diff --git a/util/Ray.cc b/util/Ray.cc index ebf592c..2eac9f3 100644 --- a/util/Ray.cc +++ b/util/Ray.cc @@ -1,6 +1,9 @@ +#include /* rand() */ + +#include + #include "Ray.h" -#include Ray::Ray() { @@ -13,6 +16,18 @@ Ray::Ray(const Vector & origin, const Vector & direction) m_direction.normalize(); } +Ray Ray::randomRay() +{ + double x, y, z; + do + { + x = 2.0 * rand() / RAND_MAX - 1.0; + y = 2.0 * rand() / RAND_MAX - 1.0; + z = 2.0 * rand() / RAND_MAX - 1.0; + } while (x*x + y*y + z*z <= 1.0); + return Ray(Vector(0, 0, 0), Vector(x, y, z)); +} + /* * return a vector for the point at distance dist * from the ray's origin point, along its direction. diff --git a/util/Ray.h b/util/Ray.h index 806a359..146d7a9 100644 --- a/util/Ray.h +++ b/util/Ray.h @@ -10,6 +10,7 @@ class Ray public: Ray(); Ray(const Vector & origin, const Vector & direction); + static Ray randomRay(); const Vector & getOrigin() const { return m_origin; } const Vector & getDirection() const { return m_direction; } Vector getPositionAt(double dist) const;