use super::Camera;
use glam::*;
#[derive(Clone, Debug)]
pub struct OrthographicCamera {
eye: Vec3,
target: Vec3,
up: Vec3,
left: f32,
right: f32,
bottom: f32,
upper: f32,
near: f32,
far: f32,
}
impl OrthographicCamera {
pub fn default() -> Self {
let eye = vec3(0.0, 0.0, 5.0);
let target = vec3(0.0, 0.0, 0.0);
let up = vec3(0.0, 1.0, 0.0);
let left = -10.0;
let right = 10.0;
let bottom = -10.0;
let upper = 10.0;
let near = 0.1;
let far = 100.0;
Self {
eye,
target,
up,
left,
right,
bottom,
upper,
near,
far,
}
}
}
impl Camera for OrthographicCamera {
fn up(&mut self) -> &mut Vec3 {
&mut self.up
}
fn eye(&mut self) -> &mut Vec3 {
&mut self.eye
}
fn target(&mut self) -> &mut Vec3 {
&mut self.target
}
fn view(&self) -> Mat4 {
Mat4::look_at_rh(self.eye, self.target, self.up)
}
fn projection(&self) -> Mat4 {
Mat4::orthographic_rh(
self.left,
self.right,
self.bottom,
self.upper,
self.near,
self.far,
)
}
}