diff --git a/0.png b/0.png index 0ac888ac5fd8aea0c0b896f0c09a7cda4f02d8c3..65c01647e5bd70fb52e9fb06fccd039113c0b989 100644 Binary files a/0.png and b/0.png differ diff --git a/2.png b/2.png new file mode 100644 index 0000000000000000000000000000000000000000..4ed86d8537c100c777481be7d82f8d453965eb80 Binary files /dev/null and b/2.png differ diff --git a/main b/main index d1569d395ae0026a97300d382cda0dcc592ae451..c248d48d4ff0cc9440be85d18a0ca9445982a5b2 100644 Binary files a/main and b/main differ diff --git a/main.cpp b/main.cpp index b9187c2d02318fb52f507fac874e80c82178cfbe..d52af0562d816677d9854e8cabc11d5bf40ce642 100644 --- a/main.cpp +++ b/main.cpp @@ -191,8 +191,8 @@ int main() //----------CALCUL ET SAUVEGARDE DE L'IMAGE---------- std::cout << "Création de l'image..." << std::endl; - std::string filename = "0.png"; - scene.render(width, height, 480, 480, nb_shapes, (char *) filename.c_str()); + std::string filename = "2.png"; + scene.render(width, height, 1080, 1080, nb_shapes, (char *) filename.c_str()); std::cout << "Image sauvegardée" << std::endl; //----------LIBERATION DE LA MEMOIRE---------- diff --git a/scene.cpp b/scene.cpp index cbe90ccc789a678105a03fd0928e50c78cc58102..5749efb87cbb450b309e34d1e98a6a1cb1d5d2dc 100644 --- a/scene.cpp +++ b/scene.cpp @@ -136,7 +136,9 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in } } - float intensity = 60/dist(reflected.origin(), source_.origin()); //pour atténuer la lumière selon la distance + //intensité pour harmoniser les ombres selon la distance + float intensity = dist(reflected.origin(), source_.origin()); + intensity = 5000/(intensity*intensity); if (shadow) { @@ -149,15 +151,16 @@ void Scene::render(int width, int height, int nb_pixel_row, int nb_pixel_col, in { Ray3f source_to_reflect(source_.origin(), reflected.origin()-source_.origin()); - - if ( dist(reflect_to_source.origin() , shapes_[k]->reflect(source_to_reflect).origin()) > 0.5 ) //self_shadow + //self_shadow + //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)] = fmin(shapes_[k]->matter().r()/2 * intensity, shapes_[k]->matter().r()/2); - row[3*(nb_pixel_row-1-j) + 1] = fmin(shapes_[k]->matter().g()/2 * intensity, shapes_[k]->matter().g()/2); - row[3*(nb_pixel_row-1-j) + 2] = fmin(shapes_[k]->matter().b()/2 * intensity, shapes_[k]->matter().b()/2); + row[3*(nb_pixel_row-1-j)] = fmin(shapes_[k]->matter().r()/2. * intensity, shapes_[k]->matter().r()/2.); + row[3*(nb_pixel_row-1-j) + 1] = fmin(shapes_[k]->matter().g()/2. * intensity, shapes_[k]->matter().g()/2.); + row[3*(nb_pixel_row-1-j) + 2] = fmin(shapes_[k]->matter().b()/2. * intensity, shapes_[k]->matter().b()/2.); } - else //il faut rajouter la réflexion + else //il faut rajouter la réflexion et l'angle { row[3*(nb_pixel_row-1-j)] = fmin(shapes_[k]->matter().r() * intensity, 255.); row[3*(nb_pixel_row-1-j) + 1] = fmin(shapes_[k]->matter().g() * intensity, 255.);