Skip to main content

steamengine_renderer_util/camera/
orthographic.rs

1use super::Camera;
2use glam::*;
3
4/// Implementation of camera for Orthographic Camera
5/// ## Example
6/// ```rust
7/// use cgmath::point3;
8/// use steamengine_renderer_util::camera::create_bindings;
9/// use steamengine_renderer_util::camera::CameraBuffer;
10///
11/// let camera = OrthographicCamera::default();
12/// // set the aspect ratio with window properties
13/// *camera.aspect_ratio() = width / height;
14/// // sets the camera location
15/// *camera.eye() = point3(0.0, 0.0, -2.0);
16///
17/// // upload the camera to the shader
18/// let buffer = CameraBuffer::new(&renderer, 1);
19/// let binding = create_bindings(&renderer, buffer.as_entrie());
20///
21/// buffer.set(0, camera);
22///
23/// ```
24
25#[derive(Clone, Debug)]
26pub struct OrthographicCamera {
27    // view matrix
28    eye: Vec3,
29    target: Vec3,
30    up: Vec3,
31
32    left: f32,
33    right: f32,
34    bottom: f32,
35    upper: f32,
36    near: f32,
37    far: f32,
38}
39impl OrthographicCamera {
40    pub fn default() -> Self {
41        let eye = vec3(0.0, 0.0, 5.0);
42        let target = vec3(0.0, 0.0, 0.0);
43        let up = vec3(0.0, 1.0, 0.0);
44
45        let left = -10.0;
46        let right = 10.0;
47        let bottom = -10.0;
48        let upper = 10.0;
49        let near = 0.1;
50        let far = 100.0;
51        Self {
52            eye,
53            target,
54            up,
55            left,
56            right,
57            bottom,
58            upper,
59            near,
60            far,
61        }
62    }
63}
64impl Camera for OrthographicCamera {
65    fn up(&mut self) -> &mut Vec3 {
66        &mut self.up
67    }
68    fn eye(&mut self) -> &mut Vec3 {
69        &mut self.eye
70    }
71    fn target(&mut self) -> &mut Vec3 {
72        &mut self.target
73    }
74    fn view(&self) -> Mat4 {
75        Mat4::look_at_rh(self.eye, self.target, self.up)
76    }
77    fn projection(&self) -> Mat4 {
78        Mat4::orthographic_rh(
79            self.left,
80            self.right,
81            self.bottom,
82            self.upper,
83            self.near,
84            self.far,
85        )
86    }
87}