Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/blenkernel/intern/effect.c')
-rw-r--r--source/blender/blenkernel/intern/effect.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/effect.c b/source/blender/blenkernel/intern/effect.c
index 0842e55a0ea..327008c60de 100644
--- a/source/blender/blenkernel/intern/effect.c
+++ b/source/blender/blenkernel/intern/effect.c
@@ -267,7 +267,7 @@ static float eff_calc_visibility(Object *ob, float *co, float *dir)
hit.dist = len + FLT_EPSILON;
// check if the way is blocked
- if(BLI_bvhtree_ray_cast(collmd->bvhtree, co, norm, &hit, eff_tri_ray_hit, NULL)>=0)
+ if(BLI_bvhtree_ray_cast(collmd->bvhtree, co, norm, 0.0f, &hit, eff_tri_ray_hit, NULL)>=0)
{
// visibility is only between 0 and 1, calculated from 1-absorption
visibility *= MAX2(0.0, MIN2(1.0, (1.0-((float)collmd->absorption)*0.01)));
@@ -406,12 +406,15 @@ void do_physical_effector(Object *ob, float *opco, short type, float force_val,
else
VecCopyf(mag_vec,vec_to_part);
+ Normalize(mag_vec);
+
VecMulf(mag_vec,force_val*falloff);
VecAddf(field,field,mag_vec);
break;
case PFIELD_VORTEX:
Crossf(mag_vec,eff_vel,vec_to_part);
+
Normalize(mag_vec);
VecMulf(mag_vec,force_val*distance*falloff);
@@ -425,6 +428,8 @@ void do_physical_effector(Object *ob, float *opco, short type, float force_val,
/* magnetic field of a moving charge */
Crossf(temp,eff_vel,vec_to_part);
+ Normalize(temp);
+
Crossf(temp2,velocity,temp);
VecAddf(mag_vec,mag_vec,temp2);
@@ -437,6 +442,8 @@ void do_physical_effector(Object *ob, float *opco, short type, float force_val,
else
VecCopyf(mag_vec,vec_to_part);
+ Normalize(mag_vec);
+
VecMulf(mag_vec,force_val*falloff);
VecSubf(field,field,mag_vec);
@@ -451,6 +458,8 @@ void do_physical_effector(Object *ob, float *opco, short type, float force_val,
else
VecCopyf(mag_vec,vec_to_part);
+ Normalize(mag_vec);
+
VecMulf(mag_vec,charge*force_val*falloff);
VecAddf(field,field,mag_vec);
break;
@@ -535,10 +544,6 @@ void pdDoEffectors(ListBase *lb, float *opco, float *force, float *speed, float
where_is_object_time(ob,cur_time);
/* use center of object for distance calculus */
- obloc= ob->obmat[3];
- VECSUB(vect_to_vert, obloc, opco);
- distance = VecLength(vect_to_vert);
-
VecSubf(vec_to_part, opco, ob->obmat[3]);
distance = VecLength(vec_to_part);