use nalgebra::{Point3, RealField};
use num_traits::ToPrimitive;
use serde::{Deserialize, Serialize};
use crate::{error::Result, scene::Camera, serialization::SerializedProjection};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SerializedCamera<T: RealField + Copy> {
pub projection: SerializedProjection<T>,
pub position: [T; 3],
pub look_at: [T; 3],
pub resolution: [usize; 2],
}
impl<T: RealField + Copy + ToPrimitive> SerializedCamera<T> {
pub fn build(self) -> Result<Camera<T>> {
let position = Point3::new(self.position[0], self.position[1], self.position[2]);
let look_at = Point3::new(self.look_at[0], self.look_at[1], self.look_at[2]);
let projection = self.projection.build()?;
Camera::new(position, look_at, projection, self.resolution)
}
}