[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [13383] branches/cloth/blender: svn merge -r 13357:13382 https://svn.blender.org/svnroot/bf-blender/trunk/ blender
Daniel Genrich
daniel.genrich at gmx.net
Thu Jan 24 11:53:16 CET 2008
Revision: 13383
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=13383
Author: genscher
Date: 2008-01-24 11:53:16 +0100 (Thu, 24 Jan 2008)
Log Message:
-----------
svn merge -r 13357:13382 https://svn.blender.org/svnroot/bf-blender/trunk/blender
Modified Paths:
--------------
branches/cloth/blender/SConstruct
branches/cloth/blender/source/blender/blenkernel/intern/constraint.c
branches/cloth/blender/source/blender/blenkernel/intern/modifier.c
branches/cloth/blender/source/blender/blenkernel/intern/particle.c
branches/cloth/blender/source/blender/blenkernel/intern/particle_system.c
branches/cloth/blender/source/blender/makesdna/DNA_userdef_types.h
branches/cloth/blender/source/blender/python/api2_2x/IDProp.c
branches/cloth/blender/source/blender/python/api2_2x/doc/Scene.py
branches/cloth/blender/source/blender/python/api2_2x/sceneRender.c
branches/cloth/blender/source/blender/radiosity/intern/source/radrender.c
branches/cloth/blender/source/blender/render/intern/include/render_types.h
branches/cloth/blender/source/blender/render/intern/include/rendercore.h
branches/cloth/blender/source/blender/render/intern/include/renderdatabase.h
branches/cloth/blender/source/blender/render/intern/include/zbuf.h
branches/cloth/blender/source/blender/render/intern/source/convertblender.c
branches/cloth/blender/source/blender/render/intern/source/envmap.c
branches/cloth/blender/source/blender/render/intern/source/rayshade.c
branches/cloth/blender/source/blender/render/intern/source/rendercore.c
branches/cloth/blender/source/blender/render/intern/source/renderdatabase.c
branches/cloth/blender/source/blender/render/intern/source/shadbuf.c
branches/cloth/blender/source/blender/render/intern/source/shadeoutput.c
branches/cloth/blender/source/blender/render/intern/source/strand.c
branches/cloth/blender/source/blender/render/intern/source/zbuf.c
branches/cloth/blender/source/blender/src/buttons_editing.c
branches/cloth/blender/source/blender/src/buttons_object.c
branches/cloth/blender/source/blender/src/drawarmature.c
branches/cloth/blender/source/blender/src/drawview.c
branches/cloth/blender/source/blender/src/editaction.c
branches/cloth/blender/source/blender/src/editipo.c
branches/cloth/blender/source/blender/src/resources.c
branches/cloth/blender/source/blender/src/space.c
branches/cloth/blender/source/blender/src/transform_conversions.c
Modified: branches/cloth/blender/SConstruct
===================================================================
--- branches/cloth/blender/SConstruct 2008-01-24 10:44:21 UTC (rev 13382)
+++ branches/cloth/blender/SConstruct 2008-01-24 10:53:16 UTC (rev 13383)
@@ -413,7 +413,7 @@
'${LCGDIR}/zlib/lib/zlib.dll',
'${LCGDIR}/tiff/lib/libtiff.dll']
if env['BF_DEBUG']:
- dllsources.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}.dll')
+ dllsources.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}_d.dll')
else:
dllsources.append('${LCGDIR}/python/lib/${BF_PYTHON_LIB}.dll')
if env['OURPLATFORM'] == 'win32-mingw':
Modified: branches/cloth/blender/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/intern/constraint.c 2008-01-24 10:44:21 UTC (rev 13382)
+++ branches/cloth/blender/source/blender/blenkernel/intern/constraint.c 2008-01-24 10:53:16 UTC (rev 13383)
@@ -295,7 +295,7 @@
/* calculate delta of constraints evaluation */
Mat4Invert(imat, cob->startmat);
- Mat4MulMat4(delta, cob->matrix, imat);
+ Mat4MulMat4(delta, imat, cob->matrix);
/* copy matrices back to source */
switch (cob->type) {
Modified: branches/cloth/blender/source/blender/blenkernel/intern/modifier.c
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/intern/modifier.c 2008-01-24 10:44:21 UTC (rev 13382)
+++ branches/cloth/blender/source/blender/blenkernel/intern/modifier.c 2008-01-24 10:53:16 UTC (rev 13383)
@@ -5513,7 +5513,7 @@
MVert *mvert, *orig_mvert;
int i,totvert, totpart=0, totface, maxvert, maxface, first_particle=0;
short track=ob->trackflag%3, trackneg;
- float max_co=0.0, min_co=0.0, temp_co[3];
+ float max_co=0.0, min_co=0.0, temp_co[3], cross[3];
trackneg=((ob->trackflag>2)?1:0);
@@ -5592,16 +5592,30 @@
if(trackneg)
state.time=1.0f-state.time;
psys_get_particle_on_path(pimd->ob,psys,first_particle + i/totvert,&state,1);
+
+ mv->co[0] = 0.0;
+
+ Normalize(state.vel);
+
+ if(state.vel[0] < -0.9999 || state.vel[0] > 0.9999) {
+ state.rot[0] = 1.0;
+ state.rot[1] = state.rot[2] = state.rot[3] = 0.0f;
+ }
+ else {
+ /* a cross product of state.vel and a unit vector in x-direction */
+ cross[0] = 0.0f;
+ cross[1] = -state.vel[2];
+ cross[2] = state.vel[1];
+
+ /* state.vel[0] is the only component surviving from a dot product with a vector in x-direction*/
+ VecRotToQuat(cross,saacos(state.vel[0]),state.rot);
+ }
}
else{
state.time=-1.0;
psys_get_particle_state(pimd->ob,psys,i/totvert,&state,1);
- }
+ }
- /*displace vertice to path location*/
- if(pimd->flag & eParticleInstanceFlag_Path)
- mv->co[0]=0.0;
-
QuatMulVecf(state.rot,mv->co);
VECADD(mv->co,mv->co,state.co);
}
Modified: branches/cloth/blender/source/blender/blenkernel/intern/particle.c
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/intern/particle.c 2008-01-24 10:44:21 UTC (rev 13382)
+++ branches/cloth/blender/source/blender/blenkernel/intern/particle.c 2008-01-24 10:53:16 UTC (rev 13383)
@@ -776,7 +776,7 @@
vec[1]= weights[0]*v1[1] + weights[1]*v2[1] + weights[2]*v3[1] + weights[3]*v4[1];
vec[2]= weights[0]*v1[2] + weights[1]*v2[2] + weights[2]*v3[2] + weights[3]*v4[2];
}
-static void interpolate_particle(short type, ParticleKey keys[4], float dt, ParticleKey *result)
+static void interpolate_particle(short type, ParticleKey keys[4], float dt, ParticleKey *result, int velocity)
{
float t[4];
@@ -788,18 +788,20 @@
weighted_particle_vector(keys[0].co, keys[1].co, keys[2].co, keys[3].co, t, result->co);
- //if(ve){
- // if(dt>0.999f){
- // set_four_ipo(dt+0.001f,t,ipo_type);
- // weighted_particle_vector(key0->co,key1->co,key2->co,key3->co,t,temp);
- // VECSUB(ve,temp,co);
- // }
- // else{
- // set_four_ipo(dt-0.001f,t,ipo_type);
- // weighted_particle_vector(key0->co,key1->co,key2->co,key3->co,t,temp);
- // VECSUB(ve,co,temp);
- // }
- //}
+ if(velocity){
+ float temp[3];
+
+ if(dt>0.999f){
+ set_four_ipo(dt-0.001f, t, type);
+ weighted_particle_vector(keys[0].co, keys[1].co, keys[2].co, keys[3].co, t, temp);
+ VECSUB(result->vel, result->co, temp);
+ }
+ else{
+ set_four_ipo(dt+0.001f, t, type);
+ weighted_particle_vector(keys[0].co, keys[1].co, keys[2].co, keys[3].co, t, temp);
+ VECSUB(result->vel, temp, result->co);
+ }
+ }
}
}
@@ -2426,7 +2428,7 @@
/* now we should have in chronologiacl order k1<=k2<=t<=k3<=k4 with keytime between [0,1]->[k2,k3] (k1 & k4 used for cardinal & bspline interpolation)*/
interpolate_particle((psys->flag & PSYS_KEYED) ? -1 /* signal for cubic interpolation */
: ((psys->part->flag & PART_HAIR_BSPLINE) ? KEY_BSPLINE : KEY_CARDINAL)
- ,keys, keytime, &result);
+ ,keys, keytime, &result, 0);
/* the velocity needs to be converted back from cubic interpolation */
if(psys->flag & PSYS_KEYED){
@@ -3371,7 +3373,7 @@
interpolate_particle((psys->flag & PSYS_KEYED) ? -1 /* signal for cubic interpolation */
: ((psys->part->flag & PART_HAIR_BSPLINE) ? KEY_BSPLINE : KEY_CARDINAL)
- ,keys, keytime, state);
+ ,keys, keytime, state, 1);
/* the velocity needs to be converted back from cubic interpolation */
if(psys->flag & PSYS_KEYED){
@@ -3381,6 +3383,7 @@
if((pa->flag & PARS_REKEY)==0) {
psys_mat_hair_to_global(ob, psmd->dm, part->from, pa, hairmat);
Mat4MulVecfl(hairmat, state->co);
+ Mat4Mul3Vecfl(hairmat, state->vel);
if(psys->effectors.first && (part->flag & PART_CHILD_GUIDE)==0) {
do_guide(state, p, state->time, &psys->effectors);
Modified: branches/cloth/blender/source/blender/blenkernel/intern/particle_system.c
===================================================================
--- branches/cloth/blender/source/blender/blenkernel/intern/particle_system.c 2008-01-24 10:44:21 UTC (rev 13382)
+++ branches/cloth/blender/source/blender/blenkernel/intern/particle_system.c 2008-01-24 10:53:16 UTC (rev 13383)
@@ -2058,47 +2058,35 @@
/************************************************/
/* Effectors */
/************************************************/
-static float particle_falloff(PartDeflect *pd, float fac)
+static float falloff_func(float fac, int usemin, float mindist, int usemax, float maxdist, float power)
{
- float mindist= (pd->flag & PFIELD_USEMIN)? pd->mindist: 0.0f;
+ if(!usemin)
+ mindist= 0.0f;
-#if 0
- if(distance<=mindist) fallof= 1.0f;
- else if(pd->flag & PFIELD_USEMAX) {
- if(distance>pd->maxdist || mindist>=pd->maxdist) fallof= 0.0f;
- else {
- fallof= 1.0f - (distance-mindist)/(pd->maxdist - mindist);
- if(ffall_val!=0.0f)
- fallof = (float)pow(fallof, ffall_val+1.0);
- }
- }
- else {
- fallof= 1.0f/(1.0f + distance-mindist);
- if(ffall_val!=0.0f)
- fallof = (float)pow(fallof, ffall_val+1.0);
- }
-
- fac=VecLength(vec_to_part);
-#endif
-
if(fac < mindist) {
return 1.0f;
}
- else if(pd->flag & PFIELD_USEMAX) {
- if(fac>pd->maxdist || (pd->maxdist-mindist)<=0.0f)
+ else if(usemax) {
+ if(fac>maxdist || (maxdist-mindist)<=0.0f)
return 0.0f;
- fac= 1.0f - (fac-mindist)/(pd->maxdist-mindist);
- printf("fac %f^%f\n", fac, pd->f_power);
- return (float)pow((double)fac, (double)pd->f_power);
+ fac= (fac-mindist)/(maxdist-mindist);
+ return 1.0f - (float)pow((double)fac, (double)power);
}
- else {
- fac+=1.0f-pd->mindist;
+ else
+ return pow((double)1.0f+fac-mindist, (double)-power);
+}
- return (float)pow((double)fac,(double)-pd->f_power);
- }
+static float falloff_func_dist(PartDeflect *pd, float fac)
+{
+ return falloff_func(fac, pd->flag&PFIELD_USEMIN, pd->mindist, pd->flag&PFIELD_USEMAX, pd->maxdist, pd->f_power);
}
+static float falloff_func_rad(PartDeflect *pd, float fac)
+{
+ return falloff_func(fac, pd->flag&PFIELD_USEMINR, pd->minrad, pd->flag&PFIELD_USEMAXR, pd->maxrad, pd->f_power_r);
+}
+
static float effector_falloff(PartDeflect *pd, float *eff_velocity, float *vec_to_part)
{
float eff_dir[3], temp[3];
@@ -2112,96 +2100,28 @@
else switch(pd->falloff){
case PFIELD_FALL_SPHERE:
fac=VecLength(vec_to_part);
- falloff= particle_falloff(pd, fac);
-#if 0
- if(pd->flag&PFIELD_USEMAX && fac>pd->maxdist){
- falloff=0.0f;
- break;
- }
-
- if(pd->flag & PFIELD_USEMIN){
- if(fac>pd->mindist)
- fac+=1.0f-pd->mindist;
- else
- fac=1.0f;
- }
- else if(fac<0.001)
- fac=0.001f;
-
- falloff=1.0f/(float)pow((double)fac,(double)pd->f_power);
-#endif
+ falloff= falloff_func_dist(pd, fac);
break;
case PFIELD_FALL_TUBE:
fac=Inpf(vec_to_part,eff_dir);
- if(pd->flag&PFIELD_USEMAX && ABS(fac)>pd->maxdist){
- falloff=0.0f;
+ falloff= falloff_func_dist(pd, ABS(fac));
+ if(falloff == 0.0f)
break;
- }
VECADDFAC(temp,vec_to_part,eff_dir,-fac);
r_fac=VecLength(temp);
- if(pd->flag&PFIELD_USEMAXR && r_fac>pd->maxrad){
- falloff=0.0f;
- break;
- }
-
- fac=ABS(fac);
-
-
- if(pd->flag & PFIELD_USEMIN){
- if(fac>pd->mindist)
- fac+=1.0f-pd->mindist;
- else
- fac=1.0f;
- }
- else if(fac<0.001)
- fac=0.001f;
-
- if(pd->flag & PFIELD_USEMINR){
- if(r_fac>pd->minrad)
- r_fac+=1.0f-pd->minrad;
- else
- r_fac=1.0f;
- }
- else if(r_fac<0.001)
- r_fac=0.001f;
-
- falloff=1.0f/((float)pow((double)fac,(double)pd->f_power)*(float)pow((double)r_fac,(double)pd->f_power_r));
-
+ falloff*= falloff_func_rad(pd, r_fac);
break;
case PFIELD_FALL_CONE:
fac=Inpf(vec_to_part,eff_dir);
- if(pd->flag&PFIELD_USEMAX && ABS(fac)>pd->maxdist){
- falloff=0.0f;
+ falloff= falloff_func_dist(pd, ABS(fac));
+ if(falloff == 0.0f)
break;
- }
+
r_fac=saacos(fac/VecLength(vec_to_part))*180.0f/(float)M_PI;
- if(pd->flag&PFIELD_USEMAXR && r_fac>pd->maxrad){
- falloff=0.0f;
- break;
- }
+ falloff*= falloff_func_rad(pd, r_fac);
- if(pd->flag & PFIELD_USEMIN){
- if(fac>pd->mindist)
- fac+=1.0f-pd->mindist;
- else
- fac=1.0f;
- }
- else if(fac<0.001)
- fac=0.001f;
-
- if(pd->flag & PFIELD_USEMINR){
- if(r_fac>pd->minrad)
- r_fac+=1.0f-pd->minrad;
- else
- r_fac=1.0f;
- }
- else if(r_fac<0.001)
- r_fac=0.001f;
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list