diff --git a/2.png b/2.png
index 3a7fb18000664fba3baef0a35e31cfb2a334eef0..f4e8bc5420bfa561ea5116f7b74413cf48093bce 100644
Binary files a/2.png and b/2.png differ
diff --git a/basic_ray_tracing.png b/basic_ray_tracing.png
new file mode 100644
index 0000000000000000000000000000000000000000..35bb0c9d1404b133e5f89281254168125bb0d5ba
Binary files /dev/null and b/basic_ray_tracing.png differ
diff --git a/main b/main
index df7399bd0799f2a7ad65fde3e4325f0303412170..f13719644144ca950b95e06530b535eaaa152f85 100755
Binary files a/main and b/main differ
diff --git a/main.cpp b/main.cpp
index 6778c740d28d09de77e8a321e2371d61173dff7e..a3def7b4ef4a88692d49b3d005ab60c055bcd3f5 100644
--- a/main.cpp
+++ b/main.cpp
@@ -8,137 +8,10 @@
 
 
 
-void test_Vector3f()
-{
-	std::cout << "----- TEST Vector3f -----" << std::endl;
-
-	Vector3f a(1, 3, 1);
-	std::cout << "a=" << a << std::endl;
-
-	Vector3f b(a);
-	std::cout << "b=" << b << std::endl;
-
-	b = Vector3f(2, 2, 2);
-	std::cout << "b=" << b << std::endl;
-
-    Vector3f k=a^b;
-
-	std::cout << "a+b=" << a+b << std::endl;
-	std::cout << "a-b=" << a-b << std::endl;
-	std::cout << "a*b=" << a*b << std::endl;
-	std::cout << "a^b=" << k   << std::endl;
-	//std::cout << "b*2=" << b*2 << std::endl;
-	std::cout << "2*b=" << 2*b << std::endl;	
-	std::cout << "b/2=" << b/2 << std::endl;
-	std::cout << "norme de b = " << b.norm() << std::endl;
-
-	std::cout << std::endl << std::endl;
-}
-
-
-void test_Ray3f()
-{
-	std::cout << "----- TEST Ray3f -----" << std::endl;
-
-	Ray3f r(Vector3f(0,0,0), Vector3f(1,-2,0));
-	std::cout << "r" << std::endl << r << std::endl;
-
-	Ray3f u = Ray3f(r);
-	std::cout << "u" << std::endl << u << std::endl;
-
-	std::cout << std::endl << std::endl;
-}
-
-
-void test_Camera()
-{
-	std::cout << "----- TEST Camera -----" << std::endl;
-
-	Camera c(Vector3f(0,0,0), Vector3f(1,-2,0));
-	std::cout << "c" << std::endl << c << std::endl;
-
-	Camera u = Camera(c);
-	std::cout << "u" << std::endl << u << std::endl;
-
-	std::cout << std::endl << std::endl;
-}
-
-
-void test_Material()
-{
-	std::cout << "----- TEST Material -----" << std::endl;
-
-	Material a(-10,15,205,0.5);
-
-	std::cout << "a" << std::endl << a << std::endl;
-
-	std::cout << std::endl << std::endl;
-}
-
-
-void test_Quad()
-{
-	std::cout << "----- TEST Quad -----" << std::endl;
-
-	Material matter(-10, 15, 205, 0.5);
-	Quad q(matter, Vector3f(), 5, 5, 5);
-
-	std::cout << "q" << std::endl << q << std::endl;
-
-	std::cout << std::endl << std::endl;
-}
-
-
-void test_Sphere()
-{
-	std::cout << "----- TEST Sphere -----" << std::endl;
-
-	Material matter(-10, 15, 205, 0.7);
-	Sphere s(matter, Vector3f(), 5);
-
-	std::cout << "s" << std::endl << s << std::endl;
-
-	std::cout << std::endl << std::endl;
-}
-
-
-void test_Scene()
-{
-	std::cout << "----- TEST Scene -----" << std::endl;
-
-	Camera c(Vector3f(0,0,0), Vector3f(1,5,0));
-
-	Material matter(-10, 15, 205, 0.7);
-	Shape *tab[3];
-	tab[0] = new Quad(matter, Vector3f(), 5, 5, 5);
-	tab[1] = new Sphere(matter, Vector3f(), 5);
-	tab[2] = new Sphere(matter, Vector3f(), 5);
-
-	Ray3f source(Vector3f(10,10,10), Vector3f(1,-2,0));
-
-
-	Scene scene(c, tab, source);
-
-	//std::cout << "scene" << std::endl << scene << std::endl;
-
-	std::cout << std::endl << std::endl;
-}
-
-
-
 int main()
 {
 	try
 	{
-		//----------TESTS----------
-		/*test_Vector3f();
-		test_Ray3f();
-		test_Camera();
-		test_Material();
-		test_Quad();
-		test_Sphere();
-		test_Scene();*/
-
 
 		//----------MISE EN PLACE DE LA SCENE----------
 		Material red(255, 0, 0, 0);
@@ -152,7 +25,7 @@ int main()
 		Material black(0, 0, 0, 0);
 		Material mirror(0, 0, 0, 0.9);
 
-		int nb_shapes = 7;
+		int nb_shapes = 8;
 		float width = 100; //x
 		float height = 100; //y
 		float depth = 100; //z
@@ -169,28 +42,23 @@ int main()
 		shapes[3] = new Quad(cyan, Vector3f(0, height/2, depth/2), 0, height, depth); //mur droit
 		shapes[4] = new Quad(green, Vector3f(width/2, 0, depth/2), width, 0, depth); //sol
 		shapes[5] = new Quad(red, Vector3f(22, 15, 20), 10, 10, 10); //cube
-		shapes[6] = new Sphere(mirror, Vector3f(75, 20, 70), 20); //sphere
+		shapes[6] = new Sphere(red, Vector3f(75, 20, 70), 20); //sphere
+		shapes[7] = new Sphere(mirror, Vector3f(25, 20, 70), 20); //sphere
 
 		Camera camera(Vector3f(width/2, height/2, -50), Vector3f(0, 0, 1)); //on met la caméra un peu en recul
-		Ray3f source(Vector3f(width/2, height-1, depth/3), Vector3f(0, -1, 0)); //lumière au plafond
+		Ray3f source(Vector3f(width/2, height-10, depth/3), Vector3f(0, -1, 0)); //lumière au plafond
 		Scene scene(camera, shapes, source);
 
-		/* reflexion et hit test */
-
-		/*Ray3f light(Vector3f(71,70,70),Vector3f(-1,-1,-1));
-
-		std::cout<<"is hit "<<shapes[0]->is_hit(light)<<std::endl;
 
-		if(shapes[0]->is_hit(light))
-		{
-			std::cout<<"origin "<<shapes[0]->reflect(light).origin()<<std::endl;
-			std::cout<<"direction "<<shapes[0]->reflect(light).direction()<<std::endl;
-		}*/
 
 		//----------CALCUL ET SAUVEGARDE DE L'IMAGE----------
 		std::cout << "Création de l'image..." << std::endl;
-		std::string filename = "2.png";
-		scene.render(width, height, 1080, 1080, nb_shapes, (char *) filename.c_str());
+		std::string filename = "basic_ray_tracing.png";
+		std::string filename2 = "ray_tracing_reflexion.png";
+		std::string filename3 = "ray_tracing_shading.png";
+		scene.render(width, height, 1080, 1080, nb_shapes, (char *) filename.c_str(),2,false);
+		scene.render(width, height, 1080, 1080, nb_shapes, (char *) filename2.c_str(),6,false);
+		scene.render(width, height, 1080, 1080, nb_shapes, (char *) filename3.c_str(),6,true);
 		std::cout << "Image sauvegardée" << std::endl;
 
 		//----------LIBERATION DE LA MEMOIRE----------
diff --git a/ray3f.h b/ray3f.h
index eeb84d79f3972669bf56862e3dbe2dda4f1ef551..a40e809578d75ce242857cb5466007fd9d407bf9 100644
--- a/ray3f.h
+++ b/ray3f.h
@@ -49,6 +49,10 @@ class Ray3f
 		Vector3f direction() const;
 };
 
+	/*!
+	* \brief Opérateur d'affichage des coordonnées du vecteur origine et direction
+	*/
+
 std::ostream & operator<<(std::ostream & st, const Ray3f & v);
 
 
diff --git a/ray_tracing_reflexion.png b/ray_tracing_reflexion.png
new file mode 100644
index 0000000000000000000000000000000000000000..994bbabce981f991ca928ce687613f7293768118
Binary files /dev/null and b/ray_tracing_reflexion.png differ
diff --git a/ray_tracing_shading.png b/ray_tracing_shading.png
new file mode 100644
index 0000000000000000000000000000000000000000..f450a84d5be5328554e67d04cb16eb231d22974d
Binary files /dev/null and b/ray_tracing_shading.png differ
diff --git a/scene.cpp b/scene.cpp
index 3263b09af1bf94567cc5e987981318259c59ade2..685ed1e330737019aeafc6dd214cb0b84e701ba8 100644
--- a/scene.cpp
+++ b/scene.cpp
@@ -180,7 +180,7 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in
 }*/
 
 
