[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [28468] branches/render25/source/blender/ blenkernel/intern: hair collisions are much improved.

Joseph Eagar joeedh at gmail.com
Tue Apr 27 20:21:38 CEST 2010


Revision: 28468
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28468
Author:   joeedh
Date:     2010-04-27 20:21:38 +0200 (Tue, 27 Apr 2010)

Log Message:
-----------
hair collisions are much improved.  and rewrote goal code to not suck.

Modified Paths:
--------------
    branches/render25/source/blender/blenkernel/intern/collision.c
    branches/render25/source/blender/blenkernel/intern/implicit.c

Modified: branches/render25/source/blender/blenkernel/intern/collision.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/collision.c	2010-04-27 17:19:09 UTC (rev 28467)
+++ branches/render25/source/blender/blenkernel/intern/collision.c	2010-04-27 18:21:38 UTC (rev 28468)
@@ -1437,12 +1437,12 @@
 	}
 }
 
-static int cloth_bvh_edge_objcollisions_nearcheck(ClothModifierData *clmd, CollisionModifierData *collmd, int result, BVHTreeOverlap *overlap)
+static int cloth_bvh_edge_objcollisions_nearcheck(ClothModifierData *clmd, CollisionModifierData *collmd, int result, BVHTreeOverlap *overlap, float dt)
 {
 	Cloth *cloth = clmd->clothObject;
 	ClothVertex *cv;
 	float *dis = MEM_callocN(sizeof(float)*cloth->numverts, "coll point distancers");
-	float lambda, lambda2, uv[2], uv2[2], epsilon;
+	float lambda, dot, lambda2, uv[2], uv2[2], epsilon;
 	MFace **frefs = MEM_callocN(sizeof(void*)*clmd->clothObject->numverts, "coll indices");
 	int i, j, ret = 0;
 
@@ -1524,6 +1524,8 @@
 		mul_v3_fl(vec, -1.0f);
 
 		normalize_v3(vec);
+		dot = dot_v3v3(no, vec);
+
 		/*handle friction.  probably really stupid math here, no time for doing better though*/
 		if (isect_ray_tri_v3(cv->tx, vec, v1, v2, v3, &lambda2, uv2) ||
 			(mf->v4 && isect_ray_tri_v3(cv->tx, vec, v1, v3, v4, &lambda2, uv2)))
@@ -1540,11 +1542,10 @@
 		if (lambda < 0.0)
 			lambda = 0.0;
 
-		mul_v3_fl(no, lambda);
-		add_v3_v3(cv->txold, no);
+		mul_v3_fl(no, lambda*dt);
+		add_v3_v3(cv->tx, no);
 
-		mul_v3_fl(cv->tv, lambda);
-		//add_v3_v3(cv->tv, no);
+		sub_v3_v3v3(cv->tv, cv->tx, cv->txold);
 	}
 
 	MEM_freeN(frefs);
@@ -1685,7 +1686,7 @@
 				continue;
 			}
 
-			ret += cloth_bvh_edge_objcollisions_nearcheck ( clmd, collmd, result, overlap);
+			ret += cloth_bvh_edge_objcollisions_nearcheck ( clmd, collmd, result, overlap, dt);
 		}
 		rounds++;
 		

Modified: branches/render25/source/blender/blenkernel/intern/implicit.c
===================================================================
--- branches/render25/source/blender/blenkernel/intern/implicit.c	2010-04-27 17:19:09 UTC (rev 28467)
+++ branches/render25/source/blender/blenkernel/intern/implicit.c	2010-04-27 18:21:38 UTC (rev 28468)
@@ -1910,7 +1910,7 @@
 
 				VECCOPY(id->Xnew[i], verts[i].tx);
 				VECCOPY(id->Vnew[i], verts[i].tv);
-				mul_v3_fl(id->Vnew[i], clmd->sim_parms->stepsPerFrame);
+				mul_v3_fl(id->Vnew[i], ((float)clmd->sim_parms->stepsPerFrame)); // /clmd->sim_parms->timescale);
 			}
 			
 			/* restore original stepsPerFrame */
@@ -1927,7 +1927,7 @@
 			// calculate
 			cloth_calc_force(clmd, frame, id->F, id->X, id->V, id->dFdV, id->dFdX, effectors, step+dt, id->M);
 
-			simulate_implicit_euler(id->Vnew, id->X, id->V, id->F, id->dFdV, id->dFdX, dt / 2.0f, id->A, id->B, id->dV, id->S, id->z, id->olddV, id->P, id->Pinv, id->M, id->bigI);
+			simulate_implicit_euler(id->Vnew, id->X, id->V, id->F, id->dFdV, id->dFdX, dt/2, id->A, id->B, id->dV, id->S, id->z, id->olddV, id->P, id->Pinv, id->M, id->bigI);
 		} else {
 			// X = Xnew;
 			cp_lfvector(id->X, id->Xnew, numverts);





More information about the Bf-blender-cvs mailing list