ft: moved random scene code to function; cleaned up tri/quad/cube hit logic; made camera attributes private

This commit is contained in:
djaidjai committed 2026-05-31 13:51:34 +02:00
1 parent 71985a6c34
commit 64cad7eda6
11 files changed
+259 -221

No files matched your search

+13 -10
View File
@@ -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;
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.