ft: moved random scene code to function; cleaned up tri/quad/cube hit logic; made camera attributes private
This commit is contained in:
1 parent
71985a6c34
commit
64cad7eda6
11 files changed
+259
-221
No files matched your search
+13
-10
@@ -27,9 +27,9 @@ pub fn render(scene: &mut Scene) {
|
||||
scene.init();
|
||||
|
||||
// TODO: currently splits per vertical line, but could be more granular (per chunk)
|
||||
let mut pixels = vec![0_u8; (scene.image_width * scene.image_height * 3) as usize];
|
||||
let mut pixels = vec![0_u8; (scene.get_image_width() * scene.get_image_height() * 3) as usize];
|
||||
let scanlines: Vec<(usize, &mut [u8])> = pixels
|
||||
.chunks_mut(scene.image_width as usize * 3)
|
||||
.chunks_mut(scene.get_image_width() as usize * 3)
|
||||
.enumerate()
|
||||
.collect();
|
||||
|
||||
@@ -37,14 +37,18 @@ pub fn render(scene: &mut Scene) {
|
||||
scanlines.into_par_iter().for_each(|(i, chunk)| {
|
||||
render_chunk(chunk, scene, i as u32);
|
||||
});
|
||||
info!("rendering took {}.{} seconds.", now.elapsed().as_secs(), now.elapsed().subsec_nanos());
|
||||
info!(
|
||||
"rendering took {}.{} seconds.",
|
||||
now.elapsed().as_secs(),
|
||||
now.elapsed().subsec_nanos()
|
||||
);
|
||||
|
||||
info!("Writing image file...");
|
||||
write_image(
|
||||
&scene.filename,
|
||||
&scene.get_filename(),
|
||||
&pixels,
|
||||
scene.image_width,
|
||||
scene.image_height,
|
||||
scene.get_image_width() as u32,
|
||||
scene.get_image_height() as u32,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -52,19 +56,18 @@ pub fn render_chunk(chunk: &mut [u8], scene: &Scene, y: u32) {
|
||||
let camera = &scene.get_camera();
|
||||
let aa_rate = &scene.get_camera().get_anti_alias_rate();
|
||||
|
||||
for i in 0..scene.image_width {
|
||||
for i in 0..scene.get_image_width() {
|
||||
let pixel_tl = camera.get_pixel_tl(i, y);
|
||||
|
||||
let mut pixel_colour = Colour::default();
|
||||
for y in 1..(aa_rate + 1) {
|
||||
for x in 1..(aa_rate + 1) {
|
||||
let r = camera.get_ray(pixel_tl, x, y);
|
||||
pixel_colour += ray_colour(&scene.objects, &r, scene.max_depth);
|
||||
pixel_colour += ray_colour(&scene.get_objects(), &r, scene.get_max_depth());
|
||||
}
|
||||
}
|
||||
|
||||
let (r, g, b) =
|
||||
(pixel_colour / (aa_rate * aa_rate) as f32).output();
|
||||
let (r, g, b) = (pixel_colour / (aa_rate * aa_rate) as f32).output();
|
||||
chunk[(i * 3) as usize] = r;
|
||||
chunk[(i * 3) as usize + 1] = g;
|
||||
chunk[(i * 3) as usize + 2] = b;
|
||||
|
||||