ft (wip): deserialization
This commit is contained in:
77
src/main.rs
77
src/main.rs
@@ -3,17 +3,19 @@
|
||||
mod camera;
|
||||
mod objects;
|
||||
mod ray;
|
||||
mod scenes;
|
||||
mod vec3;
|
||||
|
||||
use std::fs;
|
||||
use std::sync::Arc;
|
||||
|
||||
use crate::camera::Camera;
|
||||
use crate::objects::materials::dielectric::Dielectric;
|
||||
use crate::objects::materials::lambertian::{Lambertian, Metal};
|
||||
use crate::objects::materials::traits::Material;
|
||||
use crate::objects::sphere::Sphere;
|
||||
use crate::objects::traits::Hittable;
|
||||
use crate::ray::Ray;
|
||||
use crate::scenes::scene::Scene;
|
||||
use crate::vec3::Vec3;
|
||||
use dotenv::dotenv;
|
||||
use log::info;
|
||||
@@ -41,7 +43,7 @@ fn random_sphere_on_floor<T: Hittable>(
|
||||
let r = rng.random_range(0.1..max_size);
|
||||
let mut sphere = Sphere::xyz(
|
||||
rng.random_range((-50.)..50.),
|
||||
r,
|
||||
rng.random_range(0.1..max_size),
|
||||
rng.random_range((-50.)..50.),
|
||||
r,
|
||||
materials.choose(&mut rng).unwrap().clone(),
|
||||
@@ -70,49 +72,40 @@ fn random_sphere_on_floor<T: Hittable>(
|
||||
sphere
|
||||
}
|
||||
|
||||
// FIXME: bunch of unwraps/expects in deserialization code
|
||||
// TODO: implement scene serialization
|
||||
fn main() {
|
||||
dotenv().ok();
|
||||
pretty_env_logger::init();
|
||||
|
||||
// setup objects
|
||||
// let blue = Arc::new(Metal::rgb(0.2, 0.4, 0.8, 1., 0.1));
|
||||
// let metal = Arc::new(Metal::rgb(0.7, 0.4, 0.2, 1., 0.1));
|
||||
// let ground = Arc::new(Lambertian::rgb(0.8, 0.8, 0., 1.0));
|
||||
// let center = Arc::new(Lambertian::rgb(0.1, 0.2, 0.5, 1.));
|
||||
// let left = Arc::new(Dielectric::new(1.5));
|
||||
// let bubble = Arc::new(Dielectric::new(1. / 1.5));
|
||||
// let right = Arc::new(Metal::rgb(0.8, 0.6, 0.2, 1., 1.0));
|
||||
// TODO: use cli arg for scenefile
|
||||
let json_str = fs::read_to_string("./scenes/scene.json").expect("waddehell!");
|
||||
let mut scene: Scene = serde_json::from_str(&json_str).unwrap();
|
||||
scene.render();
|
||||
|
||||
// random spheres code; thought: make this available as cli flag?
|
||||
// let mut materials: Vec<Arc<dyn Material>> = vec![Arc::new(Lambertian::rgb(0.1, 0.1, 0.2, 0.8))];
|
||||
// for i in 0..15 {
|
||||
// info!("Generating {}th material.", i + 1);
|
||||
// materials.push(random_material());
|
||||
// }
|
||||
//
|
||||
// let mut world = vec![Sphere::xyz(0., 0.5, -0.8, 0.1, metal.clone())];
|
||||
// world.push(Sphere::xyz(0., -100.5, -1., 100., ground.clone()));
|
||||
// world.push(Sphere::xyz(0., 0., -1.2, 0.5, center.clone()));
|
||||
// world.push(Sphere::xyz(-1., 0., -1.0, 0.5, left.clone()));
|
||||
// world.push(Sphere::xyz(-1., 0., -1.0, 0.4, bubble.clone()));
|
||||
// world.push(Sphere::xyz(1., 0., -1.0, 0.5, right.clone()));
|
||||
// world.push(Sphere::xyz(0., 0.7, -0.4, 0.2, blue.clone()));
|
||||
|
||||
let mut materials: Vec<Arc<dyn Material>> = vec![Arc::new(Lambertian::rgb(0.1, 0.2, 0.6, 1.))];
|
||||
for i in 0..15 {
|
||||
info!("Generating {}th material.", i + 1);
|
||||
materials.push(random_material());
|
||||
}
|
||||
|
||||
let mut world = vec![Sphere::xyz(0., -1000.5, -1., 1000., materials[0].clone())];
|
||||
for i in 0..40 {
|
||||
info!("Generating {}th sphere.", i + 1);
|
||||
world.push(random_sphere_on_floor(
|
||||
&materials,
|
||||
&world,
|
||||
(i + 1) as f32 / 3.,
|
||||
));
|
||||
}
|
||||
|
||||
// let mut c = Camera::new(400, 300);
|
||||
let mut c = Camera::new(1920, 1080);
|
||||
c.set_fov(90.);
|
||||
c.set_anti_alias_rate(6);
|
||||
c.set_max_depth(100);
|
||||
c.set_look_from(Vec3::new(-60., 10., 1.));
|
||||
c.set_look_at(Vec3::new(0., 0., 0.));
|
||||
c.render(&world);
|
||||
// let mut world = vec![Sphere::xyz(0., -1000.5, -1., 1000., materials[0].clone())];
|
||||
// for i in 0..40 {
|
||||
// info!("Generating {}th sphere.", i + 1);
|
||||
// world.push(random_sphere_on_floor(
|
||||
// &materials,
|
||||
// &world,
|
||||
// ((i + 1) as f32).ln() + (15. as f32).log(10.),
|
||||
// ));
|
||||
// }
|
||||
//
|
||||
// // let mut c = Camera::new(400, 300);
|
||||
// let mut c = Camera::new(1920, 1080);
|
||||
// c.set_fov(60.);
|
||||
// c.set_anti_alias_rate(1);
|
||||
// c.set_max_depth(10);
|
||||
// c.set_look_from(Vec3::new(-60., 10., 1.));
|
||||
// c.set_look_at(Vec3::new(0., 0., 0.));
|
||||
// c.render(&world);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user