Commit: afc6142b9169e2b530da352458e9f990ceb7820a
Author: Lukas Tönne
Date:   Thu Apr 30 12:14:51 2015 +0200
Branches: alembic
https://developer.blender.org/rBafc6142b9169e2b530da352458e9f990ceb7820a

Fix for deflector force fields in cache simulation.

Make sure forces always push outward when not using "double sided"
deflectors (default).

===================================================================

M       source/blender/blenkernel/BKE_cache_library.h
M       source/blender/blenkernel/intern/cache_library.c
M       source/blender/physics/intern/BPH_mass_spring.cpp

===================================================================

diff --git a/source/blender/blenkernel/BKE_cache_library.h 
b/source/blender/blenkernel/BKE_cache_library.h
index bc48b60..dab8fe9 100644
--- a/source/blender/blenkernel/BKE_cache_library.h
+++ b/source/blender/blenkernel/BKE_cache_library.h
@@ -202,6 +202,7 @@ typedef enum eCacheEffector_Type {
 } eCacheEffector_Type;
 
 typedef struct CacheEffectorPoint {
+       int index;
        float x[3], v[3];
 } CacheEffectorPoint;
 
diff --git a/source/blender/blenkernel/intern/cache_library.c 
b/source/blender/blenkernel/intern/cache_library.c
index fd21635..849e57b 100644
--- a/source/blender/blenkernel/intern/cache_library.c
+++ b/source/blender/blenkernel/intern/cache_library.c
@@ -780,6 +780,7 @@ static bool cache_effector_deflect(CacheEffector *eff, 
CacheEffectorInstance *in
        
        {
                float vec[3], dist;
+               bool inside = false;
                float factor;
                
                sub_v3_v3v3(vec, point->x, nearest.co);
@@ -789,13 +790,17 @@ static bool cache_effector_deflect(CacheEffector *eff, 
CacheEffectorInstance *in
                        /* dm normal also needed in world space */
                        mul_mat3_m4_v3(inst->mat, nearest.no);
                        
-                       if (dot_v3v3(vec, nearest.no) < 0.0f)
+                       if (dot_v3v3(vec, nearest.no) < 0.0f) {
                                dist = -dist;
+                               inside = true;
+                       }
                }
                
                factor = cache_effector_falloff(eff, dist);
                
                mul_v3_v3fl(result->f, vec, eff->strength * factor);
+               if (inside)
+                       negate_v3(result->f);
        }
        
        return true;
diff --git a/source/blender/physics/intern/BPH_mass_spring.cpp 
b/source/blender/physics/intern/BPH_mass_spring.cpp
index 37b1fdc..8a6e8e1 100644
--- a/source/blender/physics/intern/BPH_mass_spring.cpp
+++ b/source/blender/physics/intern/BPH_mass_spring.cpp
@@ -1449,6 +1449,7 @@ static void strands_calc_force(Strands *strands, float 
space[4][4], HairSimParam
                if (cache_effectors && tot_cache_effectors > 0) {
                        for (i = 0; i < numverts; ++i) {
                                CacheEffectorPoint point;
+                               point.index = i;
                                BPH_mass_spring_get_motion_state(data, i, 
point.x, point.v);
                                
                                CacheEffectorResult result;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to