aboutsummaryrefslogtreecommitdiffstats
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp32
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);
}
}