[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