[Bf-blender-cvs] [3d3ece2c67a] fracture_modifier: fix for collision condition, it failed for regular case
Martin Felke
noreply at git.blender.org
Mon Dec 25 14:13:39 CET 2017
Commit: 3d3ece2c67adc960f90b752a076990aab771aecb
Author: Martin Felke
Date: Mon Dec 25 14:12:45 2017 +0100
Branches: fracture_modifier
https://developer.blender.org/rB3d3ece2c67adc960f90b752a076990aab771aecb
fix for collision condition, it failed for regular case
===================================================================
M source/blender/blenkernel/intern/rigidbody.c
===================================================================
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 924a2368c50..061c526c4f2 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -4035,21 +4035,28 @@ static bool check_constraint_island(FractureModifierData* fmd, MeshIsland *mi1,
float dist_sq = len_squared_v3v3(mi1->centroid, mi2->centroid);
bool is_near = len_squared_v3v3(mi1->rigidbody->pos, mi2->rigidbody->pos) < dist_sq;
+ bool same_island = mi1->constraint_index == mi2->constraint_index;
+ bool same_near_self = same_island && fmd->use_self_collision && is_near;
+ bool diff_clust_near_self = mi1->particle_index != mi2->particle_index && fmd->use_self_collision && is_near;
+ bool regular_case = mi1 && mi2 && !fmd->use_constraint_collision && !same_island;
- if (mi1->rigidbody->physics_shape)
+ if (fmd->use_self_collision)
{
- RB_shape_set_margin(mi1->rigidbody->physics_shape, is_near ? 0.0f : RBO_GET_MARGIN(mi1->rigidbody));
- }
+ if (mi1->rigidbody->physics_shape)
+ {
+ RB_shape_set_margin(mi1->rigidbody->physics_shape, is_near ? 0.0f : RBO_GET_MARGIN(mi1->rigidbody));
+ }
- if (mi2->rigidbody->physics_shape)
- {
- RB_shape_set_margin(mi2->rigidbody->physics_shape, is_near ? 0.0f : RBO_GET_MARGIN(mi2->rigidbody));
+ if (mi2->rigidbody->physics_shape)
+ {
+ RB_shape_set_margin(mi2->rigidbody->physics_shape, is_near ? 0.0f : RBO_GET_MARGIN(mi2->rigidbody));
+ }
}
- return (((mi1->constraint_index != mi2->constraint_index) ||
- ((mi1->constraint_index == mi2->constraint_index) &&
- (mi1->particle_index != mi2->particle_index))) &&
- (fmd->use_self_collision && is_near));
+ //collide if: same island and near, different cluster if clustered and same island and near
+
+ return regular_case || same_near_self || diff_clust_near_self;
+
}
return true;
More information about the Bf-blender-cvs
mailing list