Files
raytracing/src/scenes/raw_camera.rs
2026-04-29 01:17:00 +02:00

65 lines
1.3 KiB
Rust

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<RawCamera> 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,
)
}
}