-void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, int nb_shapes, char* filename)
+void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, int nb_shapes, char* filename, int ref_max, bool shading)
 {
 	/*--------------------------------Copié de la doc de libpng-------------------------------------*/
 	FILE *f = fopen(filename, "wb");
@@ -226,11 +226,14 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in
 	float min_dist;
 	float hit_dist;
 
-	int ref_max = 6;
 	Ray3f *ray[ref_max];
 	float shine[ref_max-1];
 	float coef[ref_max-1];
 
+	float incidence;
+	Vector3f S;
+	Vector3f N;
+
 
 	for (int i=nb_pixel_col-1; i>=0; i--) //on remplit l'image par le bas à droite
 	{
@@ -259,6 +262,19 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in
 					bool shadow = false;
 					Ray3f reflect_to_source(reflected.origin(), source_.origin()-reflected.origin());
 
+					if(shading)
+					{
+						S=reflect_to_source.direction();
+						N=(ray[r+1]->direction()-ray[r]->direction());
+
+						incidence=fmax(0.5,(fmin(1, (N*S)/(N.norm()*S.norm()))));						
+					}
+					else
+					{
+						incidence=1;
+					}
+
+
 
 					for (int l=0; l<nb_shapes; l++)
 					{
@@ -278,9 +294,9 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in
 
 					if (shadow)
 					{
-						row[3*(nb_pixel_row-1-j)] = row[3*(nb_pixel_row-1-j)] + coef[r]*fmin(50, 50*intensity);
-						row[3*(nb_pixel_row-1-j) + 1] = row[3*(nb_pixel_row-1-j) + 1] + coef[r]*fmin(50, 50*intensity);
-						row[3*(nb_pixel_row-1-j) + 2] = row[3*(nb_pixel_row-1-j) + 2] + coef[r]*fmin(50, 50*intensity);
+						row[3*(nb_pixel_row-1-j)] = row[3*(nb_pixel_row-1-j)] + incidence*coef[r]*fmin(50, 50*intensity);
+						row[3*(nb_pixel_row-1-j) + 1] = row[3*(nb_pixel_row-1-j) + 1] + incidence*coef[r]*fmin(50, 50*intensity);
+						row[3*(nb_pixel_row-1-j) + 2] = row[3*(nb_pixel_row-1-j) + 2] + incidence*coef[r]*fmin(50, 50*intensity);
 
 					}
 
@@ -292,17 +308,17 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in
 						//au lieu de diviser par une constante (2.) diviser par l'angle ?
 						if (  dist(reflect_to_source.origin() , shapes_[k]->reflect(source_to_reflect).origin()) > 0.05  )
 						{
-							row[3*(nb_pixel_row-1-j)] = row[3*(nb_pixel_row-1-j)] + coef[r]*fmin(shapes_[k]->matter().r()/2. * intensity, shapes_[k]->matter().r()/2.);
-							row[3*(nb_pixel_row-1-j) + 1] =row[3*(nb_pixel_row-1-j) + 1] + coef[r]*fmin(shapes_[k]->matter().g()/2. * intensity, shapes_[k]->matter().g()/2.);
-							row[3*(nb_pixel_row-1-j) + 2] =row[3*(nb_pixel_row-1-j) + 2] + coef[r]*fmin(shapes_[k]->matter().b()/2. * intensity, shapes_[k]->matter().b()/2.);
+							row[3*(nb_pixel_row-1-j)] = row[3*(nb_pixel_row-1-j)] + incidence*coef[r]*fmin(shapes_[k]->matter().r()/2. * intensity, shapes_[k]->matter().r()/2.);
+							row[3*(nb_pixel_row-1-j) + 1] =row[3*(nb_pixel_row-1-j) + 1] + incidence*coef[r]*fmin(shapes_[k]->matter().g()/2. * intensity, shapes_[k]->matter().g()/2.);
+							row[3*(nb_pixel_row-1-j) + 2] =row[3*(nb_pixel_row-1-j) + 2] + incidence*coef[r]*fmin(shapes_[k]->matter().b()/2. * intensity, shapes_[k]->matter().b()/2.);
 
 						}
 
 						else //il faut rajouter la réflexion et l'angle
 						{
-							row[3*(nb_pixel_row-1-j)] = row[3*(nb_pixel_row-1-j)] + coef[r]*fmin(shapes_[k]->matter().r() * intensity, 255.);
-							row[3*(nb_pixel_row-1-j) + 1] = row[3*(nb_pixel_row-1-j) + 1] + coef[r]*fmin(shapes_[k]->matter().g() * intensity, 255.);
-							row[3*(nb_pixel_row-1-j) + 2] = row[3*(nb_pixel_row-1-j) + 2] + coef[r]*fmin(shapes_[k]->matter().b() * intensity, 255.);
+							row[3*(nb_pixel_row-1-j)] = row[3*(nb_pixel_row-1-j)] + incidence*coef[r]*fmin(shapes_[k]->matter().r() * intensity, 255.);
+							row[3*(nb_pixel_row-1-j) + 1] = row[3*(nb_pixel_row-1-j) + 1] + incidence*coef[r]*fmin(shapes_[k]->matter().g() * intensity, 255.);
+							row[3*(nb_pixel_row-1-j) + 2] = row[3*(nb_pixel_row-1-j) + 2] + incidence*coef[r]*fmin(shapes_[k]->matter().b() * intensity, 255.);
 						}
 					}
 				}
@@ -310,13 +326,13 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in
 		}
 
 		png_write_row(png_ptr, row);
