use serde::Deserialize; use crate::{camera::Camera, vec3::Vec3}; #[derive(Deserialize)] pub struct RawCamera { // output image_width: u32, image_height: u32, // raytracing #[serde(default)] anti_alias_rate: u32, #[serde(default)] max_depth: u32, // camera #[serde(default)] fov: f32, #[serde(default)] look_from: Vec3, #[serde(default)] look_at: Vec3, #[serde(default)] vup: Vec3, #[serde(default)] defocus_angle: f32, #[serde(default)] focus_dist: f32, } impl Default for RawCamera { fn default() -> Self { Self { image_width: 400, image_height: 300, anti_alias_rate: 1, max_depth: 10, fov: 70., look_from: Vec3::new(0., 0., 0.), look_at: Vec3::new(0., 0., -1.), vup: Vec3::new(0., 1., 0.), defocus_angle: 0., focus_dist: 10., } } } impl From for Camera { fn from(raw: RawCamera) -> Self { Camera::new_full( raw.image_width, raw.image_height, raw.anti_alias_rate, raw.max_depth, raw.fov, raw.look_from, raw.look_at, raw.vup, raw.defocus_angle, raw.focus_dist, ) } }