pub struct RenderObject { /* private fields */ }Implementations§
Source§impl RenderObject
impl RenderObject
Sourcepub fn new(model: impl Model<TextureVertex>, texture_path: String) -> Self
pub fn new(model: impl Model<TextureVertex>, texture_path: String) -> Self
Examples found in repository?
examples/run/main.rs (line 57)
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 }Auto Trait Implementations§
impl !RefUnwindSafe for RenderObject
impl !UnwindSafe for RenderObject
impl Freeze for RenderObject
impl Send for RenderObject
impl Sync for RenderObject
impl Unpin for RenderObject
impl UnsafeUnpin for RenderObject
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
impl<T> Component for T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Convert
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Convert
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.