[Bf-blender-cvs] [e8c6f05eba1] fracture_modifier: fix attempt for acceleration map... still issues
Martin Felke
noreply at git.blender.org
Thu Dec 28 00:18:06 CET 2017
Commit: e8c6f05eba1aeb6445d69e0c68f52ad2e5e2dddf
Author: Martin Felke
Date: Thu Dec 28 00:17:45 2017 +0100
Branches: fracture_modifier
https://developer.blender.org/rBe8c6f05eba1aeb6445d69e0c68f52ad2e5e2dddf
fix attempt for acceleration map... still issues
===================================================================
M source/blender/blenkernel/intern/rigidbody.c
===================================================================
diff --git a/source/blender/blenkernel/intern/rigidbody.c b/source/blender/blenkernel/intern/rigidbody.c
index 0026ad9f809..30714a2e4b8 100644
--- a/source/blender/blenkernel/intern/rigidbody.c
+++ b/source/blender/blenkernel/intern/rigidbody.c
@@ -2975,11 +2975,12 @@ void BKE_rigidbody_update_cell(struct MeshIsland *mi, Object *ob, float loc[3],
n = frame - mi->start_frame + 1;
x = frame - mi->start_frame;
- if (mi->locs == NULL || mi->rots == NULL)
+ if (mi->locs == NULL || mi->rots == NULL || mi->acc_sequence == NULL)
{
float loca[3], rota[4], quat[4];
mi->locs = MEM_mallocN(sizeof(float)*3, "mi->locs");
mi->rots = MEM_mallocN(sizeof(float)*4, "mi->rots");
+ mi->acc_sequence = MEM_callocN(sizeof(float), "mi->acc_sequence");
mi->frame_count = 0;
copy_v3_v3(loca, mi->centroid);
@@ -2999,16 +3000,12 @@ void BKE_rigidbody_update_cell(struct MeshIsland *mi, Object *ob, float loc[3],
mi->rots[3] = rota[3];
}
- if (mi->acc_sequence == NULL)
- {
- mi->acc_sequence = MEM_callocN(sizeof(float), "mi->acc_sequence");
- }
-
if (n > mi->frame_count) {
mi->locs = MEM_reallocN(mi->locs, sizeof(float) * 3 * n);
mi->rots = MEM_reallocN(mi->rots, sizeof(float) * 4 * n);
- mi->acc_sequence = MEM_reallocN(mi->acc_sequence, sizeof(float) * (n+1));
- mi->acc_sequence[n] = 0.0f;
+ mi->acc_sequence = MEM_reallocN(mi->acc_sequence, sizeof(float) * n);
+ //mi->acc_sequence[n] = 0.0f;
+ mi->acc_sequence[x] = 0.0f;
mi->locs[x*3] = loc[0];
mi->locs[x*3+1] = loc[1];
@@ -3021,7 +3018,7 @@ void BKE_rigidbody_update_cell(struct MeshIsland *mi, Object *ob, float loc[3],
mi->frame_count = n;
}
- updateAccelerationMap(rmd, mi, ob, NULL, frame, rbw);
+ updateAccelerationMap(rmd, mi, ob, NULL, rbw->ltime, rbw);
}
for (j = 0; j < mi->vertex_count; j++) {
@@ -4398,25 +4395,20 @@ static void updateAccelerationMap(FractureModifierData *fmd, MeshIsland* mi, Obj
force = cp->contact_force;
if ((force > fmd->min_acceleration && force < fmd->max_acceleration))
{
- if (force > mi->acc_sequence[ctime - mi->start_frame])
+ if (force > mi->acc_sequence[ctime - mi->start_frame + 1])
{
- mi->acc_sequence[ctime - mi->start_frame] = force;
+ mi->acc_sequence[ctime - mi->start_frame + 1] = force;
}
}
}
- else if (mi->acc_sequence)
+
+ if (mi->acc_sequence)
{
- float lastforce = 0.0f;
- force = mi->acc_sequence[ctime - mi->start_frame];
- if (ctime > mi->start_frame + 1)
- {
- lastforce = mi->acc_sequence[ctime - mi->start_frame - 1];
- }
+ force = mi->acc_sequence[ctime - mi->start_frame + 1];
+ weight = (force - fmd->min_acceleration) / denom;
- if (force >= lastforce)
- {
- weight = (force - fmd->min_acceleration) / denom;
- }
+ if (ctime == mi->start_frame)
+ weight = 0.0f;
for (i = 0; i < mi->vertex_count; i++)
{
@@ -4430,15 +4422,12 @@ static void updateAccelerationMap(FractureModifierData *fmd, MeshIsland* mi, Obj
{
if (dw->def_nr == acc_defgrp_index) {
- if (force > lastforce && weight >= 0.0f && weight <= 1.0f)
- {
+ if (weight >= 0.0f && weight <= 1.0f) {
dw->weight = weight;
}
- else if (ctime == rbw->pointcache->startframe)
- { //reset
- dw->weight = 0.0f;
- }
- else {
+
+ if (!cp)
+ {
dw->weight *= fmd->acceleration_fade;
}
}
@@ -4491,7 +4480,7 @@ static void check_fracture(rbContactPoint* cp, RigidBodyWorld *rbw, Object *obA,
RigidBodyOb *rbo = rbw->cache_index_map[linear_index1];
int id = rbo->meshisland_index;
MeshIsland* mi = findMeshIsland(fmd1, id);
- updateAccelerationMap(fmd1, mi, ob1, cp, rbw->ltime+1, rbw);
+ updateAccelerationMap(fmd1, mi, ob1, cp, rbw->ltime, rbw);
}
if (fmd1 && fmd1->fracture_mode == MOD_FRACTURE_DYNAMIC)
@@ -4553,7 +4542,7 @@ static void check_fracture(rbContactPoint* cp, RigidBodyWorld *rbw, Object *obA,
RigidBodyOb *rbo = rbw->cache_index_map[linear_index2];
int id = rbo->meshisland_index;
MeshIsland* mi = findMeshIsland(fmd2, id);
- updateAccelerationMap(fmd2, mi, ob2, cp, rbw->ltime+1, rbw);
+ updateAccelerationMap(fmd2, mi, ob2, cp, rbw->ltime, rbw);
}
if (fmd2 && fmd2->fracture_mode == MOD_FRACTURE_DYNAMIC)
More information about the Bf-blender-cvs
mailing list