pub struct Matrix<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N> = [[T; N]; M]> { /* private fields */ }Implementations§
Source§impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Matrix<T, M, N, Storage>
impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Matrix<T, M, N, Storage>
pub fn from_storage(storage: Storage) -> Self
pub fn zeros() -> Self
pub fn build_with(f: impl FnMut() -> T) -> Self
pub fn build_with_pos(f: impl FnMut(usize, usize) -> T) -> Self
pub fn into_storage(self) -> Storage
pub fn iter(&self) -> impl Iterator<Item = ((usize, usize), &T)>
pub fn iter_mut(&mut self) -> impl Iterator<Item = ((usize, usize), &mut T)>
Source§impl<T: Number + Float, const M: usize> Matrix<T, M, 1>
impl<T: Number + Float, const M: usize> Matrix<T, M, 1>
Sourcepub fn normalized(&self) -> Self
pub fn normalized(&self) -> Self
Examples found in repository?
examples/run/main.rs (line 92)
27 fn build(&self, scene: &mut matrix_engine::engine::scene::Scene<CustomEvents>) {
28 let mut latest = Instant::now();
29 let mut v = Vec::<f32>::new();
30 let mut latest_second = Instant::now();
31 scene.add_send_system(
32 move |(events, write_events, id): &mut (
33 ReadE<CustomEvents>,
34 WriteE<CustomEvents>,
35 ReadSystemID,
36 )| {
37 let now = Instant::now();
38
39 v.push(1.0 / (now - latest).as_secs_f32());
40
41 if (now - latest_second).as_secs() > 0 {
42 let fps = v.iter().sum::<f32>() / v.len() as f32;
43 println!("fps: {:10.5}, {:10.5}", fps, 1.0 / fps);
44 latest_second = now;
45 }
46 latest = now;
47 },
48 );
49 scene.add_send_startup_system(
50 |render_objs: &mut WriteC<RenderObject>,
51 transforms: &mut WriteC<Transform>,
52 camera: &mut WriteR<Camera, CustomEvents>| {
53 for i in 0..100 {
54 for y in 0..100 {
55 for z in 0..10 {
56 let e = Entity::new();
57 render_objs.insert(e, RenderObject::new(Cube, "./img.jpg".to_string()));
58 transforms.insert(
59 e,
60 Transform::new_position(Vector3::new(
61 5. * i as f32,
62 5. * y as f32,
63 5. * z as f32,
64 )),
65 );
66 }
67 }
68 }
69
70 camera.insert_and_notify(Camera {
71 eye: Vector3::new(0.0, 0.0, -1.),
72 dir: Vector3::new(1., 0., 0.),
73 up: Vector3::new(0., 1., 0.),
74 aspect: 1.,
75 fovy: PI / 4.,
76 znear: 0.1,
77 zfar: 1000.,
78 });
79 },
80 );
81
82 let mut yaw: f32 = 0.0; // Horizontal rotation around the y-axis
83 let mut pitch: f32 = 0.0; // Vertical rotation
84 scene.add_send_system(
85 move |camera: &mut WriteR<Camera, CustomEvents>, events: &mut ReadE<CustomEvents>| {
86 if let Some(camera) = camera.get_mut() {
87 let dt = events.dt();
88 let move_speed = dt * 10.;
89 let rotation_speed = 4. * dt * camera.fovy / PI;
90
91 // Get forward (z-axis), right (x-axis), and up (y-axis) direction vectors
92 let forward = camera.dir.normalized();
93 let right = forward.cross(&Vector3::unit_y()).normalized();
94 let up = right.cross(&forward);
95
96 if events.keyboard().is_pressed(KeyCode::KeyW) {
97 camera.eye += &forward * move_speed;
98 }
99 if events.keyboard().is_pressed(KeyCode::KeyS) {
100 camera.eye -= &forward * move_speed;
101 }
102 if events.keyboard().is_pressed(KeyCode::KeyA) {
103 camera.eye -= &right * move_speed;
104 }
105 if events.keyboard().is_pressed(KeyCode::KeyD) {
106 camera.eye += &right * move_speed;
107 }
108 if events.keyboard().is_pressed(KeyCode::Space) {
109 camera.eye += &up * move_speed;
110 }
111 if events.keyboard().is_pressed(KeyCode::ControlLeft) {
112 camera.eye -= &up * move_speed;
113 }
114
115 match events.mouse_wheel_delta() {
116 dx if dx != 0. => {
117 camera.fovy *= if dx.is_positive() { 0.5 } else { 2. };
118 }
119 _ => (),
120 }
121
122 let (x, y) = events.mouse_dx();
123 yaw += x * rotation_speed;
124 pitch -= y * rotation_speed;
125
126 // Update the camera's direction (yaw and pitch)
127 let (sin_yaw, cos_yaw) = yaw.sin_cos();
128 let (sin_pitch, cos_pitch) = pitch.sin_cos();
129
130 // Calculate the new forward direction after applying yaw and pitch
131 let new_forward =
132 Vector3::new(cos_pitch * cos_yaw, sin_pitch, cos_pitch * sin_yaw);
133
134 camera.dir = new_forward.normalized();
135 }
136 },
137 );
138 let mut is_on = false;
139 scene.add_send_system(
140 move |transforms: &mut WriteC<Transform>,
141 obj: &mut ReadC<RenderObject>,
142 events: &mut ReadE<CustomEvents>| {
143 if events.keyboard().is_just_pressed(KeyCode::KeyG) {
144 is_on = !is_on;
145 println!("started {}", is_on);
146 }
147 if is_on {
148 let dt = events.dt();
149 (transforms.iter_mut(), obj.iter())
150 .into_wrapper()
151 .for_each(|(_, (t, _))| {
152 *t.rotation.x_mut() += dt * 5.;
153 t.update_raw();
154 });
155 }
156 },
157 );
158 }pub fn dot(&self, rhs: &Self) -> T
Source§impl<T: Number> Matrix<T, 3, 1>
impl<T: Number> Matrix<T, 3, 1>
Sourcepub fn cross(&self, other: &Vector3<T>) -> Vector3<T>
pub fn cross(&self, other: &Vector3<T>) -> Vector3<T>
Examples found in repository?
examples/run/main.rs (line 93)
27 fn build(&self, scene: &mut matrix_engine::engine::scene::Scene<CustomEvents>) {
28 let mut latest = Instant::now();
29 let mut v = Vec::<f32>::new();
30 let mut latest_second = Instant::now();
31 scene.add_send_system(
32 move |(events, write_events, id): &mut (
33 ReadE<CustomEvents>,
34 WriteE<CustomEvents>,
35 ReadSystemID,
36 )| {
37 let now = Instant::now();
38
39 v.push(1.0 / (now - latest).as_secs_f32());
40
41 if (now - latest_second).as_secs() > 0 {
42 let fps = v.iter().sum::<f32>() / v.len() as f32;
43 println!("fps: {:10.5}, {:10.5}", fps, 1.0 / fps);
44 latest_second = now;
45 }
46 latest = now;
47 },
48 );
49 scene.add_send_startup_system(
50 |render_objs: &mut WriteC<RenderObject>,
51 transforms: &mut WriteC<Transform>,
52 camera: &mut WriteR<Camera, CustomEvents>| {
53 for i in 0..100 {
54 for y in 0..100 {
55 for z in 0..10 {
56 let e = Entity::new();
57 render_objs.insert(e, RenderObject::new(Cube, "./img.jpg".to_string()));
58 transforms.insert(
59 e,
60 Transform::new_position(Vector3::new(
61 5. * i as f32,
62 5. * y as f32,
63 5. * z as f32,
64 )),
65 );
66 }
67 }
68 }
69
70 camera.insert_and_notify(Camera {
71 eye: Vector3::new(0.0, 0.0, -1.),
72 dir: Vector3::new(1., 0., 0.),
73 up: Vector3::new(0., 1., 0.),
74 aspect: 1.,
75 fovy: PI / 4.,
76 znear: 0.1,
77 zfar: 1000.,
78 });
79 },
80 );
81
82 let mut yaw: f32 = 0.0; // Horizontal rotation around the y-axis
83 let mut pitch: f32 = 0.0; // Vertical rotation
84 scene.add_send_system(
85 move |camera: &mut WriteR<Camera, CustomEvents>, events: &mut ReadE<CustomEvents>| {
86 if let Some(camera) = camera.get_mut() {
87 let dt = events.dt();
88 let move_speed = dt * 10.;
89 let rotation_speed = 4. * dt * camera.fovy / PI;
90
91 // Get forward (z-axis), right (x-axis), and up (y-axis) direction vectors
92 let forward = camera.dir.normalized();
93 let right = forward.cross(&Vector3::unit_y()).normalized();
94 let up = right.cross(&forward);
95
96 if events.keyboard().is_pressed(KeyCode::KeyW) {
97 camera.eye += &forward * move_speed;
98 }
99 if events.keyboard().is_pressed(KeyCode::KeyS) {
100 camera.eye -= &forward * move_speed;
101 }
102 if events.keyboard().is_pressed(KeyCode::KeyA) {
103 camera.eye -= &right * move_speed;
104 }
105 if events.keyboard().is_pressed(KeyCode::KeyD) {
106 camera.eye += &right * move_speed;
107 }
108 if events.keyboard().is_pressed(KeyCode::Space) {
109 camera.eye += &up * move_speed;
110 }
111 if events.keyboard().is_pressed(KeyCode::ControlLeft) {
112 camera.eye -= &up * move_speed;
113 }
114
115 match events.mouse_wheel_delta() {
116 dx if dx != 0. => {
117 camera.fovy *= if dx.is_positive() { 0.5 } else { 2. };
118 }
119 _ => (),
120 }
121
122 let (x, y) = events.mouse_dx();
123 yaw += x * rotation_speed;
124 pitch -= y * rotation_speed;
125
126 // Update the camera's direction (yaw and pitch)
127 let (sin_yaw, cos_yaw) = yaw.sin_cos();
128 let (sin_pitch, cos_pitch) = pitch.sin_cos();
129
130 // Calculate the new forward direction after applying yaw and pitch
131 let new_forward =
132 Vector3::new(cos_pitch * cos_yaw, sin_pitch, cos_pitch * sin_yaw);
133
134 camera.dir = new_forward.normalized();
135 }
136 },
137 );
138 let mut is_on = false;
139 scene.add_send_system(
140 move |transforms: &mut WriteC<Transform>,
141 obj: &mut ReadC<RenderObject>,
142 events: &mut ReadE<CustomEvents>| {
143 if events.keyboard().is_just_pressed(KeyCode::KeyG) {
144 is_on = !is_on;
145 println!("started {}", is_on);
146 }
147 if is_on {
148 let dt = events.dt();
149 (transforms.iter_mut(), obj.iter())
150 .into_wrapper()
151 .for_each(|(_, (t, _))| {
152 *t.rotation.x_mut() += dt * 5.;
153 t.update_raw();
154 });
155 }
156 },
157 );
158 }Source§impl<T: Number + Float + Display> Matrix<T, 4, 4>
impl<T: Number + Float + Display> Matrix<T, 4, 4>
pub fn look_to_rh( eye: &Vector3<T>, dir: &Vector3<T>, up: &Vector3<T>, ) -> Matrix4<T>
pub fn perspective(fovy_rad: T, aspect: T, znear: T, zfar: T) -> Matrix4<T>
pub fn from_position(position: &Vector3<T>) -> Self
pub fn from_quaternion(quat: &Vector4<T>) -> Self
Source§impl<T: Number + Float> Matrix<T, 4, 1>
impl<T: Number + Float> Matrix<T, 4, 1>
pub fn from_euler_to_quaternion(src: &Vector3<T>) -> Self
Source§impl<T: Number> Matrix<T, 3, 1>
impl<T: Number> Matrix<T, 3, 1>
Sourcepub fn new(x: T, y: T, z: T) -> Self
pub fn new(x: T, y: T, z: T) -> Self
Examples found in repository?
examples/run/main.rs (lines 60-64)
27 fn build(&self, scene: &mut matrix_engine::engine::scene::Scene<CustomEvents>) {
28 let mut latest = Instant::now();
29 let mut v = Vec::<f32>::new();
30 let mut latest_second = Instant::now();
31 scene.add_send_system(
32 move |(events, write_events, id): &mut (
33 ReadE<CustomEvents>,
34 WriteE<CustomEvents>,
35 ReadSystemID,
36 )| {
37 let now = Instant::now();
38
39 v.push(1.0 / (now - latest).as_secs_f32());
40
41 if (now - latest_second).as_secs() > 0 {
42 let fps = v.iter().sum::<f32>() / v.len() as f32;
43 println!("fps: {:10.5}, {:10.5}", fps, 1.0 / fps);
44 latest_second = now;
45 }
46 latest = now;
47 },
48 );
49 scene.add_send_startup_system(
50 |render_objs: &mut WriteC<RenderObject>,
51 transforms: &mut WriteC<Transform>,
52 camera: &mut WriteR<Camera, CustomEvents>| {
53 for i in 0..100 {
54 for y in 0..100 {
55 for z in 0..10 {
56 let e = Entity::new();
57 render_objs.insert(e, RenderObject::new(Cube, "./img.jpg".to_string()));
58 transforms.insert(
59 e,
60 Transform::new_position(Vector3::new(
61 5. * i as f32,
62 5. * y as f32,
63 5. * z as f32,
64 )),
65 );
66 }
67 }
68 }
69
70 camera.insert_and_notify(Camera {
71 eye: Vector3::new(0.0, 0.0, -1.),
72 dir: Vector3::new(1., 0., 0.),
73 up: Vector3::new(0., 1., 0.),
74 aspect: 1.,
75 fovy: PI / 4.,
76 znear: 0.1,
77 zfar: 1000.,
78 });
79 },
80 );
81
82 let mut yaw: f32 = 0.0; // Horizontal rotation around the y-axis
83 let mut pitch: f32 = 0.0; // Vertical rotation
84 scene.add_send_system(
85 move |camera: &mut WriteR<Camera, CustomEvents>, events: &mut ReadE<CustomEvents>| {
86 if let Some(camera) = camera.get_mut() {
87 let dt = events.dt();
88 let move_speed = dt * 10.;
89 let rotation_speed = 4. * dt * camera.fovy / PI;
90
91 // Get forward (z-axis), right (x-axis), and up (y-axis) direction vectors
92 let forward = camera.dir.normalized();
93 let right = forward.cross(&Vector3::unit_y()).normalized();
94 let up = right.cross(&forward);
95
96 if events.keyboard().is_pressed(KeyCode::KeyW) {
97 camera.eye += &forward * move_speed;
98 }
99 if events.keyboard().is_pressed(KeyCode::KeyS) {
100 camera.eye -= &forward * move_speed;
101 }
102 if events.keyboard().is_pressed(KeyCode::KeyA) {
103 camera.eye -= &right * move_speed;
104 }
105 if events.keyboard().is_pressed(KeyCode::KeyD) {
106 camera.eye += &right * move_speed;
107 }
108 if events.keyboard().is_pressed(KeyCode::Space) {
109 camera.eye += &up * move_speed;
110 }
111 if events.keyboard().is_pressed(KeyCode::ControlLeft) {
112 camera.eye -= &up * move_speed;
113 }
114
115 match events.mouse_wheel_delta() {
116 dx if dx != 0. => {
117 camera.fovy *= if dx.is_positive() { 0.5 } else { 2. };
118 }
119 _ => (),
120 }
121
122 let (x, y) = events.mouse_dx();
123 yaw += x * rotation_speed;
124 pitch -= y * rotation_speed;
125
126 // Update the camera's direction (yaw and pitch)
127 let (sin_yaw, cos_yaw) = yaw.sin_cos();
128 let (sin_pitch, cos_pitch) = pitch.sin_cos();
129
130 // Calculate the new forward direction after applying yaw and pitch
131 let new_forward =
132 Vector3::new(cos_pitch * cos_yaw, sin_pitch, cos_pitch * sin_yaw);
133
134 camera.dir = new_forward.normalized();
135 }
136 },
137 );
138 let mut is_on = false;
139 scene.add_send_system(
140 move |transforms: &mut WriteC<Transform>,
141 obj: &mut ReadC<RenderObject>,
142 events: &mut ReadE<CustomEvents>| {
143 if events.keyboard().is_just_pressed(KeyCode::KeyG) {
144 is_on = !is_on;
145 println!("started {}", is_on);
146 }
147 if is_on {
148 let dt = events.dt();
149 (transforms.iter_mut(), obj.iter())
150 .into_wrapper()
151 .for_each(|(_, (t, _))| {
152 *t.rotation.x_mut() += dt * 5.;
153 t.update_raw();
154 });
155 }
156 },
157 );
158 }Sourcepub fn unit_y() -> Self
pub fn unit_y() -> Self
Examples found in repository?
examples/run/main.rs (line 93)
27 fn build(&self, scene: &mut matrix_engine::engine::scene::Scene<CustomEvents>) {
28 let mut latest = Instant::now();
29 let mut v = Vec::<f32>::new();
30 let mut latest_second = Instant::now();
31 scene.add_send_system(
32 move |(events, write_events, id): &mut (
33 ReadE<CustomEvents>,
34 WriteE<CustomEvents>,
35 ReadSystemID,
36 )| {
37 let now = Instant::now();
38
39 v.push(1.0 / (now - latest).as_secs_f32());
40
41 if (now - latest_second).as_secs() > 0 {
42 let fps = v.iter().sum::<f32>() / v.len() as f32;
43 println!("fps: {:10.5}, {:10.5}", fps, 1.0 / fps);
44 latest_second = now;
45 }
46 latest = now;
47 },
48 );
49 scene.add_send_startup_system(
50 |render_objs: &mut WriteC<RenderObject>,
51 transforms: &mut WriteC<Transform>,
52 camera: &mut WriteR<Camera, CustomEvents>| {
53 for i in 0..100 {
54 for y in 0..100 {
55 for z in 0..10 {
56 let e = Entity::new();
57 render_objs.insert(e, RenderObject::new(Cube, "./img.jpg".to_string()));
58 transforms.insert(
59 e,
60 Transform::new_position(Vector3::new(
61 5. * i as f32,
62 5. * y as f32,
63 5. * z as f32,
64 )),
65 );
66 }
67 }
68 }
69
70 camera.insert_and_notify(Camera {
71 eye: Vector3::new(0.0, 0.0, -1.),
72 dir: Vector3::new(1., 0., 0.),
73 up: Vector3::new(0., 1., 0.),
74 aspect: 1.,
75 fovy: PI / 4.,
76 znear: 0.1,
77 zfar: 1000.,
78 });
79 },
80 );
81
82 let mut yaw: f32 = 0.0; // Horizontal rotation around the y-axis
83 let mut pitch: f32 = 0.0; // Vertical rotation
84 scene.add_send_system(
85 move |camera: &mut WriteR<Camera, CustomEvents>, events: &mut ReadE<CustomEvents>| {
86 if let Some(camera) = camera.get_mut() {
87 let dt = events.dt();
88 let move_speed = dt * 10.;
89 let rotation_speed = 4. * dt * camera.fovy / PI;
90
91 // Get forward (z-axis), right (x-axis), and up (y-axis) direction vectors
92 let forward = camera.dir.normalized();
93 let right = forward.cross(&Vector3::unit_y()).normalized();
94 let up = right.cross(&forward);
95
96 if events.keyboard().is_pressed(KeyCode::KeyW) {
97 camera.eye += &forward * move_speed;
98 }
99 if events.keyboard().is_pressed(KeyCode::KeyS) {
100 camera.eye -= &forward * move_speed;
101 }
102 if events.keyboard().is_pressed(KeyCode::KeyA) {
103 camera.eye -= &right * move_speed;
104 }
105 if events.keyboard().is_pressed(KeyCode::KeyD) {
106 camera.eye += &right * move_speed;
107 }
108 if events.keyboard().is_pressed(KeyCode::Space) {
109 camera.eye += &up * move_speed;
110 }
111 if events.keyboard().is_pressed(KeyCode::ControlLeft) {
112 camera.eye -= &up * move_speed;
113 }
114
115 match events.mouse_wheel_delta() {
116 dx if dx != 0. => {
117 camera.fovy *= if dx.is_positive() { 0.5 } else { 2. };
118 }
119 _ => (),
120 }
121
122 let (x, y) = events.mouse_dx();
123 yaw += x * rotation_speed;
124 pitch -= y * rotation_speed;
125
126 // Update the camera's direction (yaw and pitch)
127 let (sin_yaw, cos_yaw) = yaw.sin_cos();
128 let (sin_pitch, cos_pitch) = pitch.sin_cos();
129
130 // Calculate the new forward direction after applying yaw and pitch
131 let new_forward =
132 Vector3::new(cos_pitch * cos_yaw, sin_pitch, cos_pitch * sin_yaw);
133
134 camera.dir = new_forward.normalized();
135 }
136 },
137 );
138 let mut is_on = false;
139 scene.add_send_system(
140 move |transforms: &mut WriteC<Transform>,
141 obj: &mut ReadC<RenderObject>,
142 events: &mut ReadE<CustomEvents>| {
143 if events.keyboard().is_just_pressed(KeyCode::KeyG) {
144 is_on = !is_on;
145 println!("started {}", is_on);
146 }
147 if is_on {
148 let dt = events.dt();
149 (transforms.iter_mut(), obj.iter())
150 .into_wrapper()
151 .for_each(|(_, (t, _))| {
152 *t.rotation.x_mut() += dt * 5.;
153 t.update_raw();
154 });
155 }
156 },
157 );
158 }pub fn x(&self) -> &T
pub fn y(&self) -> &T
pub fn z(&self) -> &T
Sourcepub fn x_mut(&mut self) -> &mut T
pub fn x_mut(&mut self) -> &mut T
Examples found in repository?
examples/run/main.rs (line 152)
27 fn build(&self, scene: &mut matrix_engine::engine::scene::Scene<CustomEvents>) {
28 let mut latest = Instant::now();
29 let mut v = Vec::<f32>::new();
30 let mut latest_second = Instant::now();
31 scene.add_send_system(
32 move |(events, write_events, id): &mut (
33 ReadE<CustomEvents>,
34 WriteE<CustomEvents>,
35 ReadSystemID,
36 )| {
37 let now = Instant::now();
38
39 v.push(1.0 / (now - latest).as_secs_f32());
40
41 if (now - latest_second).as_secs() > 0 {
42 let fps = v.iter().sum::<f32>() / v.len() as f32;
43 println!("fps: {:10.5}, {:10.5}", fps, 1.0 / fps);
44 latest_second = now;
45 }
46 latest = now;
47 },
48 );
49 scene.add_send_startup_system(
50 |render_objs: &mut WriteC<RenderObject>,
51 transforms: &mut WriteC<Transform>,
52 camera: &mut WriteR<Camera, CustomEvents>| {
53 for i in 0..100 {
54 for y in 0..100 {
55 for z in 0..10 {
56 let e = Entity::new();
57 render_objs.insert(e, RenderObject::new(Cube, "./img.jpg".to_string()));
58 transforms.insert(
59 e,
60 Transform::new_position(Vector3::new(
61 5. * i as f32,
62 5. * y as f32,
63 5. * z as f32,
64 )),
65 );
66 }
67 }
68 }
69
70 camera.insert_and_notify(Camera {
71 eye: Vector3::new(0.0, 0.0, -1.),
72 dir: Vector3::new(1., 0., 0.),
73 up: Vector3::new(0., 1., 0.),
74 aspect: 1.,
75 fovy: PI / 4.,
76 znear: 0.1,
77 zfar: 1000.,
78 });
79 },
80 );
81
82 let mut yaw: f32 = 0.0; // Horizontal rotation around the y-axis
83 let mut pitch: f32 = 0.0; // Vertical rotation
84 scene.add_send_system(
85 move |camera: &mut WriteR<Camera, CustomEvents>, events: &mut ReadE<CustomEvents>| {
86 if let Some(camera) = camera.get_mut() {
87 let dt = events.dt();
88 let move_speed = dt * 10.;
89 let rotation_speed = 4. * dt * camera.fovy / PI;
90
91 // Get forward (z-axis), right (x-axis), and up (y-axis) direction vectors
92 let forward = camera.dir.normalized();
93 let right = forward.cross(&Vector3::unit_y()).normalized();
94 let up = right.cross(&forward);
95
96 if events.keyboard().is_pressed(KeyCode::KeyW) {
97 camera.eye += &forward * move_speed;
98 }
99 if events.keyboard().is_pressed(KeyCode::KeyS) {
100 camera.eye -= &forward * move_speed;
101 }
102 if events.keyboard().is_pressed(KeyCode::KeyA) {
103 camera.eye -= &right * move_speed;
104 }
105 if events.keyboard().is_pressed(KeyCode::KeyD) {
106 camera.eye += &right * move_speed;
107 }
108 if events.keyboard().is_pressed(KeyCode::Space) {
109 camera.eye += &up * move_speed;
110 }
111 if events.keyboard().is_pressed(KeyCode::ControlLeft) {
112 camera.eye -= &up * move_speed;
113 }
114
115 match events.mouse_wheel_delta() {
116 dx if dx != 0. => {
117 camera.fovy *= if dx.is_positive() { 0.5 } else { 2. };
118 }
119 _ => (),
120 }
121
122 let (x, y) = events.mouse_dx();
123 yaw += x * rotation_speed;
124 pitch -= y * rotation_speed;
125
126 // Update the camera's direction (yaw and pitch)
127 let (sin_yaw, cos_yaw) = yaw.sin_cos();
128 let (sin_pitch, cos_pitch) = pitch.sin_cos();
129
130 // Calculate the new forward direction after applying yaw and pitch
131 let new_forward =
132 Vector3::new(cos_pitch * cos_yaw, sin_pitch, cos_pitch * sin_yaw);
133
134 camera.dir = new_forward.normalized();
135 }
136 },
137 );
138 let mut is_on = false;
139 scene.add_send_system(
140 move |transforms: &mut WriteC<Transform>,
141 obj: &mut ReadC<RenderObject>,
142 events: &mut ReadE<CustomEvents>| {
143 if events.keyboard().is_just_pressed(KeyCode::KeyG) {
144 is_on = !is_on;
145 println!("started {}", is_on);
146 }
147 if is_on {
148 let dt = events.dt();
149 (transforms.iter_mut(), obj.iter())
150 .into_wrapper()
151 .for_each(|(_, (t, _))| {
152 *t.rotation.x_mut() += dt * 5.;
153 t.update_raw();
154 });
155 }
156 },
157 );
158 }pub fn y_mut(&mut self) -> &mut T
pub fn z_mut(&mut self) -> &mut T
Source§impl<T: Number> Matrix<T, 4, 1>
impl<T: Number> Matrix<T, 4, 1>
pub fn new(x: T, y: T, z: T, w: T) -> Self
pub fn x(&self) -> &T
pub fn y(&self) -> &T
pub fn z(&self) -> &T
pub fn w(&self) -> &T
pub fn x_mut(&mut self) -> &mut T
pub fn y_mut(&mut self) -> &mut T
pub fn z_mut(&mut self) -> &mut T
pub fn w_mut(&mut self) -> &mut T
Trait Implementations§
Source§impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Add for &Matrix<T, M, N, Storage>
impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Add for &Matrix<T, M, N, Storage>
Source§impl<T: Number + AddAssign<T>, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> AddAssign for Matrix<T, M, N, Storage>
impl<T: Number + AddAssign<T>, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> AddAssign for Matrix<T, M, N, Storage>
Source§fn add_assign(&mut self, other: Self)
fn add_assign(&mut self, other: Self)
Performs the
+= operation. Read moreSource§impl<T: Number + Display, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Display for Matrix<T, M, N, Storage>
impl<T: Number + Display, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Display for Matrix<T, M, N, Storage>
Source§impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Div<T> for &Matrix<T, M, N, Storage>
impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Div<T> for &Matrix<T, M, N, Storage>
Source§impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Index<(usize, usize)> for Matrix<T, M, N, Storage>
impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Index<(usize, usize)> for Matrix<T, M, N, Storage>
Source§impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> IndexMut<(usize, usize)> for Matrix<T, M, N, Storage>
impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> IndexMut<(usize, usize)> for Matrix<T, M, N, Storage>
Source§impl<T: Number, const M: usize, const N: usize, const P: usize, StorageA: MatrixStoragable<T, M, N>, StorageB: MatrixStoragable<T, N, P>> Mul<&Matrix<T, N, P, StorageB>> for &Matrix<T, M, N, StorageA>
impl<T: Number, const M: usize, const N: usize, const P: usize, StorageA: MatrixStoragable<T, M, N>, StorageB: MatrixStoragable<T, N, P>> Mul<&Matrix<T, N, P, StorageB>> for &Matrix<T, M, N, StorageA>
Source§impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Mul<T> for &Matrix<T, M, N, Storage>
impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Mul<T> for &Matrix<T, M, N, Storage>
Source§impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Neg for &Matrix<T, M, N, Storage>
impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Neg for &Matrix<T, M, N, Storage>
Source§impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Neg for Matrix<T, M, N, Storage>
impl<T: Number, const M: usize, const N: usize, Storage: MatrixStoragable<T, M, N>> Neg for Matrix<T, M, N, Storage>
Auto Trait Implementations§
impl<T, const M: usize, const N: usize, Storage> Freeze for Matrix<T, M, N, Storage>where
Storage: Freeze,
impl<T, const M: usize, const N: usize, Storage> RefUnwindSafe for Matrix<T, M, N, Storage>where
Storage: RefUnwindSafe,
T: RefUnwindSafe,
impl<T, const M: usize, const N: usize, Storage> Send for Matrix<T, M, N, Storage>
impl<T, const M: usize, const N: usize, Storage> Sync for Matrix<T, M, N, Storage>
impl<T, const M: usize, const N: usize, Storage> Unpin for Matrix<T, M, N, Storage>
impl<T, const M: usize, const N: usize, Storage> UnwindSafe for Matrix<T, M, N, Storage>where
Storage: UnwindSafe,
T: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more