[Bf-blender-cvs] [e52c7c4676a] temp-fracture-modifier-2.8: attempt to add more detail for dynamic fracturing
Martin Felke
noreply at git.blender.org
Mon Dec 3 20:14:56 CET 2018
Commit: e52c7c4676ad87dcbf3c52e9fe04bd2f27d13ea4
Author: Martin Felke
Date: Mon Dec 3 20:14:37 2018 +0100
Branches: temp-fracture-modifier-2.8
https://developer.blender.org/rBe52c7c4676ad87dcbf3c52e9fe04bd2f27d13ea4
attempt to add more detail for dynamic fracturing
===================================================================
M source/blender/blenkernel/intern/fracture_rigidbody.c
M source/blender/depsgraph/intern/builder/deg_builder_relations.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/fracture_rigidbody.c b/source/blender/blenkernel/intern/fracture_rigidbody.c
index b12c2d452fa..f22b113c75b 100644
--- a/source/blender/blenkernel/intern/fracture_rigidbody.c
+++ b/source/blender/blenkernel/intern/fracture_rigidbody.c
@@ -1408,7 +1408,7 @@ static bool check_constraints(FractureModifierData *fmd, Shard *mi, RigidBodyWor
return false;
}
-static void check_fracture_meshisland(FractureModifierData *fmd, Shard *mi, Object* ob1, Object* ob2,
+static void check_fracture_meshisland(FractureModifierData *fmd, Shard *mi, Shard *s, Object* ob1, Object* ob2,
RigidBodyWorld *rbw, float contact_pos[3], float force)
{
bool canbreak = false;
@@ -1423,7 +1423,9 @@ static void check_fracture_meshisland(FractureModifierData *fmd, Shard *mi, Obje
if (canbreak && check_constraints(fmd, mi, rbw))
{
float size[3] = {1.0f, 1.0f, 1.0f};
+ float own_size[3];
+#if 0
if (ob1 == ob2 || (ob2 && ob2->rigidbody_object && ob1->rigidbody_object->type == RBO_TYPE_PASSIVE)) {
//todo calculate shard...
size[0] = size[1] = size[2] = -1.0f;
@@ -1431,6 +1433,26 @@ static void check_fracture_meshisland(FractureModifierData *fmd, Shard *mi, Obje
else if (ob2) {
BKE_object_dimensions_get(ob2, size);
}
+#endif
+
+
+ sub_v3_v3v3(own_size, mi->max, mi->min);
+
+ if (s) {
+ sub_v3_v3v3(size, s->max, s->min);
+ }
+ else if (ob2) {
+ BKE_object_dimensions_get(ob2, size);
+ }
+
+ if (size[0] > own_size[0])
+ size[0] = own_size[0];
+
+ if (size[1] > own_size[1])
+ size[1] = own_size[1];
+
+ if (size[2] > own_size[2])
+ size[2] = own_size[2];
copy_v3_v3(mi->impact_loc, contact_pos);
copy_v3_v3(mi->impact_size, size);
@@ -1478,15 +1500,17 @@ static void check_fracture(rbContactPoint* cp, Scene *scene)
if (fmd1 && (fmd1->flag & MOD_FRACTURE_USE_DYNAMIC))
{
mi1 = (Shard*)cp->contact_islandA;
- check_fracture_meshisland(fmd1, mi1, ob1, ob2, rbw, cp->contact_pos_world_onA, force);
+ mi2 = (Shard*)cp->contact_islandB;
+ check_fracture_meshisland(fmd1, mi1, mi2, ob1, ob2, rbw, cp->contact_pos_world_onA, force);
}
fmd2 = (FractureModifierData*)modifiers_findByType(ob2, eModifierType_Fracture);
if (fmd2 && (fmd2->flag & MOD_FRACTURE_USE_DYNAMIC))
{
mi2 = (Shard*)cp->contact_islandB;
- check_fracture_meshisland(fmd2, mi2, ob2, ob1, rbw, cp->contact_pos_world_onB, force);
- }
+ mi1 = (Shard*)cp->contact_islandA;
+ check_fracture_meshisland(fmd2, mi2, mi1, ob2, ob1, rbw, cp->contact_pos_world_onB, force);
+ }
//free contact point ?
cp = NULL;
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
index 8b3f35f7519..32593d401f9 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_relations.cc
@@ -1649,16 +1649,20 @@ void DepsgraphRelationBuilder::build_rigidbody(Scene *scene)
add_relation(rbo_key, uber_key, "RBO Sync -> Uber (Temp)");
}
- /* Needed to get correct base values. */
- add_relation(trans_op, sim_key, "Base Ob Transform -> Rigidbody Sim Eval");
+ if (!fmd) {
- if (fmd)
+ /* Needed to get correct base values. */
+ add_relation(trans_op, sim_key, "Base Ob Transform -> Rigidbody Sim Eval");
+ }
+#if 0
+ else
{
OperationKey uber_geom_key(&object->id,
DEG_NODE_TYPE_GEOMETRY,
DEG_OPCODE_GEOMETRY_UBEREVAL);
add_relation(rbo_key, uber_geom_key, "RBO Sync -> Uber Geom (Fracture)");
}
+#endif
}
FOREACH_COLLECTION_OBJECT_RECURSIVE_END;
}
More information about the Bf-blender-cvs
mailing list