use bs_trace::image::prelude::Colour;
use bs_trace::trace::cfg::SceneConfig;
use bs_trace::trace::material::{Lambertian, Metal};
use bs_trace::trace::prelude::*;
use bs_trace::trace::sampling::RandomSampling;
use bs_trace::trace::world::{Sphere, World};
use num_traits::ConstZero;
use std::fs::File;
use std::io::{BufWriter, Write};
use std::sync::Arc;
const WIDTH: usize = 640;
const HEIGHT: usize = 480;
fn test_main() -> std::io::Result<()> {
Ok(())
}
fn main() -> std::io::Result<()> {
let args: Vec<String> = std::env::args().collect();
if args.len() == 0 {
return Ok(());
} else if args.len() != 2 {
eprintln!("Usage: {} <path to scene file>", args[0]);
return Ok(());
}
let scene_file_path = &args[1];
let scene_file_contents = std::fs::read_to_string(scene_file_path)?;
let scene_table = scene_file_contents.parse::<toml::Table>().unwrap();
let scene = bs_trace::trace::description::parse_scene_file(&scene_table).unwrap();
let rng = rand::thread_rng();
let samp_strat = RandomSampling::<WIDTH, HEIGHT, 100>::new();
let mut camera: Camera<WIDTH, HEIGHT> = unsafe {
Camera::new_unchecked(
Vec3::ZERO,
Vec3::new([1.0, 0.0, 0.0]),
Vec3::new([0.0, 1.0, 0.0]),
1.0,
2.0,
)
};
let cfg = SceneConfig::<WIDTH, HEIGHT>::new(camera, Arc::new(samp_strat), scene, 8);
let img = cfg.trace();
let mut fh = File::create("out.png")?;
let mut buf_writer = BufWriter::new(&mut fh);
img.write_as_png(&mut buf_writer);
Ok(())
}