geng_camera/
camera_2d.rs

1use super::*;
2
3/// 2-dimensional camera.
4#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
5pub struct Camera2d {
6    pub center: vec2<f32>,
7    pub rotation: Angle<f32>,
8    pub fov: f32,
9}
10
11impl AbstractCamera2d for Camera2d {
12    fn view_matrix(&self) -> mat3<f32> {
13        mat3::rotate(self.rotation) * mat3::translate(-self.center)
14    }
15    fn projection_matrix(&self, framebuffer_size: vec2<f32>) -> mat3<f32> {
16        mat3::scale(vec2(2.0 * framebuffer_size.y / framebuffer_size.x, 2.0) / self.fov)
17    }
18}