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}