chore: add ccd test to voxels examples

This commit is contained in:
Sébastien Crozet
2025-05-02 14:50:21 +02:00
committed by Sébastien Crozet
parent f49d0206cb
commit 4cf4524cc6
2 changed files with 12 additions and 4 deletions

View File

@@ -28,6 +28,7 @@ pub fn init_world(testbed: &mut Testbed) {
); );
let voxel_size_y = settings.get_or_set_f32("Voxel size y", 1.0, 0.5..=2.0); let voxel_size_y = settings.get_or_set_f32("Voxel size y", 1.0, 0.5..=2.0);
let voxel_size = Vector::new(1.0, voxel_size_y); let voxel_size = Vector::new(1.0, voxel_size_y);
let test_ccd = settings.get_or_set_bool("Test CCD", false);
let primitive_geometry = if geometry_mode == 0 { let primitive_geometry = if geometry_mode == 0 {
VoxelPrimitiveGeometry::PseudoCube VoxelPrimitiveGeometry::PseudoCube
@@ -49,10 +50,13 @@ pub fn init_world(testbed: &mut Testbed) {
let nx = 50; let nx = 50;
for i in 0..nx { for i in 0..nx {
for j in 0..10 { for j in 0..10 {
let rb = RigidBodyBuilder::dynamic().translation(vector![ let mut rb = RigidBodyBuilder::dynamic().translation(vector![
i as f32 * 2.0 - nx as f32 / 2.0, i as f32 * 2.0 - nx as f32 / 2.0,
20.0 + j as f32 * 2.0 20.0 + j as f32 * 2.0
]); ]);
if test_ccd {
rb = rb.linvel(vector![0.0, -1000.0]).ccd_enabled(true);
}
let rb_handle = bodies.insert(rb); let rb_handle = bodies.insert(rb);
let falling_objects = if falling_objects == 3 { let falling_objects = if falling_objects == 3 {

View File

@@ -34,6 +34,7 @@ pub fn init_world(testbed: &mut Testbed) {
let voxel_size_y = settings.get_or_set_f32("Voxel size y", 1.0, 0.5..=2.0); let voxel_size_y = settings.get_or_set_f32("Voxel size y", 1.0, 0.5..=2.0);
let voxel_size = Vector::new(1.0, voxel_size_y, 1.0); let voxel_size = Vector::new(1.0, voxel_size_y, 1.0);
let test_ccd = settings.get_or_set_bool("Test CCD", false);
// TODO: give a better placement to the objs. // TODO: give a better placement to the objs.
// settings.get_or_set_bool("Load .obj", false); // settings.get_or_set_bool("Load .obj", false);
@@ -174,11 +175,14 @@ pub fn init_world(testbed: &mut Testbed) {
for i in 0..nik { for i in 0..nik {
for j in 0..5 { for j in 0..5 {
for k in 0..nik { for k in 0..nik {
let rb = RigidBodyBuilder::dynamic().translation(vector![ let mut rb = RigidBodyBuilder::dynamic().translation(vector![
floor_aabb.mins.x + margin.x + i as f32 * extents.x / nik as f32, floor_aabb.mins.x + margin.x + i as f32 * extents.x / nik as f32,
floor_aabb.maxs.y + j as f32 * 2.0, floor_aabb.maxs.y + j as f32 * 2.0,
floor_aabb.mins.z + margin.z + k as f32 * extents.z / nik as f32, floor_aabb.mins.z + margin.z + k as f32 * extents.z / nik as f32,
]); ]);
if test_ccd {
rb = rb.linvel(vector![0.0, -1000.0, 0.0]).ccd_enabled(true);
}
let rb_handle = bodies.insert(rb); let rb_handle = bodies.insert(rb);
let falling_objects = if falling_objects == 5 { let falling_objects = if falling_objects == 5 {
@@ -240,7 +244,7 @@ pub fn init_world(testbed: &mut Testbed) {
let FeatureId::Face(id) = hit.feature else { let FeatureId::Face(id) = hit.feature else {
unreachable!() unreachable!()
}; };
let voxel_key = voxels.voxel_key_at(id); let voxel_key = voxels.voxel_at_id(id);
let voxel_center = hit_collider.position() * voxels.voxel_center(voxel_key); let voxel_center = hit_collider.position() * voxels.voxel_center(voxel_key);
let voxel_size = voxels.voxel_size(); let voxel_size = voxels.voxel_size();
let hit_highlight = physics.colliders.get_mut(hit_highlight_handle).unwrap(); let hit_highlight = physics.colliders.get_mut(hit_highlight_handle).unwrap();
@@ -280,7 +284,7 @@ pub fn init_world(testbed: &mut Testbed) {
} }
} }
voxels.insert_voxel_at_key(affected_key, !removal_mode); voxels.set_voxel(affected_key, !removal_mode);
graphics.update_collider(handle, &physics.colliders); graphics.update_collider(handle, &physics.colliders);
} }
} else { } else {