+
+		for (int r=0; r<ref_max;r++)
+			delete[] ray[r];
 	}
 
 	png_write_end(png_ptr, NULL);
 
-	for (int r=0; r<ref_max;r++)
-		delete[] ray[r];
-
 
 	fclose(f);
 }
diff --git a/scene.h b/scene.h
index d12bb8c6d59dcecaff85e5b97d20606af3a83450..23a84fb682782f4bb0d08947b573101188c05eb1 100644
--- a/scene.h
+++ b/scene.h
@@ -19,22 +19,84 @@
 class Scene
 {
 
-	Camera camera_;
-	Shape* *shapes_;
-	Ray3f source_;
+	Camera camera_;         /*!< La camera */
+	Shape* *shapes_;        /*!< Tableau de pointeurs des formes */
+	Ray3f source_;          /*!< Source de lumiere */
 
 	public:
+	/*!
+	 * \brief Constructeur
+	 *
+	 * Constructeur de la classe Scene
+	 * \param camera la camera
+	 * \param Shape tableau abstrait contenant des pointeurs vers des shapes
+	 * \param source Ray3f qui représente la source de lumiere
+	 */
 		Scene(Camera camera, Shape* *shapes, Ray3f source);
+	/*!
+	 * \brief Constructeur de Copie
+	 *
+	 * \param s La scene dont les paramètre sont copiées
+	 */
 		Scene(const Scene & s);
 		//~Scene();
 
+	/*!
+	* \brief Getter pour la camera de la scene
+	*/
 		Camera camera() const;
+	/*!
+	* \brief Getter pour le pointeur des shapes
+	*/
 		Shape* *shapes() const;
+	/*!
+	* \brief Getter pour la source de lumière de la scene
+	*/
 		Ray3f source() const;
 
-		void render(int width, int height, int nb_pixel_row, int nb_pixel_col, int nb_shapes, char* filename);
+	/*!
+	 * \brief Rendu de la scene
+	 *
+	 * La fonction principale du projet. Cree un rendu de la scene vu depuis la camera, au nom de filename. nb_shapes doit contenir le nombre de formes dans shapes_ à afficher. ref_max est le nombre de reflections maximales  à réaliser pour chaque rayon. Shading est un bool qui indique si on doit prendre en compte l'angle d'incidence sur les objet. Plus cet angle est grand plus la lumière est atténuée.
+	 * L'image est creee dans le dossier contenant l'executable
+	 * \param width largeur de l'image > 0
+	 * \param height hauteur de l'image > 0
+	 * \param nb_pixel_rox nombre de pixels sur les lignes
+	 * \param nb_pixel_col nombre de pixels sur les colonnes 
+	 * \param nb_shapes le nombre de formes à afficher 
+	 * \param filename string non vide
+	 * \param ref_max nombre de reflections maximales à réaliser
+	 * \param shading booléen, si vrai prend en compte l'incidence de la lumière sur les objets pour le rendu
+	 */
+		void render(int width, int height, int nb_pixel_row, int nb_pixel_col, int nb_shapes, char* filename, int ref_max, bool shading);
+
+	/*!
+	* \brief renvoie l'indice de shapes du premier objet touché par le rayon, si aucun objet n'est touché, renvoie -1
+	*
+	* \param nb_shapes nombre de shapes
+	* \param start Rayon dont on cherche le premier objet touché 
+	*/
 		int closer(int nb_shapes, Ray3f start);
+
+	/*!
+	* \brief modifie ray et shine 
+	*
+	*	modifie les tableaux pour qu'ils contiennent respectivement les rayon réfléchis et les coeffiscients de shiness des objets touchés en prenant en compte un nombre maximal de reflexions.
+	* \param ray doit contenir un premier rayon représentant la direction de la camera
+	* \param nb_shapes nombre des formes
+	* \param ref_max nombre maximal de reflections
+	* \param shines tableau de flotant 
+	*/	
 		void reflected_rays(Ray3f **ray, int nb_shapes, int ref_max, float* shine);
+
+	/*!
+	* \brief récupère le tableau de shiness et modifie les coeffiscients de reflexion
+	*
+	* En prenant en compte les coeffiscients de shiness des objets successifs touchés par un rayon, modifie le tableau coef pour qu'il contienne les coeffiscients de reflection des objets successifs touchés.
+	* \param shine tableau de flotant
+	* \param coef tableau de flotant
+	* \param ref_max nombre maximal de reflections
+	*/
 		void coeff(float* shine, float* coef, int ref_max);
 };
 
