forked from bartvdbraak/blender
Cleanup, removed unused old code.
This commit is contained in:
parent
d91a4cd1a1
commit
da01c884e5
@ -278,12 +278,12 @@ struct Implicit_Data {
|
|||||||
|
|
||||||
/* inputs */
|
/* inputs */
|
||||||
lMatrix M; /* masses */
|
lMatrix M; /* masses */
|
||||||
|
lVector F; /* forces */
|
||||||
lMatrix dFdV, dFdX; /* force jacobians */
|
lMatrix dFdV, dFdX; /* force jacobians */
|
||||||
|
|
||||||
/* motion state data */
|
/* motion state data */
|
||||||
lVector X, Xnew; /* positions */
|
lVector X, Xnew; /* positions */
|
||||||
lVector V, Vnew; /* velocities */
|
lVector V, Vnew; /* velocities */
|
||||||
lVector F; /* forces */
|
|
||||||
|
|
||||||
/* internal solver data */
|
/* internal solver data */
|
||||||
lVector B; /* B for A*dV = B */
|
lVector B; /* B for A*dV = B */
|
||||||
@ -632,6 +632,8 @@ static void cloth_calc_force(ClothModifierData *clmd, lVector &F, lMatrix &dFdX,
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
// hair_volume_forces(clmd, lF, lX, lV, numverts);
|
||||||
|
|
||||||
#ifdef CLOTH_FORCE_EFFECTORS
|
#ifdef CLOTH_FORCE_EFFECTORS
|
||||||
/* handle external forces like wind */
|
/* handle external forces like wind */
|
||||||
if (effectors) {
|
if (effectors) {
|
||||||
@ -719,132 +721,6 @@ static void cloth_calc_force(ClothModifierData *clmd, lVector &F, lMatrix &dFdX,
|
|||||||
|
|
||||||
lMatrix_add_triplets(dFdV, tlist_dFdV);
|
lMatrix_add_triplets(dFdV, tlist_dFdV);
|
||||||
lMatrix_add_triplets(dFdX, tlist_dFdX);
|
lMatrix_add_triplets(dFdX, tlist_dFdX);
|
||||||
|
|
||||||
#if 0
|
|
||||||
/* Collect forces and derivatives: F, dFdX, dFdV */
|
|
||||||
Cloth *cloth = clmd->clothObject;
|
|
||||||
unsigned int i = 0;
|
|
||||||
float spring_air = clmd->sim_parms->Cvi * 0.01f; /* viscosity of air scaled in percent */
|
|
||||||
float gravity[3] = {0.0f, 0.0f, 0.0f};
|
|
||||||
float tm2[3][3] = {{0}};
|
|
||||||
MFace *mfaces = cloth->mfaces;
|
|
||||||
unsigned int numverts = cloth->numverts;
|
|
||||||
LinkNode *search;
|
|
||||||
lfVector *winvec;
|
|
||||||
EffectedPoint epoint;
|
|
||||||
|
|
||||||
tm2[0][0] = tm2[1][1] = tm2[2][2] = -spring_air;
|
|
||||||
|
|
||||||
/* global acceleration (gravitation) */
|
|
||||||
if (clmd->scene->physics_settings.flag & PHYS_GLOBAL_GRAVITY) {
|
|
||||||
copy_v3_v3(gravity, clmd->scene->physics_settings.gravity);
|
|
||||||
mul_fvector_S(gravity, gravity, 0.001f * clmd->sim_parms->effector_weights->global_gravity); /* scale gravity force */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* set dFdX jacobi matrix to zero */
|
|
||||||
init_bfmatrix(dFdX, ZERO);
|
|
||||||
/* set dFdX jacobi matrix diagonal entries to -spring_air */
|
|
||||||
initdiag_bfmatrix(dFdV, tm2);
|
|
||||||
|
|
||||||
init_lfvector(lF, gravity, numverts);
|
|
||||||
|
|
||||||
hair_volume_forces(clmd, lF, lX, lV, numverts);
|
|
||||||
|
|
||||||
/* multiply lF with mass matrix
|
|
||||||
* force = mass * acceleration (in this case: gravity)
|
|
||||||
*/
|
|
||||||
for (i = 0; i < numverts; i++) {
|
|
||||||
float temp[3];
|
|
||||||
copy_v3_v3(temp, lF[i]);
|
|
||||||
mul_fmatrix_fvector(lF[i], M[i].m, temp);
|
|
||||||
}
|
|
||||||
|
|
||||||
submul_lfvectorS(lF, lV, spring_air, numverts);
|
|
||||||
|
|
||||||
/* handle external forces like wind */
|
|
||||||
if (effectors) {
|
|
||||||
// 0 = force, 1 = normalized force
|
|
||||||
winvec = create_lfvector(cloth->numverts);
|
|
||||||
|
|
||||||
if (!winvec)
|
|
||||||
printf("winvec: out of memory in implicit.c\n");
|
|
||||||
|
|
||||||
// precalculate wind forces
|
|
||||||
for (i = 0; i < cloth->numverts; i++) {
|
|
||||||
pd_point_from_loc(clmd->scene, (float*)lX[i], (float*)lV[i], i, &epoint);
|
|
||||||
pdDoEffectors(effectors, NULL, clmd->sim_parms->effector_weights, &epoint, winvec[i], NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < cloth->numfaces; i++) {
|
|
||||||
float trinormal[3] = {0, 0, 0}; // normalized triangle normal
|
|
||||||
float triunnormal[3] = {0, 0, 0}; // not-normalized-triangle normal
|
|
||||||
float tmp[3] = {0, 0, 0};
|
|
||||||
float factor = (mfaces[i].v4) ? 0.25 : 1.0 / 3.0;
|
|
||||||
factor *= 0.02f;
|
|
||||||
|
|
||||||
// calculate face normal
|
|
||||||
if (mfaces[i].v4)
|
|
||||||
CalcFloat4(lX[mfaces[i].v1], lX[mfaces[i].v2], lX[mfaces[i].v3], lX[mfaces[i].v4], triunnormal);
|
|
||||||
else
|
|
||||||
CalcFloat(lX[mfaces[i].v1], lX[mfaces[i].v2], lX[mfaces[i].v3], triunnormal);
|
|
||||||
|
|
||||||
normalize_v3_v3(trinormal, triunnormal);
|
|
||||||
|
|
||||||
// add wind from v1
|
|
||||||
copy_v3_v3(tmp, trinormal);
|
|
||||||
mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v1], triunnormal));
|
|
||||||
VECADDS(lF[mfaces[i].v1], lF[mfaces[i].v1], tmp, factor);
|
|
||||||
|
|
||||||
// add wind from v2
|
|
||||||
copy_v3_v3(tmp, trinormal);
|
|
||||||
mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v2], triunnormal));
|
|
||||||
VECADDS(lF[mfaces[i].v2], lF[mfaces[i].v2], tmp, factor);
|
|
||||||
|
|
||||||
// add wind from v3
|
|
||||||
copy_v3_v3(tmp, trinormal);
|
|
||||||
mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v3], triunnormal));
|
|
||||||
VECADDS(lF[mfaces[i].v3], lF[mfaces[i].v3], tmp, factor);
|
|
||||||
|
|
||||||
// add wind from v4
|
|
||||||
if (mfaces[i].v4) {
|
|
||||||
copy_v3_v3(tmp, trinormal);
|
|
||||||
mul_v3_fl(tmp, calculateVertexWindForce(winvec[mfaces[i].v4], triunnormal));
|
|
||||||
VECADDS(lF[mfaces[i].v4], lF[mfaces[i].v4], tmp, factor);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Hair has only edges */
|
|
||||||
if (cloth->numfaces == 0) {
|
|
||||||
ClothSpring *spring;
|
|
||||||
float edgevec[3] = {0, 0, 0}; //edge vector
|
|
||||||
float edgeunnormal[3] = {0, 0, 0}; // not-normalized-edge normal
|
|
||||||
float tmp[3] = {0, 0, 0};
|
|
||||||
float factor = 0.01;
|
|
||||||
|
|
||||||
search = cloth->springs;
|
|
||||||
while (search) {
|
|
||||||
spring = search->link;
|
|
||||||
|
|
||||||
if (spring->type == CLOTH_SPRING_TYPE_STRUCTURAL) {
|
|
||||||
sub_v3_v3v3(edgevec, (float*)lX[spring->ij], (float*)lX[spring->kl]);
|
|
||||||
|
|
||||||
project_v3_v3v3(tmp, winvec[spring->ij], edgevec);
|
|
||||||
sub_v3_v3v3(edgeunnormal, winvec[spring->ij], tmp);
|
|
||||||
/* hair doesn't stretch too much so we can use restlen pretty safely */
|
|
||||||
VECADDS(lF[spring->ij], lF[spring->ij], edgeunnormal, spring->restlen * factor);
|
|
||||||
|
|
||||||
project_v3_v3v3(tmp, winvec[spring->kl], edgevec);
|
|
||||||
sub_v3_v3v3(edgeunnormal, winvec[spring->kl], tmp);
|
|
||||||
VECADDS(lF[spring->kl], lF[spring->kl], edgeunnormal, spring->restlen * factor);
|
|
||||||
}
|
|
||||||
|
|
||||||
search = search->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
del_lfvector(winvec);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Init constraint matrix
|
/* Init constraint matrix
|
||||||
|
Loading…
Reference in New Issue
Block a user