diff options
author | bjornmose <bjornmose@gmx.net> | 2018-01-10 03:51:04 +0300 |
---|---|---|
committer | bjornmose <bjornmose@gmx.net> | 2018-01-10 03:51:04 +0300 |
commit | 9aada45e52e88d272c38dc2e47cbc9a6d3d35698 (patch) | |
tree | 418398e0456a83d0fe8684be2f3a7890fbc1765b /source/blender/blenkernel/intern/softbody.c | |
parent | 0f6ed7d1112dcb1610f419b24651840640f1a68b (diff) |
fix t53701 minimal changes to get it working right
Diffstat (limited to 'source/blender/blenkernel/intern/softbody.c')
-rw-r--r-- | source/blender/blenkernel/intern/softbody.c | 10 |
1 files changed, 2 insertions, 8 deletions
diff --git a/source/blender/blenkernel/intern/softbody.c b/source/blender/blenkernel/intern/softbody.c index 3052a708137..563148992d9 100644 --- a/source/blender/blenkernel/intern/softbody.c +++ b/source/blender/blenkernel/intern/softbody.c @@ -2013,7 +2013,8 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo float compare; float bstune = sb->ballstiff; - for (c=sb->totpoint, obp= sb->bpoint; c>=ifirst+bb; c--, obp++) { + /* running in a slice we must not assume anything done with obp neither alter the data of obp */ + for (c=sb->totpoint, obp= sb->bpoint; c>0; c--, obp++) { compare = (obp->colball + bp->colball); sub_v3_v3v3(def, bp->pos, obp->pos); /* rather check the AABBoxes before ever calulating the real distance */ @@ -2038,13 +2039,6 @@ static int _softbody_calc_forces_slice_in_a_thread(Scene *scene, Object *ob, flo madd_v3_v3fl(bp->force, def, f * (1.0f - sb->balldamp)); madd_v3_v3fl(bp->force, dvel, sb->balldamp); - - /* exploit force(a, b) == -force(b, a) part2/2 */ - sub_v3_v3v3(dvel, velcenter, obp->vec); - mul_v3_fl(dvel, _final_mass(ob, bp)); - - madd_v3_v3fl(obp->force, dvel, sb->balldamp); - madd_v3_v3fl(obp->force, def, -f * (1.0f - sb->balldamp)); } } } |