1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
use super::*;

#[derive(Debug, Clone)]
pub struct Camera2d {
    pub center: Vec2<f32>,
    pub rotation: f32,
    pub fov: f32,
}

impl AbstractCamera2d for Camera2d {
    fn view_matrix(&self) -> Mat3<f32> {
        Mat3::rotate(self.rotation) * Mat3::translate(-self.center)
    }
    fn projection_matrix(&self, framebuffer_size: Vec2<f32>) -> Mat3<f32> {
        Mat3::scale(vec2(2.0 * framebuffer_size.y / framebuffer_size.x, 2.0) / self.fov)
    }
}