[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13386] trunk/blender/source/blender:
Brecht Van Lommel
brechtvanlommel at pandora.be
Thu Jan 24 15:16:52 CET 2008
Revision: 13386
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13386
Author: blendix
Date: 2008-01-24 15:16:52 +0100 (Thu, 24 Jan 2008)
Log Message:
-----------
Added an "effector" vertex group for hair, that defines how much
influence effectors have.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/particle.c
trunk/blender/source/blender/blenkernel/intern/particle_system.c
trunk/blender/source/blender/makesdna/DNA_particle_types.h
trunk/blender/source/blender/src/buttons_object.c
Modified: trunk/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle.c 2008-01-24 13:43:12 UTC (rev 13385)
+++ trunk/blender/source/blender/blenkernel/intern/particle.c 2008-01-24 14:16:52 UTC (rev 13386)
@@ -2272,6 +2272,7 @@
float sel_col[3];
float nosel_col[3];
float length, vec[3];
+ float *vg_effector= NULL, effector=0.0f;
/* we don't have anything valid to create paths from so let's quit here */
if((psys->flag & PSYS_HAIR_DONE)==0 && (psys->flag & PSYS_KEYED)==0)
@@ -2320,6 +2321,9 @@
ma= give_current_material(ob, psys->part->omat);
if(ma && (psys->part->draw & PART_DRAW_MAT_COL))
VECCOPY(col, &ma->r)
+
+ if(psys->part->from!=PART_FROM_PARTICLE)
+ vg_effector = psys_cache_vgroup(psmd->dm, psys, PSYS_VG_EFFECTOR);
/*---first main loop: create all actual particles' paths---*/
for(i=0,pa=psys->particles; i<totpart; i++, pa++){
@@ -2456,6 +2460,10 @@
VecSubf(vec,(cache[i]+1)->co,cache[i]->co);
length = VecLength(vec);
+ effector= 1.0f;
+ if(vg_effector)
+ effector*= psys_interpolate_value_from_verts(psmd->dm,psys->part->from,pa->num,pa->fuv,vg_effector);
+
for(k=0, ca=cache[i]; k<=steps; k++, ca++) {
/* apply effectors */
if(edit==0 && k) {
@@ -2468,7 +2476,7 @@
do_effectors(i, pa, &eff_key, ob, psys, force, vel, dfra, cfra);
- VecMulf(force, pow((float)k / (float)steps, 100.0f * psys->part->eff_hair) / (float)steps);
+ VecMulf(force, effector*pow((float)k / (float)steps, 100.0f * psys->part->eff_hair) / (float)steps);
VecAddf(force, force, vec);
@@ -2581,6 +2589,9 @@
end_latt_deform();
psys->lattice=0;
}
+
+ if(vg_effector)
+ MEM_freeN(vg_effector);
}
/************************************************/
/* Particle Key handling */
Modified: trunk/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/particle_system.c 2008-01-24 13:43:12 UTC (rev 13385)
+++ trunk/blender/source/blender/blenkernel/intern/particle_system.c 2008-01-24 14:16:52 UTC (rev 13386)
@@ -2724,7 +2724,8 @@
force[0]=force[1]=force[2]=0.0;
tvel[0]=tvel[1]=tvel[2]=0.0;
/* add effectors */
- do_effectors(pa_no,pa,states+i,ob,psys,force,tvel,dfra,fra);
+ if(part->type != PART_HAIR)
+ do_effectors(pa_no,pa,states+i,ob,psys,force,tvel,dfra,fra);
/* calculate air-particle interaction */
if(part->dragfac!=0.0f){
Modified: trunk/blender/source/blender/makesdna/DNA_particle_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_particle_types.h 2008-01-24 13:43:12 UTC (rev 13385)
+++ trunk/blender/source/blender/makesdna/DNA_particle_types.h 2008-01-24 14:16:52 UTC (rev 13386)
@@ -415,7 +415,7 @@
#define PARS_ALIVE 3
/* psys->vg */
-#define PSYS_TOT_VG 11
+#define PSYS_TOT_VG 12
#define PSYS_VG_DENSITY 0
#define PSYS_VG_VEL 1
@@ -428,6 +428,7 @@
#define PSYS_VG_SIZE 8
#define PSYS_VG_TAN 9
#define PSYS_VG_ROT 10
+#define PSYS_VG_EFFECTOR 11
/* part->boidrules */
#define BOID_TOT_RULES 8
Modified: trunk/blender/source/blender/src/buttons_object.c
===================================================================
--- trunk/blender/source/blender/src/buttons_object.c 2008-01-24 13:43:12 UTC (rev 13385)
+++ trunk/blender/source/blender/src/buttons_object.c 2008-01-24 14:16:52 UTC (rev 13386)
@@ -4028,7 +4028,7 @@
uiBlockBeginAlign(block);
- uiDefButS(block, MENU, B_PART_REDRAW, "Attribute%t|TanRot%x10|TanVel%x9|Size%x8|RoughE%x7|Rough2%x6|Rough1%x5|Kink%x4|Clump%x3|Length%x2|Velocity%x1|Density%x0", butx,(buty-=buth),butw-40,buth, &vgnum, 14.0, 0.0, 0, 0, "Attribute effected by vertex group");
+ uiDefButS(block, MENU, B_PART_REDRAW, "Attribute%t|Effector%x11|TanRot%x10|TanVel%x9|Size%x8|RoughE%x7|Rough2%x6|Rough1%x5|Kink%x4|Clump%x3|Length%x2|Velocity%x1|Density%x0", butx,(buty-=buth),butw-40,buth, &vgnum, 14.0, 0.0, 0, 0, "Attribute effected by vertex group");
but=uiDefButBitS(block, TOG, (1<<vgnum), B_PART_REDRAW, "Neg", butx+butw-40,buty,40,buth, &psys->vg_neg, 0, 0, 0, 0, "Negate the effect of the vertex group");
uiButSetFunc(but, particle_set_vg, (void *)ob, (void *)(&vgnum));
More information about the Bf-blender-cvs
mailing list