diff options
author | Ton Roosendaal <ton@blender.org> | 2004-11-07 00:59:35 +0300 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2004-11-07 00:59:35 +0300 |
commit | 02e838c99bd967e17872f048ffa81a6e41c89cb4 (patch) | |
tree | ea1e2611c4389a8d9eaa2ec8128dc2bf9ffc91ba /source/blender/blenkernel/intern/deform.c | |
parent | 6e755e5e98145d175bcbcb800174fb0433b17c43 (diff) |
- Pending Hook work; falloff value for soft hook deformation.
Falloff= distance where influence becomes zero.
Diffstat (limited to 'source/blender/blenkernel/intern/deform.c')
-rw-r--r-- | source/blender/blenkernel/intern/deform.c | 21 |
1 files changed, 15 insertions, 6 deletions
diff --git a/source/blender/blenkernel/intern/deform.c b/source/blender/blenkernel/intern/deform.c index fbf13cba810..bf64c1451aa 100644 --- a/source/blender/blenkernel/intern/deform.c +++ b/source/blender/blenkernel/intern/deform.c @@ -36,6 +36,7 @@ */ #include <string.h> +#include <math.h> #include "MEM_guardedalloc.h" @@ -178,14 +179,21 @@ void hook_object_deform(Object *ob, int index, float *vec) } if( hook->indexar[hook->curindex]==index ) { - float fac= hook->force; - - totforce+= fac; + float fac= hook->force, len; VecMat4MulVecfl(vect, hook->mat, vec); - vectot[0]+= fac*vect[0]; - vectot[1]+= fac*vect[1]; - vectot[2]+= fac*vect[2]; + + if(hook->falloff!=0.0) { + len= VecLenf(vect, hook->parent->obmat[3]); + if(len > hook->falloff) fac= 0.0; + else if(len>0.0) fac*= sqrt(1.0 - len/hook->falloff); + } + if(fac!=0.0) { + totforce+= fac; + vectot[0]+= fac*vect[0]; + vectot[1]+= fac*vect[1]; + vectot[2]+= fac*vect[2]; + } } } } @@ -256,6 +264,7 @@ int mesh_modifier(Object *ob, char mode) float *fp; if(dl->verts) MEM_freeN(dl->verts); + if(dl->nors) MEM_freeN(dl->nors); dl->nr= me->totvert; if(dl->nr) { |