diff options
| author | ladevieq <ladevie.quentin@gmail.com> | 2020-12-20 22:55:01 +0100 |
|---|---|---|
| committer | ladevieq <ladevie.quentin@gmail.com> | 2020-12-20 22:55:01 +0100 |
| commit | 25ac4fd14409a0d82bbaaaf4018674c3bdd46b03 (patch) | |
| tree | 531d67a2390531f68ab54b61c97789e02f811788 /src/main.cpp | |
| parent | 643708a9922cabe9b37329ee41a8668087dc92d7 (diff) | |
Multi sampled pixels
Diffstat (limited to 'src/main.cpp')
| -rw-r--r-- | src/main.cpp | 32 |
1 files changed, 14 insertions, 18 deletions
diff --git a/src/main.cpp b/src/main.cpp index 15fd165..f7c4b0e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,38 +27,34 @@ int main() { const double aspect_ratio = 16.0 / 9.0; const size_t width = 400; const size_t height = width / aspect_ratio; + const uint32_t samples_per_pixel = 100; + + camera camera { {}, aspect_ratio, 1.0 }; // World hittable objects hittable_list world {}; world.add(std::make_shared<sphere>(point3(0,0,-1), 0.5)); world.add(std::make_shared<sphere>(point3(0,-100.5,-1), 100)); - // Viewport dimensions - const double viewport_height = 2.0; - const double viewport_width = viewport_height * aspect_ratio; - - // Unit vectors for viewport pixels - const vec3 horizontal { viewport_width / width, 0.0, 0.0 }; - const vec3 vertical { 0.0, viewport_height / height, 0.0 }; - - // We use a right handed coord system - camera camera { {}, aspect_ratio, 1.0 }; - // PPM format header std::cout << "P3\n" << width << '\n' << height << "\n 255" << std::endl; std::cerr << "Generating image" << std::endl; for (ssize_t row = height - 1; row >= 0; row--) { - // std::cerr << row << " lines remaining" << std::endl; + std::cerr << row << " lines remaining" << std::endl; for (size_t column = 0; column < width; column++) { - auto u = double(column) / (width - 1.0); - auto v = double(row) / (height - 1.0); - auto ray = camera.get_ray(u, v); + color pixel_color; + + for (size_t sample_index = 0; sample_index < samples_per_pixel; sample_index++) { + auto u = double(column + randd()) / (width - 1.0); + auto v = double(row + randd()) / (height - 1.0); + auto ray = camera.get_ray(u, v); + + pixel_color += ray_color(ray, world); + } - write_color(std::cout, ray_color(ray, world), 1.0); - // write_color(std::cout, color(ray.direction.unit().y, ray.direction.unit().y, ray.direction.unit().y)); - // write_color(std::cout, color(y.y, y.y, y.y)); + write_color(std::cout, pixel_color, samples_per_pixel); } } |
