bevy_xpbd
bevy_xpbd copied to clipboard
Clockwise triangle collider doesn't work
trafficstars
Versions
bevy 0.13.2 bevy_xpbd_2d 0.4.2
Description
It seems that the collider of a clockwise ordered Triangle2D doesn't register collisions with other polygons, such as triangles, rectangles, etc.
Example
Below code spawns a triangle with vertices in the clockwise direction and a square. The two shapes are overlapping at spawn, so that should be printed, and shapes should be moved to be disjoint. Neither of these happen.
However, if I swap the triangle vertices so that they are ordered anticlockwise, everything works as expected - I get a message about entities overlapping at spawn, and the shapes are flung out of view very quickly.
use bevy::{prelude::*, sprite::MaterialMesh2dBundle};
use bevy_xpbd_2d::prelude::*;
fn main() {
App::new()
.add_plugins(DefaultPlugins)
.add_plugins(PhysicsPlugins::default())
.insert_resource(Gravity(Vec2::ZERO))
.add_systems(Startup, (setup_camera, spawn_objects))
.run();
}
fn setup_camera(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
}
fn spawn_objects(
mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>,
) {
let shape = Triangle2d::new(
Vec2::new(0.0, -100.0),
Vec2::new(0.0, 100.0),
Vec2::new(200.0, 0.0),
);
commands.spawn((
MaterialMesh2dBundle {
mesh: meshes.add(shape).into(),
material: materials.add(Color::BLUE),
transform: Transform::from_translation(Vec3::new(-75.0, 0.0, 0.0)),
..default()
},
RigidBody::Dynamic,
shape.collider(),
));
let shape = Rectangle::new(100.0, 100.0);
commands.spawn((
MaterialMesh2dBundle {
mesh: meshes.add(shape).into(),
material: materials.add(Color::YELLOW),
transform: Transform::from_translation(Vec3::new(50.0, 0.0, 0.0)),
..default()
},
RigidBody::Dynamic,
shape.collider(),
));
}