ursus_ecs/components/
camera.rs1use glam::camera::rh::proj::vulkan::perspective;
2use glam::camera::rh::view::look_at_mat4;
3use glam::{Mat4, Vec3};
4
5#[derive(Debug, Clone, Copy)]
6pub struct ActiveCamera; impl Default for ActiveCamera {
9 fn default() -> Self {
10 ActiveCamera
11 }
12}
13
14#[derive(Debug, Clone)]
15pub struct CameraComponent {
16 pub eye: Vec3,
17 pub target: Vec3,
18 pub up: Vec3,
19 pub fov_y: f32,
20 pub z_near: f32,
21 pub z_far: f32,
22}
23
24impl CameraComponent {
25 pub fn view_proj(&self, aspect: f32) -> Mat4 {
26 let view = look_at_mat4(self.eye, self.target, self.up);
27 let proj = perspective(self.fov_y, aspect, self.z_near, self.z_far);
28 proj * view
29 }
30}
31
32impl Default for CameraComponent {
33 fn default() -> Self {
34 Self {
35 eye: Vec3::new(2.0, 2.0, 3.0),
36 target: Vec3::ZERO,
37 up: Vec3::Y,
38 fov_y: 60_f32.to_radians(),
39 z_near: 0.1,
40 z_far: 100.0,
41 }
42 }
43}