diff --git a/valgrind-out.txt b/valgrind-out.txt
new file mode 100644
index 0000000000000000000000000000000000000000..83c86ed61288d71dab41e78e806c15af7b80fd3e
--- /dev/null
+++ b/valgrind-out.txt
@@ -0,0 +1,654 @@
+==11822== Memcheck, a memory error detector
+==11822== Copyright (C) 2002-2017, and GNU GPL'd, by Julian Seward et al.
+==11822== Using Valgrind-3.13.0 and LibVEX; rerun with -h for copyright info
+==11822== Command: ./main
+==11822== Parent PID: 10617
+==11822== 
+--11822-- 
+--11822-- Valgrind options:
+--11822--    --leak-check=full
+--11822--    --show-leak-kinds=all
+--11822--    --track-origins=yes
+--11822--    --verbose
+--11822--    --log-file=valgrind-out.txt
+--11822-- Contents of /proc/version:
+--11822--   Linux version 4.15.0-48-generic (buildd@lgw01-amd64-036) (gcc version 7.3.0 (Ubuntu 7.3.0-16ubuntu3)) #51-Ubuntu SMP Wed Apr 3 08:28:49 UTC 2019
+--11822-- 
+--11822-- Arch and hwcaps: AMD64, LittleEndian, amd64-cx16-lzcnt-rdtscp-sse3-avx-avx2-bmi
+--11822-- Page sizes: currently 4096, max supported 4096
+--11822-- Valgrind library directory: /usr/lib/valgrind
+--11822-- Reading syms from /home/acheroufkebir/PAP/pap_ray_tracing_final/main
+--11822-- Reading syms from /lib/x86_64-linux-gnu/ld-2.27.so
+--11822--   Considering /lib/x86_64-linux-gnu/ld-2.27.so ..
+--11822--   .. CRC mismatch (computed 1b7c895e wanted 2943108a)
+--11822--   Considering /usr/lib/debug/lib/x86_64-linux-gnu/ld-2.27.so ..
+--11822--   .. CRC is valid
+--11822-- Reading syms from /usr/lib/valgrind/memcheck-amd64-linux
+--11822--   Considering /usr/lib/valgrind/memcheck-amd64-linux ..
+--11822--   .. CRC mismatch (computed 41ddb025 wanted 9972f546)
+--11822--    object doesn't have a symbol table
+--11822--    object doesn't have a dynamic symbol table
+--11822-- Scheduler: using generic scheduler lock implementation.
+--11822-- Reading suppressions file: /usr/lib/valgrind/default.supp
+==11822== embedded gdbserver: reading from /tmp/vgdb-pipe-from-vgdb-to-11822-by-acheroufkebir-on-???
+==11822== embedded gdbserver: writing to   /tmp/vgdb-pipe-to-vgdb-from-11822-by-acheroufkebir-on-???
+==11822== embedded gdbserver: shared mem   /tmp/vgdb-pipe-shared-mem-vgdb-11822-by-acheroufkebir-on-???
+==11822== 
+==11822== TO CONTROL THIS PROCESS USING vgdb (which you probably
+==11822== don't want to do, unless you know exactly what you're doing,
+==11822== or are doing some strange experiment):
+==11822==   /usr/lib/valgrind/../../bin/vgdb --pid=11822 ...command...
+==11822== 
+==11822== TO DEBUG THIS PROCESS USING GDB: start GDB like this
+==11822==   /path/to/gdb ./main
+==11822== and then give GDB the following command
+==11822==   target remote | /usr/lib/valgrind/../../bin/vgdb --pid=11822
+==11822== --pid is optional if only one valgrind process is running
+==11822== 
+--11822-- REDIR: 0x401f2f0 (ld-linux-x86-64.so.2:strlen) redirected to 0x580608c1 (???)
+--11822-- REDIR: 0x401f0d0 (ld-linux-x86-64.so.2:index) redirected to 0x580608db (???)
+--11822-- Reading syms from /usr/lib/valgrind/vgpreload_core-amd64-linux.so
+--11822--   Considering /usr/lib/valgrind/vgpreload_core-amd64-linux.so ..
+--11822--   .. CRC mismatch (computed 50df1b30 wanted 4800a4cf)
+--11822--    object doesn't have a symbol table
+--11822-- Reading syms from /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so
+--11822--   Considering /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so ..
+--11822--   .. CRC mismatch (computed f893b962 wanted 95ee359e)
+--11822--    object doesn't have a symbol table
+==11822== WARNING: new redirection conflicts with existing -- ignoring it
+--11822--     old: 0x0401f2f0 (strlen              ) R-> (0000.0) 0x580608c1 ???
+--11822--     new: 0x0401f2f0 (strlen              ) R-> (2007.0) 0x04c32db0 strlen
+--11822-- REDIR: 0x401d360 (ld-linux-x86-64.so.2:strcmp) redirected to 0x4c33ee0 (strcmp)
+--11822-- REDIR: 0x401f830 (ld-linux-x86-64.so.2:mempcpy) redirected to 0x4c374f0 (mempcpy)
+--11822-- Reading syms from /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0
+--11822--    object doesn't have a symbol table
+--11822-- Reading syms from /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25
+--11822--    object doesn't have a symbol table
+--11822-- Reading syms from /lib/x86_64-linux-gnu/libm-2.27.so
+--11822--   Considering /lib/x86_64-linux-gnu/libm-2.27.so ..
+--11822--   .. CRC mismatch (computed 7feae033 wanted b29b2508)
+--11822--   Considering /usr/lib/debug/lib/x86_64-linux-gnu/libm-2.27.so ..
+--11822--   .. CRC is valid
+--11822-- Reading syms from /lib/x86_64-linux-gnu/libgcc_s.so.1
+--11822--    object doesn't have a symbol table
+--11822-- Reading syms from /lib/x86_64-linux-gnu/libc-2.27.so
+--11822--   Considering /lib/x86_64-linux-gnu/libc-2.27.so ..
+--11822--   .. CRC mismatch (computed b1c74187 wanted 042cc048)
+--11822--   Considering /usr/lib/debug/lib/x86_64-linux-gnu/libc-2.27.so ..
+--11822--   .. CRC is valid
+--11822-- Reading syms from /lib/x86_64-linux-gnu/libz.so.1.2.11
+--11822--    object doesn't have a symbol table
+--11822-- REDIR: 0x5a4bc70 (libc.so.6:memmove) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4ad40 (libc.so.6:strncpy) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bf50 (libc.so.6:strcasecmp) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4a790 (libc.so.6:strcat) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4ad70 (libc.so.6:rindex) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4d7c0 (libc.so.6:rawmemchr) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bde0 (libc.so.6:mempcpy) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bc10 (libc.so.6:bcmp) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4ad00 (libc.so.6:strncmp) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4a800 (libc.so.6:strcmp) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bd40 (libc.so.6:memset) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a690f0 (libc.so.6:wcschr) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4aca0 (libc.so.6:strnlen) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4a870 (libc.so.6:strcspn) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bfa0 (libc.so.6:strncasecmp) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4a840 (libc.so.6:strcpy) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4c0e0 (libc.so.6:memcpy@@GLIBC_2.14) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4ada0 (libc.so.6:strpbrk) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4a7c0 (libc.so.6:index) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4ac70 (libc.so.6:strlen) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a556c0 (libc.so.6:memrchr) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bff0 (libc.so.6:strcasecmp_l) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bbe0 (libc.so.6:memchr) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a69eb0 (libc.so.6:wcslen) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4b050 (libc.so.6:strspn) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bf20 (libc.so.6:stpncpy) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4bef0 (libc.so.6:stpcpy) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4d7f0 (libc.so.6:strchrnul) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5a4c040 (libc.so.6:strncasecmp_l) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5ade8a0 (libc.so.6:__memcpy_chk) redirected to 0x4a2a6e0 (_vgnU_ifunc_wrapper)
+--11822-- REDIR: 0x5b3b3c0 (libc.so.6:__strrchr_avx2) redirected to 0x4c32730 (rindex)
+--11822-- REDIR: 0x5a44070 (libc.so.6:malloc) redirected to 0x4c2faa0 (malloc)
+--11822-- REDIR: 0x5b3b590 (libc.so.6:__strlen_avx2) redirected to 0x4c32cf0 (strlen)
+--11822-- REDIR: 0x5b37ba0 (libc.so.6:__memcmp_avx2_movbe) redirected to 0x4c35e00 (bcmp)
+--11822-- REDIR: 0x5b16d60 (libc.so.6:__strcmp_ssse3) redirected to 0x4c33da0 (strcmp)
+--11822-- REDIR: 0x5101190 (libstdc++.so.6:operator new(unsigned long)) redirected to 0x4c30110 (operator new(unsigned long))
+--11822-- REDIR: 0x5b3bad0 (libc.so.6:__memcpy_avx_unaligned_erms) redirected to 0x4c366e0 (memmove)
+--11822-- REDIR: 0x5a4b590 (libc.so.6:__GI_strstr) redirected to 0x4c37760 (__strstr_sse2)
+--11822-- REDIR: 0x5b3bab0 (libc.so.6:__mempcpy_avx_unaligned_erms) redirected to 0x4c37130 (mempcpy)
+--11822-- REDIR: 0x5b3bf50 (libc.so.6:__memset_avx2_unaligned_erms) redirected to 0x4c365d0 (memset)
+--11822-- REDIR: 0x50ff310 (libstdc++.so.6:operator delete[](void*)) redirected to 0x4c316d0 (operator delete[](void*))
+==11822== Mismatched free() / delete / delete []
+==11822==    at 0x4C3173B: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E235: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==  Address 0x96fefc0 is 0 bytes inside a block of size 24 alloc'd
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+--11822-- REDIR: 0x5a44950 (libc.so.6:free) redirected to 0x4c30cd0 (free)
+==11822== Mismatched free() / delete / delete []
+==11822==    at 0x4C3173B: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E235: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==  Address 0x12229120 is 0 bytes inside a block of size 24 alloc'd
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== Mismatched free() / delete / delete []
+==11822==    at 0x4C3173B: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E235: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==  Address 0x1ad533a0 is 0 bytes inside a block of size 24 alloc'd
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== Mismatched free() / delete / delete []
+==11822==    at 0x4C3173B: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x110104: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==  Address 0x5fccc80 is 0 bytes inside a block of size 48 alloc'd
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10F8BF: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+--11822-- REDIR: 0x50ff2e0 (libstdc++.so.6:operator delete(void*)) redirected to 0x4c311d0 (operator delete(void*))
+==11822== 
+==11822== HEAP SUMMARY:
+==11822==     in use at exit: 88,068,768 bytes in 3,633,819 blocks
+==11822==   total heap usage: 3,633,852 allocs, 33 frees, 88,157,216 bytes allocated
+==11822== 
+==11822== Searching for pointers to 3,633,819 not-freed blocks
+==11822== Checked 119,672 bytes
+==11822== 
+==11822== 48 bytes in 2 blocks are still reachable in loss record 1 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 48 bytes in 2 blocks are possibly lost in loss record 2 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 72 bytes in 3 blocks are possibly lost in loss record 3 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 72 bytes in 3 blocks are indirectly lost in loss record 4 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 120 bytes in 5 blocks are possibly lost in loss record 5 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 144 bytes in 6 blocks are indirectly lost in loss record 6 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 144 bytes in 6 blocks are indirectly lost in loss record 7 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 216 bytes in 9 blocks are indirectly lost in loss record 8 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 216 bytes in 9 blocks are indirectly lost in loss record 9 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 360 bytes in 1 blocks are definitely lost in loss record 10 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E40F32: png_create_info_struct (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CCC6: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 360 bytes in 1 blocks are definitely lost in loss record 11 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E40F32: png_create_info_struct (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CCC6: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 360 bytes in 1 blocks are definitely lost in loss record 12 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E40F32: png_create_info_struct (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CCC6: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,620 bytes in 1 blocks are definitely lost in loss record 13 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CDE5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,620 bytes in 1 blocks are definitely lost in loss record 14 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CDE5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,620 bytes in 1 blocks are definitely lost in loss record 15 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CDE5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 16 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E613B3: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 17 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E614A2: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 18 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E614E3: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 19 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E46E08: png_calloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61419: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 20 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E613B3: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 21 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E614A2: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 22 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E614E3: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 23 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E46E08: png_calloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61419: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 24 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E613B3: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 25 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E614A2: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 26 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E614E3: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 1,621 bytes in 1 blocks are indirectly lost in loss record 27 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E46E08: png_calloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61419: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C84B: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 5,952 bytes in 1 blocks are indirectly lost in loss record 28 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5E14: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 5,952 bytes in 1 blocks are indirectly lost in loss record 29 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5E14: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 5,952 bytes in 1 blocks are indirectly lost in loss record 30 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5E14: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 8,200 bytes in 1 blocks are indirectly lost in loss record 31 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FCFE: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 8,200 bytes in 1 blocks are indirectly lost in loss record 32 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FCFE: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 8,200 bytes in 1 blocks are indirectly lost in loss record 33 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46DDD: png_malloc (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FCFE: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 34 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5E9E: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 35 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EB1: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 36 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EC7: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 37 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EF6: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 38 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5E9E: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 39 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EB1: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 40 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EC7: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 41 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EF6: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 42 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5E9E: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 43 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EB1: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 44 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EC7: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 65,536 bytes in 1 blocks are indirectly lost in loss record 45 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x5DA5EF6: deflateInit2_ (in /lib/x86_64-linux-gnu/libz.so.1.2.11)
+==11822==    by 0x4E5EDF0: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5FA92: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E61B45: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C981: png_write_row (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10E1CB: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 284,228 (1,256 direct, 282,972 indirect) bytes in 1 blocks are definitely lost in loss record 46 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E40E8F: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C74C: png_create_write_struct_2 (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C7F0: png_create_write_struct (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CC6D: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 284,300 (1,256 direct, 283,044 indirect) bytes in 1 blocks are definitely lost in loss record 47 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E40E8F: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C74C: png_create_write_struct_2 (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C7F0: png_create_write_struct (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CC6D: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 284,372 (1,256 direct, 283,116 indirect) bytes in 1 blocks are definitely lost in loss record 48 of 54
+==11822==    at 0x4C2FB0F: malloc (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x4E46E81: png_malloc_warn (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E40E8F: ??? (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C74C: png_create_write_struct_2 (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x4E5C7F0: png_create_write_struct (in /usr/lib/x86_64-linux-gnu/libpng16.so.16.34.0)
+==11822==    by 0x10CC6D: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 6,998,040 bytes in 291,585 blocks are definitely lost in loss record 49 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 6,998,304 bytes in 291,596 blocks are definitely lost in loss record 50 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 6,998,376 bytes in 291,599 blocks are definitely lost in loss record 51 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 7,397,016 bytes in 308,209 blocks are definitely lost in loss record 52 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 29,408,880 bytes in 1,225,370 blocks are definitely lost in loss record 53 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 29,409,024 bytes in 1,225,376 blocks are definitely lost in loss record 54 of 54
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E5DF: Scene::reflected_rays(Ray3f**, int, int, float*) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10D0FD: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== LEAK SUMMARY:
+==11822==    definitely lost: 87,219,348 bytes in 3,633,744 blocks
+==11822==    indirectly lost: 849,132 bytes in 63 blocks
+==11822==      possibly lost: 240 bytes in 10 blocks
+==11822==    still reachable: 48 bytes in 2 blocks
+==11822==         suppressed: 0 bytes in 0 blocks
+==11822== 
+==11822== ERROR SUMMARY: 40 errors from 22 contexts (suppressed: 0 from 0)
+==11822== 
+==11822== 2 errors in context 1 of 22:
+==11822== Mismatched free() / delete / delete []
+==11822==    at 0x4C3173B: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E235: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==  Address 0x96fefc0 is 0 bytes inside a block of size 24 alloc'd
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x10FFDD: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 
+==11822== 6 errors in context 2 of 22:
+==11822== Mismatched free() / delete / delete []
+==11822==    at 0x4C3173B: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E235: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==  Address 0x1ad533a0 is 0 bytes inside a block of size 24 alloc'd
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x11008B: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 
+==11822== 6 errors in context 3 of 22:
+==11822== Mismatched free() / delete / delete []
+==11822==    at 0x4C3173B: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10E235: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==  Address 0x12229120 is 0 bytes inside a block of size 24 alloc'd
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10D0B5: Scene::render(int, int, int, int, int, char*, int, bool) (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==    by 0x110034: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== 
+==11822== 8 errors in context 4 of 22:
+==11822== Mismatched free() / delete / delete []
+==11822==    at 0x4C3173B: operator delete[](void*) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x110104: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822==  Address 0x5fccc80 is 0 bytes inside a block of size 48 alloc'd
+==11822==    at 0x4C3017F: operator new(unsigned long) (in /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so)
+==11822==    by 0x10F8BF: main (in /home/acheroufkebir/PAP/pap_ray_tracing_final/main)
+==11822== 
+==11822== ERROR SUMMARY: 40 errors from 22 contexts (suppressed: 0 from 0)
diff --git a/vector3f.h b/vector3f.h
index b6ba1e3045bf52b45cdab965399061b76d95fde6..b227c49768ba70482ff06ff51462b45d0691ab45 100644
--- a/vector3f.h
+++ b/vector3f.h
@@ -41,7 +41,7 @@ class Vector3f
 	 * \brief Constructeur de copie
 	 *
 	 * Constructeur de copie de la classe Vector3f
-	 * \param v le vecteur àcopier dans this
+	 * \param v le vecteur à copier dans this
 	 */
 		Vector3f(const Vector3f & v);
 		Vector3f();
@@ -72,22 +72,66 @@ class Vector3f
 		void normalize();
 };
 
-
+	/*!
+	* \brief Opérateur d'affichage des paramètres du vecteur
+	* \param v Le vecteur à afficher
+	*/
 std::ostream & operator<<(std::ostream & st, const Vector3f & v);
 
+	/*!
+	* \brief Opérateur d'addition de vecteurs
+	* \param v1 Le premier vecteur
+	* \parma v2 Le deuxième vecteur
+	*/
 Vector3f operator+(const Vector3f & v1, const Vector3f & v2);
 
+	/*!
+	* \brief Opérateur de soustracton de vecteurs
+	* \param v1 Le premier vecteur
+	* \parma v2 Le deuxième vecteur
+	*/
 Vector3f operator-(const Vector3f & v1, const Vector3f & v2);
 
+	/*!
+	* \brief Renvoie le produit scalaire entre deux vecteurs
+	* \param v1 Le premier vecteur
+	* \parma v2 Le deuxième vecteur
+	*/
 float operator*(const Vector3f & v1, const Vector3f & v2);
 
+	/*!
+	* \brief Opérateur de multiplication de vecteurs par des sclaires
+	* \param v Le premier vecteur
+	* \pram d flotant
+	*/
 Vector3f operator*(const Vector3f & v, float d);
+
+	/*!
+	* \brief Opérateur de multiplication de vecteurs par des sclaires
+	* \param d flotant
+	* \param v Le premier vecteur
+	*/
 Vector3f operator*(float d, const Vector3f & v);
 
+	/*!
+	* \brief Opérateur de division de vecteurs par des sclaires
+	* \param v1 Le premier vecteur
+	* \param d flotant
+	*/
 Vector3f operator/(const Vector3f & v, float d);
 
+	/*!
+	* \brief Opérateur de preoduit vectoriel entre deux vecteurs
+	* \param v1 Le premier vecteur
+	* \parma v2 Le deuxième vecteur
+	*/
 Vector3f operator^(const Vector3f & v1, const Vector3f & v2);
 
+	/*!
+	* \brief Renvoie la distance entre deux vecteur de l'espace
+	* \param v1 Le premier vecteur
+	* \parma v2 Le deuxième vecteur
+	*/
 float dist(const Vector3f & v1, const Vector3f & v2);