[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