Skip to content

Commit 4ab3925

Browse files
e00EJason Lessard
and
Jason Lessard
committed
Add rectangular cuboid shape
Co-authored-by: Jason Lessard <jason.lessard@usherbrooke.ca>
1 parent 4fecb89 commit 4ab3925

File tree

11 files changed

+70
-53
lines changed

11 files changed

+70
-53
lines changed

crates/bevy_render/src/mesh/mesh.rs

+60-43
Original file line numberDiff line numberDiff line change
@@ -227,58 +227,75 @@ pub mod shape {
227227
use bevy_math::*;
228228
use hexasphere::Hexasphere;
229229

230-
/// A cube.
231-
#[derive(Debug)]
232-
pub struct Cube {
233-
/// Half the side length of the cube.
234-
pub size: f32,
230+
pub struct Cuboid {
231+
pub min_x: f32,
232+
pub max_x: f32,
233+
234+
pub min_y: f32,
235+
pub max_y: f32,
236+
237+
pub min_z: f32,
238+
pub max_z: f32,
239+
}
240+
241+
impl Cuboid {
242+
pub fn new(x_length: f32, y_length: f32, z_length: f32) -> Cuboid {
243+
Cuboid {
244+
max_x: x_length / 2.0,
245+
min_x: -x_length / 2.0,
246+
max_y: y_length / 2.0,
247+
min_y: -y_length / 2.0,
248+
max_z: z_length / 2.0,
249+
min_z: -z_length / 2.0,
250+
}
251+
}
235252
}
236253

237-
impl Default for Cube {
254+
impl Default for Cuboid {
238255
fn default() -> Self {
239-
Cube { size: 1.0 }
256+
Cuboid::new(2.0, 1.0, 1.0)
240257
}
241258
}
242259

243-
impl From<Cube> for Mesh {
244-
fn from(cube: Cube) -> Self {
245-
let size = cube.size;
260+
impl From<Cuboid> for Mesh {
261+
fn from(sp: Cuboid) -> Self {
246262
let vertices = &[
247-
// top (0., 0., size)
248-
([-size, -size, size], [0., 0., size], [0., 0.]),
249-
([size, -size, size], [0., 0., size], [size, 0.]),
250-
([size, size, size], [0., 0., size], [size, size]),
251-
([-size, size, size], [0., 0., size], [0., size]),
252-
// bottom (0., 0., -size)
253-
([-size, size, -size], [0., 0., -size], [size, 0.]),
254-
([size, size, -size], [0., 0., -size], [0., 0.]),
255-
([size, -size, -size], [0., 0., -size], [0., size]),
256-
([-size, -size, -size], [0., 0., -size], [size, size]),
257-
// right (size, 0., 0.)
258-
([size, -size, -size], [size, 0., 0.], [0., 0.]),
259-
([size, size, -size], [size, 0., 0.], [size, 0.]),
260-
([size, size, size], [size, 0., 0.], [size, size]),
261-
([size, -size, size], [size, 0., 0.], [0., size]),
262-
// left (-size, 0., 0.)
263-
([-size, -size, size], [-size, 0., 0.], [size, 0.]),
264-
([-size, size, size], [-size, 0., 0.], [0., 0.]),
265-
([-size, size, -size], [-size, 0., 0.], [0., size]),
266-
([-size, -size, -size], [-size, 0., 0.], [size, size]),
267-
// front (0., size, 0.)
268-
([size, size, -size], [0., size, 0.], [size, 0.]),
269-
([-size, size, -size], [0., size, 0.], [0., 0.]),
270-
([-size, size, size], [0., size, 0.], [0., size]),
271-
([size, size, size], [0., size, 0.], [size, size]),
272-
// back (0., -size, 0.)
273-
([size, -size, size], [0., -size, 0.], [0., 0.]),
274-
([-size, -size, size], [0., -size, 0.], [size, 0.]),
275-
([-size, -size, -size], [0., -size, 0.], [size, size]),
276-
([size, -size, -size], [0., -size, 0.], [0., size]),
263+
// Top
264+
([sp.min_x, sp.min_y, sp.max_z], [0., 0., 1.0], [0., 0.]),
265+
([sp.max_x, sp.min_y, sp.max_z], [0., 0., 1.0], [1.0, 0.]),
266+
([sp.max_x, sp.max_y, sp.max_z], [0., 0., 1.0], [1.0, 1.0]),
267+
([sp.min_x, sp.max_y, sp.max_z], [0., 0., 1.0], [0., 1.0]),
268+
// Bottom
269+
([sp.min_x, sp.max_y, sp.min_z], [0., 0., -1.0], [1.0, 0.]),
270+
([sp.max_x, sp.max_y, sp.min_z], [0., 0., -1.0], [0., 0.]),
271+
([sp.max_x, sp.min_y, sp.min_z], [0., 0., -1.0], [0., 1.0]),
272+
([sp.min_x, sp.min_y, sp.min_z], [0., 0., -1.0], [1.0, 1.0]),
273+
// Right
274+
([sp.max_x, sp.min_y, sp.min_z], [1.0, 0., 0.], [0., 0.]),
275+
([sp.max_x, sp.max_y, sp.min_z], [1.0, 0., 0.], [1.0, 0.]),
276+
([sp.max_x, sp.max_y, sp.max_z], [1.0, 0., 0.], [1.0, 1.0]),
277+
([sp.max_x, sp.min_y, sp.max_z], [1.0, 0., 0.], [0., 1.0]),
278+
// Left
279+
([sp.min_x, sp.min_y, sp.max_z], [-1.0, 0., 0.], [1.0, 0.]),
280+
([sp.min_x, sp.max_y, sp.max_z], [-1.0, 0., 0.], [0., 0.]),
281+
([sp.min_x, sp.max_y, sp.min_z], [-1.0, 0., 0.], [0., 1.0]),
282+
([sp.min_x, sp.min_y, sp.min_z], [-1.0, 0., 0.], [1.0, 1.0]),
283+
// Front
284+
([sp.max_x, sp.max_y, sp.min_z], [0., 1.0, 0.], [1.0, 0.]),
285+
([sp.min_x, sp.max_y, sp.min_z], [0., 1.0, 0.], [0., 0.]),
286+
([sp.min_x, sp.max_y, sp.max_z], [0., 1.0, 0.], [0., 1.0]),
287+
([sp.max_x, sp.max_y, sp.max_z], [0., 1.0, 0.], [1.0, 1.0]),
288+
// Back
289+
([sp.max_x, sp.min_y, sp.max_z], [0., -1.0, 0.], [0., 0.]),
290+
([sp.min_x, sp.min_y, sp.max_z], [0., -1.0, 0.], [1.0, 0.]),
291+
([sp.min_x, sp.min_y, sp.min_z], [0., -1.0, 0.], [1.0, 1.0]),
292+
([sp.max_x, sp.min_y, sp.min_z], [0., -1.0, 0.], [0., 1.0]),
277293
];
278294

279-
let mut positions = Vec::new();
280-
let mut normals = Vec::new();
281-
let mut uvs = Vec::new();
295+
let mut positions = Vec::with_capacity(24);
296+
let mut normals = Vec::with_capacity(24);
297+
let mut uvs = Vec::with_capacity(24);
298+
282299
for (position, normal, uv) in vertices.iter() {
283300
positions.push(*position);
284301
normals.push(*normal);

examples/3d/3d_scene.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ fn setup(
2424
})
2525
// cube
2626
.spawn(PbrBundle {
27-
mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
27+
mesh: meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0))),
2828
material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()),
2929
transform: Transform::from_translation(Vec3::new(0.0, 1.0, 0.0)),
3030
..Default::default()

examples/3d/msaa.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ fn setup(
2121
commands
2222
// cube
2323
.spawn(PbrBundle {
24-
mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
24+
mesh: meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0))),
2525
material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()),
2626
..Default::default()
2727
})

examples/3d/parenting.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ fn setup(
2727
mut meshes: ResMut<Assets<Mesh>>,
2828
mut materials: ResMut<Assets<StandardMaterial>>,
2929
) {
30-
let cube_handle = meshes.add(Mesh::from(shape::Cube { size: 1.0 }));
30+
let cube_handle = meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0)));
3131
let cube_material_handle = materials.add(StandardMaterial {
3232
albedo: Color::rgb(0.8, 0.7, 0.6),
3333
..Default::default()

examples/3d/spawner.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ fn setup(
5050
});
5151

5252
let mut rng = StdRng::from_entropy();
53-
let cube_handle = meshes.add(Mesh::from(shape::Cube { size: 1.0 }));
53+
let cube_handle = meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0)));
5454
for _ in 0..10000 {
5555
commands.spawn(PbrBundle {
5656
mesh: cube_handle.clone(),

examples/3d/z_sort_debug.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ fn setup(
4646
mut meshes: ResMut<Assets<Mesh>>,
4747
mut materials: ResMut<Assets<StandardMaterial>>,
4848
) {
49-
let cube_handle = meshes.add(Mesh::from(shape::Cube { size: 1.0 }));
49+
let cube_handle = meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0)));
5050
commands
5151
// parent cube
5252
.spawn(PbrBundle {

examples/android/android.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ fn setup(
2626
})
2727
// cube
2828
.spawn(PbrBundle {
29-
mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
29+
mesh: meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0))),
3030
material: materials.add(Color::rgb(0.8, 0.7, 0.6).into()),
3131
transform: Transform::from_translation(Vec3::new(0.0, 1.0, 0.0)),
3232
..Default::default()

examples/ios/src/lib.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ fn setup(
3131
})
3232
// cube
3333
.spawn(PbrBundle {
34-
mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
34+
mesh: meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0))),
3535
material: materials.add(Color::rgb(0.5, 0.4, 0.3).into()),
3636
transform: Transform::from_translation(Vec3::new(0.0, 1.0, 0.0)),
3737
..Default::default()

examples/shader/mesh_custom_attribute.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ fn setup(
8383
let material = materials.add(MyMaterialWithVertexColorSupport {});
8484

8585
// create a generic cube
86-
let mut cube_with_vertex_colors = Mesh::from(shape::Cube { size: 1.0 });
86+
let mut cube_with_vertex_colors = Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0));
8787

8888
// insert our custom color attribute with some nice colors!
8989
cube_with_vertex_colors.set_attribute(

examples/shader/shader_custom_material.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ fn setup(
8484
commands
8585
// cube
8686
.spawn(MeshBundle {
87-
mesh: meshes.add(Mesh::from(shape::Cube { size: 1.0 })),
87+
mesh: meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0))),
8888
render_pipelines: RenderPipelines::from_pipelines(vec![RenderPipeline::new(
8989
pipeline_handle,
9090
)]),

examples/shader/shader_defs.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ fn setup(
9797
});
9898

9999
// Create a cube mesh which will use our materials
100-
let cube_handle = meshes.add(Mesh::from(shape::Cube { size: 1.0 }));
100+
let cube_handle = meshes.add(Mesh::from(shape::Cuboid::new(1.0, 1.0, 1.0)));
101101

102102
commands
103103
// cube

0 commit comments

Comments
 (0)