steamengine_renderer_util/camera/
prespective.rs1use super::Camera;
2use glam::*;
3
4#[derive(Clone, Debug)]
26pub struct PrespectiveCamera {
27 eye: Vec3,
29 target: Vec3,
30 up: Vec3,
31
32 fov: f32,
34 aspect_ratio: f32,
35 near: f32,
36 far: f32,
37}
38impl PrespectiveCamera {
39 pub fn fov(&mut self) -> &mut f32 {
40 &mut self.fov
41 }
42 pub fn aspect_ratio(&mut self) -> &mut f32 {
43 &mut self.aspect_ratio
44 }
45 pub fn near(&mut self) -> &mut f32 {
46 &mut self.near
47 }
48 pub fn far(&mut self) -> &mut f32 {
49 &mut self.far
50 }
51}
52impl Default for PrespectiveCamera {
53 fn default() -> Self {
54 let eye = vec3(0.0, 1.0, 2.0);
55 let target = vec3(0.0, 0.0, 0.0);
56 let up = vec3(0.0, 1.0, 0.0);
57
58 let fov = 45.0;
59 let aspect_ratio = 16.0 / 9.0;
60 let near = 0.1;
61 let far = 100.0;
62
63 Self {
64 eye,
65 target,
66 up,
67 fov,
68 aspect_ratio,
69 near,
70 far,
71 }
72 }
73}
74
75impl Camera for PrespectiveCamera {
76 fn up(&mut self) -> &mut Vec3 {
77 &mut self.up
78 }
79 fn eye(&mut self) -> &mut Vec3 {
80 &mut self.eye
81 }
82 fn target(&mut self) -> &mut Vec3 {
83 &mut self.target
84 }
85 fn view(&self) -> Mat4 {
86 Mat4::look_at_rh(self.eye, self.target, self.up)
87 }
88 fn projection(&self) -> Mat4 {
89 Mat4::perspective_lh(self.fov, self.aspect_ratio, self.near, self.far)
90 }
91}