Skip to content

Commit

Permalink
use bevy's new primitives for geometry
Browse files Browse the repository at this point in the history
  • Loading branch information
rlidwka committed Mar 3, 2024
1 parent 13d5285 commit 1d6c056
Show file tree
Hide file tree
Showing 15 changed files with 159 additions and 82 deletions.
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ use bevy_mod_physx::prelude::{Material, Shape}; // bevy prelude conflicts
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(PhysicsPlugins)
.add_plugins(PhysicsPlugins.set(
PhysicsCore::new().with_pvd()
))
.add_systems(Startup, setup_graphics)
.add_systems(Startup, setup_physics)
.insert_resource(DebugRenderSettings::enable())
Expand All @@ -55,7 +57,7 @@ fn setup_physics(
commands.spawn((
RigidBody::Static,
Shape {
geometry: geometries.add(Geometry::halfspace(Vec3::Y)),
geometry: geometries.add(Plane3d::default()),
material: materials.add(Material::new(&mut physics, 0.5, 0.5, 0.6)),
..default()
},
Expand All @@ -66,7 +68,7 @@ fn setup_physics(
commands.spawn((
RigidBody::Dynamic,
Shape {
geometry: geometries.add(Geometry::ball(0.5)),
geometry: geometries.add(Sphere::new(0.5)),
material: materials.add(Material::new(&mut physics, 0.5, 0.5, 0.6)),
..default()
},
Expand Down
20 changes: 12 additions & 8 deletions examples/articulation.rs
Original file line number Diff line number Diff line change
Expand Up @@ -43,10 +43,11 @@ fn spawn_long_chain(
const OVERLAPPING_LINKS: bool = true;

let mut position = Vec3::new(0., 24., 0.);
let mesh = meshes.add(Capsule3d::new(RADIUS, HALF_HEIGHT + RADIUS * 2.));
let primitive = Capsule3d::new(RADIUS, HALF_HEIGHT + RADIUS * 2.);
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(1., 0.7, 0.));

let px_geometry = px_geometries.add(bpx::Geometry::capsule(HALF_HEIGHT, RADIUS));
let px_geometry = px_geometries.add(primitive);
let mut parent_link = None;

for _ in 0..SEGMENTS {
Expand Down Expand Up @@ -126,9 +127,10 @@ fn spawn_long_chain(
position.x -= (RADIUS + HALF_HEIGHT) * 2.;
position.x += (RADIUS + HALF_HEIGHT) + BOX_SIZE;

let box_mesh = meshes.add(Cuboid::from_size(Vec3::splat(BOX_SIZE * 2.)));
let primitive = Cuboid::from_size(Vec3::splat(BOX_SIZE * 2.));
let box_mesh = meshes.add(primitive);
let box_material = materials.add(Color::rgb(0.8, 0.7, 0.6));
let box_geometry = px_geometries.add(bpx::Geometry::cuboid(BOX_SIZE, BOX_SIZE, BOX_SIZE));
let box_geometry = px_geometries.add(primitive);

commands.spawn_empty()
.insert(bpx::RigidBody::ArticulationLink)
Expand Down Expand Up @@ -176,10 +178,11 @@ fn spawn_obstacle(
const HALF_Y: f32 = 0.1;
const HALF_Z: f32 = 2.;

let mesh = meshes.add(Cuboid::new(HALF_X * 2., HALF_Y * 2., HALF_Z * 2.).mesh());
let primitive = Cuboid::new(HALF_X * 2., HALF_Y * 2., HALF_Z * 2.);
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(0.8, 0.7, 0.6));

let px_geometry = px_geometries.add(bpx::Geometry::cuboid(HALF_X, HALF_Y, HALF_Z));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0.5, 0.5, 0.6));
let transform = Transform::from_xyz(10., 21., 0.);

Expand Down Expand Up @@ -207,9 +210,10 @@ fn spawn_plane(
mut px_geometries: ResMut<Assets<bpx::Geometry>>,
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
let mesh = meshes.add(Plane3d::default().mesh().size(500., 500.));
let primitive = Plane3d::default();
let mesh = meshes.add(primitive.mesh().size(500., 500.));
let material = materials.add(Color::rgb(0.3, 0.5, 0.3));
let px_geometry = px_geometries.add(bpx::Geometry::halfspace(Vec3::Y));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0.5, 0.5, 0.6));

commands.spawn_empty()
Expand Down
15 changes: 9 additions & 6 deletions examples/cube_stacks.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,10 @@ fn spawn_plane(
mut px_geometries: ResMut<Assets<bpx::Geometry>>,
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
let mesh = meshes.add(Plane3d::default().mesh().size(500., 500.));
let primitive = Plane3d::default();
let mesh = meshes.add(primitive.mesh().size(500., 500.));
let material = materials.add(Color::rgb(0.3, 0.5, 0.3));
let px_geometry = px_geometries.add(bpx::Geometry::halfspace(Vec3::Y));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0.5, 0.5, 0.6));

commands.spawn_empty()
Expand All @@ -56,10 +57,11 @@ fn spawn_stacks(
const WIDTH: f32 = 0.5;
const SIZE: usize = 10;

let mesh = meshes.add(Cuboid::from_size(Vec3::splat(WIDTH)));
let primitive = Cuboid::from_size(Vec3::splat(WIDTH));
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(0.8, 0.7, 0.6));

let px_geometry = px_geometries.add(bpx::Geometry::cuboid(WIDTH / 2., WIDTH / 2., WIDTH / 2.));
let px_geometry = px_geometries.add(primitive);

for i in 0..5 {
commands.spawn(SpatialBundle::from_transform(Transform::from_xyz(0., 0., -1.25 * i as f32)))
Expand Down Expand Up @@ -102,10 +104,11 @@ fn spawn_dynamic(
) {
const RADIUS: f32 = 1.25;

let mesh = meshes.add(Sphere::new(RADIUS).mesh());
let primitive = Sphere::new(RADIUS);
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(0.8, 0.7, 0.6));

let px_geometry = px_geometries.add(bpx::Geometry::ball(RADIUS));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0.5, 0.5, 0.6));

let transform = Transform::from_xyz(0., 5., 12.5);
Expand Down
17 changes: 9 additions & 8 deletions examples/detect_contacts.rs
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,10 @@ fn spawn_plane(
mut px_geometries: ResMut<Assets<bpx::Geometry>>,
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
let mesh = meshes.add(Plane3d::default().mesh().size(500., 500.));
let primitive = Plane3d::default();
let mesh = meshes.add(primitive.mesh().size(500., 500.));
let material = materials.add(Color::rgb(0.3, 0.5, 0.3));
let px_geometry = px_geometries.add(bpx::Geometry::halfspace(Vec3::Y));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0.5, 0.5, 0.6));

commands.spawn_empty()
Expand All @@ -178,8 +179,9 @@ fn spawn_tiles(
let num = 32;
let rad = 1.0;
let height = 0.1;
let px_geometry = px_geometries.add(bpx::Geometry::cuboid(rad, height, rad));
let mesh = meshes.add(Cuboid::new(rad * 2., height * 2., rad * 2.).mesh());
let primitive = Cuboid::new(rad * 2., height * 2., rad * 2.);
let px_geometry = px_geometries.add(primitive);
let mesh = meshes.add(primitive);
let material = materials.normal.clone();

let shift = rad * 2.5;
Expand Down Expand Up @@ -218,12 +220,11 @@ fn spawn_dynamic(
mut px_geometries: ResMut<Assets<bpx::Geometry>>,
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
const RADIUS: f32 = 1.25;

let mesh = meshes.add(Sphere::new(RADIUS).mesh());
let primitive = Sphere::new(1.25);
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(0.8, 0.7, 0.6));

let px_geometry = px_geometries.add(bpx::Geometry::ball(RADIUS));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0., 0., 1.));

let transform = Transform::from_xyz(0., 5., 32.5);
Expand Down
4 changes: 2 additions & 2 deletions examples/getting_started.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ fn setup_physics(
commands.spawn((
RigidBody::Static,
Shape {
geometry: geometries.add(Geometry::halfspace(Vec3::Y)),
geometry: geometries.add(Plane3d::default()),
material: materials.add(Material::new(&mut physics, 0.5, 0.5, 0.6)),
..default()
},
Expand All @@ -44,7 +44,7 @@ fn setup_physics(
commands.spawn((
RigidBody::Dynamic,
Shape {
geometry: geometries.add(Geometry::ball(0.5)),
geometry: geometries.add(Sphere::new(0.5)),
material: materials.add(Material::new(&mut physics, 0.5, 0.5, 0.6)),
..default()
},
Expand Down
20 changes: 12 additions & 8 deletions examples/kinematic.rs
Original file line number Diff line number Diff line change
Expand Up @@ -48,9 +48,10 @@ fn spawn_table(
const THICKNESS: f32 = 0.5;
const SIDE_HEIGHT: f32 = 1.;

let mesh = meshes.add(Cuboid::new(SIZE, THICKNESS, SIZE));
let primitive = Cuboid::new(SIZE, THICKNESS, SIZE);
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(0.3, 0.5, 0.3));
let px_geometry = px_geometries.add(bpx::Geometry::cuboid(SIZE / 2., THICKNESS / 2., SIZE / 2.));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0.5, 0.5, 0.6));

commands.spawn_empty()
Expand All @@ -69,9 +70,10 @@ fn spawn_table(
.insert(Surface)
.insert(Name::new("TableSurface"));

let mesh = meshes.add(Cuboid::new(SIZE + THICKNESS, SIDE_HEIGHT, THICKNESS));
let primitive = Cuboid::new(SIZE + THICKNESS, SIDE_HEIGHT, THICKNESS);
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(0.3, 0.5, 0.3));
let px_geometry = px_geometries.add(bpx::Geometry::cuboid(SIZE / 2. + THICKNESS / 2., SIDE_HEIGHT / 2., THICKNESS / 2.));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0.5, 0.5, 0.6));

for side in 0..4 {
Expand Down Expand Up @@ -104,10 +106,11 @@ fn spawn_pyramid(
mut px_geometries: ResMut<Assets<bpx::Geometry>>,
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
let mesh = meshes.add(Sphere::new(BALL_SIZE).mesh());
let primitive = Sphere::new(BALL_SIZE);
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(0.8, 0.7, 0.6));

let px_geometry = px_geometries.add(bpx::Geometry::ball(BALL_SIZE));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0., 0., 1.));

for dx in 0..8 {
Expand Down Expand Up @@ -144,10 +147,11 @@ fn spawn_kinematic(
mut px_geometries: ResMut<Assets<bpx::Geometry>>,
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
let mesh = meshes.add(Cuboid::new(CUE_SIZE, CUE_SIZE, CUE_SIZE));
let primitive = Cuboid::new(CUE_SIZE, CUE_SIZE, CUE_SIZE);
let mesh = meshes.add(primitive);
let material = materials.add(Color::rgb(0.8, 0.7, 0.6));

let px_geometry = px_geometries.add(bpx::Geometry::cuboid(CUE_SIZE / 2., CUE_SIZE / 2., CUE_SIZE / 2.));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0., 0., 1.));
let transform = Transform::from_xyz(0., BALL_SIZE, 0.);

Expand Down
10 changes: 6 additions & 4 deletions examples/raycast.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,10 @@ fn spawn_plane(
mut px_geometries: ResMut<Assets<bpx::Geometry>>,
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
let mesh = meshes.add(Plane3d::default().mesh().size(500., 500.));
let primitive = Plane3d::default();
let mesh = meshes.add(primitive.mesh().size(500., 500.));
let material = materials.add(Color::rgb(0.3, 0.5, 0.3));
let px_geometry = px_geometries.add(bpx::Geometry::halfspace(Vec3::Y));
let px_geometry = px_geometries.add(primitive);
let px_material = px_materials.add(bpx::Material::new(&mut physics, 0.5, 0.5, 0.6));

commands.spawn_empty()
Expand All @@ -87,8 +88,9 @@ fn spawn_cubes(
) {
let num = 8;
let rad = 1.0;
let px_geometry = px_geometries.add(bpx::Geometry::cuboid(rad, rad, rad));
let mesh = meshes.add(Cuboid::from_size(Vec3::splat(rad * 2.)));
let primitive = Cuboid::from_size(Vec3::splat(rad * 2.));
let px_geometry = px_geometries.add(primitive);
let mesh = meshes.add(primitive);
let material = materials.normal.clone();

let shift = rad * 2.0 + rad;
Expand Down
20 changes: 13 additions & 7 deletions examples/test_articulation_drives.rs
Original file line number Diff line number Diff line change
Expand Up @@ -30,26 +30,32 @@ pub fn spawn_scene(
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
// plane
let primitive = Plane3d::default();
commands.spawn((
bpx::RigidBody::Static,
bpx::Shape {
geometry: px_geometries.add(bpx::Geometry::halfspace(Vec3::Y)),
geometry: px_geometries.add(primitive),
material: px_materials.add(bpx::Material::new(&mut physics, 0., 0., 1.)),
..default()
},
PbrBundle {
mesh: meshes.add(Plane3d::default().mesh().size(1000., 1000.)),
mesh: meshes.add(primitive.mesh().size(1000., 1000.)),
material: materials.add(Color::rgb(0.3, 0.5, 0.3)),
..default()
}
));

let primitive_root = Cuboid::from_size(Vec3::splat(0.5));
let bevy_material = materials.add(Color::rgb(0.8, 0.7, 0.6));
let root_mesh = meshes.add(Cuboid::new(0.5, 0.5, 0.5));
let root_geometry = px_geometries.add(bpx::Geometry::cuboid(0.25, 0.25, 0.25));
let part_mesh = meshes.add(Sphere::new(0.2).mesh());
let part_geometry = px_geometries.add(bpx::Geometry::ball(0.2));
let limited_joint = ArticulationJointMotion::Limited { min: -std::f32::consts::FRAC_PI_4, max: std::f32::consts::FRAC_PI_4 };
let root_mesh = meshes.add(primitive_root);
let root_geometry = px_geometries.add(primitive_root);
let primitive_part = Sphere::new(0.2);
let part_mesh = meshes.add(primitive_part);
let part_geometry = px_geometries.add(primitive_part);
let limited_joint = ArticulationJointMotion::Limited {
min: -std::f32::consts::FRAC_PI_4,
max: std::f32::consts::FRAC_PI_4,
};

let root = commands.spawn((
PbrBundle {
Expand Down
5 changes: 3 additions & 2 deletions examples/test_convex_shapes.rs
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,15 @@ pub fn spawn_scene(
mut px_geometries: ResMut<Assets<bpx::Geometry>>,
) {
// plane
let primitive = Plane3d::default();
commands.spawn((
RigidBody::Static,
bpx::Shape {
geometry: px_geometries.add(bpx::Geometry::halfspace(Vec3::Y)),
geometry: px_geometries.add(primitive),
..default()
},
PbrBundle {
mesh: meshes.add(Plane3d::default().mesh().size(1000., 1000.)),
mesh: meshes.add(primitive.mesh().size(1000., 1000.)),
material: materials.add(Color::rgb(0.3, 0.5, 0.3)),
..default()
}
Expand Down
15 changes: 9 additions & 6 deletions examples/test_damping.rs
Original file line number Diff line number Diff line change
Expand Up @@ -27,48 +27,51 @@ pub fn spawn_scene(
mut px_materials: ResMut<Assets<bpx::Material>>,
) {
// plane
let primitive = Plane3d::default();
commands.spawn((
RigidBody::Static,
bpx::Shape {
geometry: px_geometries.add(bpx::Geometry::halfspace(Vec3::Y)),
geometry: px_geometries.add(primitive),
material: px_materials.add(bpx::Material::new(&mut physics, 0., 0., 1.)),
..default()
},
PbrBundle {
mesh: meshes.add(Plane3d::default().mesh().size(1000., 1000.)),
mesh: meshes.add(primitive.mesh().size(1000., 1000.)),
material: materials.add(Color::rgb(0.3, 0.5, 0.3)),
..default()
}
));

// no damping
let primitive = Sphere::new(0.5);
commands.spawn((
PbrBundle {
mesh: meshes.add(Sphere::new(0.5).mesh()),
mesh: meshes.add(primitive),
material: materials.add(Color::rgb(0.8, 0.7, 0.6)),
transform: Transform::from_xyz(-2.0, 7.0, 0.0),
..default()
},
RigidBody::Dynamic,
bpx::Shape {
geometry: px_geometries.add(bpx::Geometry::ball(0.5)),
geometry: px_geometries.add(primitive),
material: px_materials.add(bpx::Material::new(&mut physics, 0., 0., 1.)),
..default()
},
Damping { linear: 0., angular: 0. },
));

// high damping
let primitive = Sphere::new(0.5);
commands.spawn((
PbrBundle {
mesh: meshes.add(Sphere::new(0.5).mesh()),
mesh: meshes.add(primitive),
material: materials.add(Color::rgb(0.8, 0.7, 0.6)),
transform: Transform::from_xyz(2.0, 7.0, 0.0),
..default()
},
RigidBody::Dynamic,
bpx::Shape {
geometry: px_geometries.add(bpx::Geometry::ball(0.5)),
geometry: px_geometries.add(primitive),
material: px_materials.add(bpx::Material::new(&mut physics, 0., 0., 1.)),
..default()
},
Expand Down
Loading

0 comments on commit 1d6c056

Please sign in to comment.