include/raytracer.h
branchpyrit
changeset 98 64638385798a
parent 95 ca7d4c665531
--- a/include/raytracer.h	Thu May 15 19:15:57 2008 +0200
+++ b/include/raytracer.h	Mon May 19 22:59:04 2008 +0200
@@ -42,26 +42,49 @@
  */
 class Raytracer
 {
-	Container *top;
-	Sampler *sampler;
-	Camera *camera;
-	vector<Light*> lights;
-	Colour bg_colour;
+	Container *top;    /**< container with shapes */
+	Sampler *sampler;  /**< active sampler */
+	Camera *camera;    /**< active camera */
+	vector<Light*> lights; /**< array of lights in the scene */
+	Colour bg_colour;  /**< background colour */
+
+	/* ambient occlussion parameters */
 	Float ao_distance, ao_angle;
 	int ao_samples;
-	int num_threads;
-	int max_depth;
-	bool use_packets;
 
+	int num_threads;  /**< number of threads to use for rendering */
+	int max_depth;    /**< maximum depth of recursion */
+	bool use_packets; /**< allow ray packet tracing */
+
+	/* private helper variables */
 	Sample *sample_queue;
 	int sample_queue_pos, sample_queue_size, sample_queue_count;
 	bool end_of_samples;
 	pthread_mutex_t sample_queue_mutex, sampler_mutex;
 	pthread_cond_t sample_queue_cond, worker_ready_cond;
 
+	/**
+	 * Hammersley spherical point distribution function
+	 * http://www.cse.cuhk.edu.hk/~ttwong/papers/udpoint/udpoints.html
+	 * @param[in] i   sample index
+	 * @param[in] n   number of samples
+	 * @param[in] extent   angle of dispersion
+	 * @param[in] normal   central direction vector
+	 */
 	Vector SphereDistribute(int i, int n, Float extent, const Vector &normal);
+
+	/**
+	 * shader implementing Phong lighting model
+	 * @param[in] P    point of intersection
+	 * @param[in] N    normal in intersect. point
+	 * @param[in] R    direction of reflected ray
+	 * @param[in] V    direction to the viewer
+	 * @return colour of the surface
+	 */
 	Colour PhongShader(const Shape *shape,
 		const Vector &P, const Vector &N, const Vector &V);
+
+	/** light scattering function */
 	void lightScatter(const Ray &ray, const Shape *shape, int depth,
 		const Vector &P, const Vector &normal, bool from_inside, Colour &col);
 
@@ -71,6 +94,7 @@
 	void raytracePacket(RayPacket &rays, Colour *results);
 #endif
 
+	/** main function of the ray tracing worker */
 	NORETURN static void *raytrace_worker(void *d);
 
 public:
@@ -90,21 +114,40 @@
 		pthread_cond_destroy (&worker_ready_cond);
 	}
 
+	/** start the rendering process */
 	void render();
+
+	/** ray trace one ray */
 	Colour raytrace(Ray &ray, int depth, const Shape *origin_shape);
+
+	/** add shape to container */
 	void addShape(Shape *shape) { top->addShape(shape); };
+
+	/** add light to scene */
 	void addLight(Light *light) { lights.push_back(light); };
+
+	/** set active sampler */
 	void setSampler(Sampler *sampl) { sampler = sampl; };
 	Sampler *&getSampler() { return sampler; };
+
+	/** set active camera */
 	void setCamera(Camera *cam) { camera = cam; };
 	Camera *&getCamera() { return camera; };
+
+	/** set active container */
 	void setTop(Container *atop) { top = atop; };
 	Container *&getTop() { return top; };
 
+	/** set background colour */
 	void setBgColour(const Colour &bg) { bg_colour = bg; };
+
+	/** set maximum depth of recursion */
 	void setMaxDepth(int newdepth) { max_depth = newdepth; };
 
+	/** set ambient occlusion parameters */
 	void ambientOcclusion(int samples, Float distance, Float angle);
+
+	/** set number of threads to use for rendering */
 	void setThreads(int num) { num_threads = num; };
 };