use crate::image::Image;
use crate::scene::{trace_ray, Camera, Sphere};
pub fn render(
spheres: &[Sphere],
camera: &Camera,
width: usize,
height: usize,
bounces: usize,
) -> Image {
let mut image = Image::new(width, height);
let pixels_total = width * height;
let mut pixels_done = 0;
let mut percent = 0;
for i in 0..width {
for j in 0..height {
let ray = camera.screen_ray(
i as f32 / (width - 1) as f32,
j as f32 / (height - 1) as f32,
);
let color = trace_ray(&spheres, &ray, bounces);
image.set_color(i, j, color);
pixels_done += 1;
let new_percent = pixels_done * 100 / pixels_total;
if new_percent != percent {
eprintln!("{}% done...", new_percent);
percent = new_percent;
}
}
}
image
}