diff --git a/2.png b/2.png index a4930f70c5490e930d75e078e8eea0d619046e44..e49820962237b27447f2b35c1ab4a7363621c506 100644 Binary files a/2.png and b/2.png differ diff --git a/main b/main index 5595c74b405ef063a25f4cc3473dd2b77208437f..20a13ddc1a0d4c04053bdb5042676604a6b2bf22 100755 Binary files a/main and b/main differ diff --git a/main.cpp b/main.cpp index ccea6f982cc04d275c7727b271b51ae1a2d07a8a..71016f07b6f826ab547e2715ccb67e6d4780eaf6 100644 --- a/main.cpp +++ b/main.cpp @@ -150,7 +150,7 @@ int main() Material white(255, 255, 255, 0); Material grey(122, 122, 122, 0); Material black(0, 0, 0, 0); - Material mirror(255, 255, 255, 0.9); + Material mirror(0, 0, 0, 0.9); int nb_shapes = 7; float width = 100; //x diff --git a/scene.cpp b/scene.cpp index f8c584d252f37bad24161708687db13bfbe89b59..26df48bc415f1b50013e57de7d2694f0a452a3c7 100644 --- a/scene.cpp +++ b/scene.cpp @@ -226,7 +226,7 @@ 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=3; + int ref_max=4; Ray3f *ray[ref_max]; float shine[ref_max-1]; float coef[ref_max-1]; @@ -236,7 +236,6 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in { for (int j=0; j<nb_pixel_row; j++) { - min_dist = 1000; Vector3f Pij(j*pw, i*ph, 0); //point de la grille par laquelle on regarde Ray3f camera_to_grid(camera_.position(), Pij-camera_.position()); ray[0]=new Ray3f(camera_to_grid); @@ -244,20 +243,19 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in nb_reflected(ray, nb_shapes, ref_max, shine); coeff(shine, coef, ref_max); - - row[3*(nb_pixel_row-1-j)] = 0; row[3*(nb_pixel_row-1-j) + 1] = 0; row[3*(nb_pixel_row-1-j) + 2] = 0; for(int r=0;r<ref_max-1;r++) { + min_dist = 1000; for (int k=0; k<nb_shapes; k++) { if (shapes_[k]->is_hit(*ray[r])) { Ray3f reflected(shapes_[k]->reflect(*ray[r])); - hit_dist = dist(reflected.origin() , camera_.position()); + hit_dist = dist(reflected.origin() , ray[r]->origin()); if ( hit_dist < min_dist ) //on regarde l'objet le plus proche de la caméra { @@ -288,6 +286,7 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in 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); + } else @@ -301,6 +300,7 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in 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.); + } else //il faut rajouter la réflexion et l'angle @@ -308,6 +308,7 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in 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.); + } } }