From 549707fbb33747194663ad1bfe51172dd237dfe4 Mon Sep 17 00:00:00 2001 From: Djairo Date: Sun, 3 May 2026 16:06:54 +0200 Subject: [PATCH] fx: json files --- scenes/highDef.json | 40 ++++++++++++++++++++-------------------- scenes/noImage.json | 32 -------------------------------- src/main.rs | 11 ++++++++--- src/raytracer.rs | 2 +- 4 files changed, 29 insertions(+), 56 deletions(-) delete mode 100644 scenes/noImage.json diff --git a/scenes/highDef.json b/scenes/highDef.json index 5f89630..da284e4 100644 --- a/scenes/highDef.json +++ b/scenes/highDef.json @@ -1,35 +1,35 @@ { + "filename": "highDef.png", + "image_width": 1920, + "image_height": 1080, + "max_depth": 50, "camera": { - "image_width": 1920, - "image_height": 1080, "anti_alias_rate": 23, - "max_depth": 50, "fov": 20.0, - "look_from": { "x": -10, "y": 5, "z": 10 }, - "look_at": { "x": 0.0, "y": 0.0, "z": -1.0 }, - "vup": { "x": 0.0, "y": 1.0, "z": 0.0 }, - "defocus_blur": false, - "defocus_angle": 2, + "look_from": [-10, 5, 10], + "look_at": [0.0, 0.0, -1.0], + "vup": [0.0, 1.0, 0.0], + "defocus_angle": 0, "focus_dist": 15.68 }, "materials": [ - { "type": "metal", "albedo": { "x": 0.2, "y": 0.4, "z": 0.8 }, "prob": 1.0, "fuzz": 0.1 }, - { "type": "metal", "albedo": { "x": 0.7, "y": 0.4, "z": 0.2 }, "prob": 1.0, "fuzz": 0.1 }, - { "type": "lambertian", "albedo": { "x": 0.8, "y": 0.8, "z": 0.0 }, "prob": 1.0 }, - { "type": "lambertian", "albedo": { "x": 0.1, "y": 0.2, "z": 0.5 }, "prob": 1.0 }, + { "type": "metal", "albedo": [0.2, 0.4, 0.8 ], "prob": 1.0, "fuzz": 0.1}, + { "type": "metal", "albedo": [0.7, 0.4, 0.2 ], "prob": 1.0, "fuzz": 0.1}, + { "type": "lambertian", "albedo": [0.8, 0.8, 0.0 ], "prob": 1.0}, + { "type": "lambertian", "albedo": [0.1, 0.2, 0.5 ], "prob": 1.0}, { "type": "dielectric", "refraction_index": 1.5}, { "type": "dielectric", "refraction_index": 0.67}, - { "type": "metal", "albedo": { "x": 0.8, "y": 0.6, "z": 0.2 }, "prob": 1.0, "fuzz": 1.0 } + { "type": "metal", "albedo": [0.8, 0.6, 0.2 ], "prob": 1.0, "fuzz": 1.0} ], "objects": [ - { "type": "sphere", "center": { "x": 0, "y": 0.7, "z": -0.4 }, "radius": 0.2, "material": 0}, - { "type": "sphere", "center": { "x": 0.0, "y": 0.5, "z": -0.8 }, "radius": 0.1, "material": 1}, - { "type": "sphere", "center": { "x": 0.0, "y": -100.5, "z": -1.0 }, "radius": 100.0, "material": 2}, - { "type": "sphere", "center": { "x": 0.0, "y": 0.0, "z": -1.2 }, "radius": 0.5, "material": 3}, - { "type": "sphere", "center": { "x": -1, "y": 0, "z": -1 }, "radius": 0.4, "material": 5}, - { "type": "sphere", "center": { "x": 1, "y": 0, "z": -1 }, "radius": 0.5, "material": 6}, - { "type": "sphere", "center": { "x": 20, "y": 7, "z": -15 }, "radius": 10.5, "material": 0} + { "type": "sphere", "center": [0, 0.7, -0.4], "radius": 0.2, "material": 0}, + { "type": "sphere", "center": [0.0, 0.5, -0.8], "radius": 0.1, "material": 1}, + { "type": "sphere", "center": [0.0, -100.5, -1.0], "radius": 100.0, "material": 2}, + { "type": "sphere", "center": [0.0, 0.0, -1.2], "radius": 0.5, "material": 3}, + { "type": "sphere", "center": [-1, 0, -1], "radius": 0.4, "material": 5}, + { "type": "sphere", "center": [1, 0, -1], "radius": 0.5, "material": 6}, + { "type": "sphere", "center": [20, 7, -15], "radius": 10.5, "material": 0} ] } diff --git a/scenes/noImage.json b/scenes/noImage.json deleted file mode 100644 index 1b5bd91..0000000 --- a/scenes/noImage.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "camera": { - "anti_alias_rate": 23, - "max_depth": 100, - "fov": 40.0, - "look_from": { "x": -10, "y": 5, "z": 10 }, - "look_at": { "x": 0.0, "y": 0.0, "z": -1.0 }, - "vup": { "x": 0.0, "y": 1.0, "z": 0.0 } - }, - "materials": [ - { "type": "metal", "albedo": { "x": 0.2, "y": 0.4, "z": 0.8 }, "prob": 1.0, "fuzz": 0.1 }, - { "type": "metal", "albedo": { "x": 0.7, "y": 0.4, "z": 0.2 }, "prob": 1.0, "fuzz": 0.1 }, - { "type": "lambertian", "albedo": { "x": 0.8, "y": 0.8, "z": 0.0 }, "prob": 1.0 }, - { "type": "lambertian", "albedo": { "x": 0.1, "y": 0.2, "z": 0.5 }, "prob": 1.0 }, - { "type": "dielectric", "refraction_index": 1.5}, - { "type": "dielectric", "refraction_index": 0.67}, - { "type": "metal", "albedo": { "x": 0.8, "y": 0.6, "z": 0.2 }, "prob": 1.0, "fuzz": 1.0 } - - ], - "objects": [ - { "type": "sphere", "center": { "x": 0, "y": 0.7, "z": -0.4 }, "radius": 0.2, "material": 0}, - { "type": "sphere", "center": { "x": 0.0, "y": 0.5, "z": -0.8 }, "radius": 0.1, "material": 1}, - { "type": "sphere", "center": { "x": 0.0, "y": -100.5, "z": -1.0 }, "radius": 100.0, "material": 2}, - { "type": "sphere", "center": { "x": 0.0, "y": 0.0, "z": -1.2 }, "radius": 0.5, "material": 3}, - { "type": "sphere", "center": { "x": -1, "y": 0, "z": -1 }, "radius": 0.4, "material": 5}, - { "type": "sphere", "center": { "x": 1, "y": 0, "z": -1 }, "radius": 0.5, "material": 6}, - { "type": "sphere", "center": { "x": 20, "y": 7, "z": -15 }, "radius": 10.5, "material": 0} - ] -} - - - diff --git a/src/main.rs b/src/main.rs index f11924b..c35bdd4 100644 --- a/src/main.rs +++ b/src/main.rs @@ -7,7 +7,7 @@ mod raytracer; mod scenes; mod vec3; -use std::fs; +use std::{env, fs}; use std::sync::Arc; use crate::camera::Camera; @@ -27,8 +27,13 @@ fn main() { dotenv().ok(); pretty_env_logger::init(); - // TODO: use cli arg for scenefile - let json_file = "./scenes/scene.json"; + // TODO: better cli parsing + let mut json_file = "./scenes/scene.json"; + let args: Vec = env::args().collect(); + if args.len() > 1 { + json_file = &args[1]; + } + let json_str = fs::read_to_string(json_file).expect("Reading specified scene file failed!"); let mut scene: Scene = serde_json::from_str(&json_str).unwrap(); render(&mut scene); diff --git a/src/raytracer.rs b/src/raytracer.rs index b2b4167..b69eaab 100644 --- a/src/raytracer.rs +++ b/src/raytracer.rs @@ -69,7 +69,7 @@ pub fn render_chunk(chunk: &mut [u8], scene: &Scene, y: u32) { chunk[(i * 3) as usize + 1] = g; chunk[(i * 3) as usize + 2] = b; } - info!("Line {} finished.", y); + info!("Line {}\tfinished.", y); } pub fn ray_colour(hittables: &Vec>, r: &Ray, depth: u32) -> Colour {