[Bf-blender-cvs] [403b835992] cloth-improvements: Remove unused functions in collision.c
Luca Rood
noreply at git.blender.org
Fri Jan 20 05:38:40 CET 2017
Commit: 403b835992fece83232d3d1b5407cc6baeb3587b
Author: Luca Rood
Date: Thu Jan 19 19:38:55 2017 -0200
Branches: cloth-improvements
https://developer.blender.org/rB403b835992fece83232d3d1b5407cc6baeb3587b
Remove unused functions in collision.c
===================================================================
M source/blender/blenkernel/intern/collision.c
===================================================================
diff --git a/source/blender/blenkernel/intern/collision.c b/source/blender/blenkernel/intern/collision.c
index 5c50c0290d..43efb95500 100644
--- a/source/blender/blenkernel/intern/collision.c
+++ b/source/blender/blenkernel/intern/collision.c
@@ -1213,106 +1213,6 @@ void collision_get_collider_velocity(float vel_old[3], float vel_new[3], Collisi
copy_v3_v3(vel_old, vel_new);
}
-static bool cloth_points_collision_response_static(ClothModifierData *clmd, CollisionModifierData *collmd, PartDeflect *pd,
- CollPair *collpair, CollPair *collision_end, float dt)
-{
- bool result = false;
- float restitution = (1.0f - clmd->coll_parms->damping) * (1.0f - pd->pdef_sbdamp);
- float inv_dt = 1.0f / dt;
- Cloth *cloth1 = clmd->clothObject;
-
- // float w1, w2;
- float u1, u2, u3;
- float v1[3], v2_old[3], v2_new[3], v_rel_old[3], v_rel_new[3];
- float epsilon2 = BLI_bvhtree_get_epsilon ( collmd->bvhtree );
-
- for ( ; collpair != collision_end; collpair++ ) {
- float margin_distance = (float)(collpair->distance - (double)epsilon2);
- float impulse[3];
- float mag_v_rel;
-
- if (margin_distance > 0.0f)
- continue;
-
- zero_v3(impulse);
-
- /* only handle static collisions here */
- if ( collpair->flag & COLLISION_IN_FUTURE )
- continue;
-
- /* compute barycentric coordinates for both collision points */
- // w1 = 1.0f - collpair->time;
- // w2 = collpair->time;
-
- /* was: txold */
- collision_compute_barycentric ( collpair->pb,
- collmd->current_x[collpair->bp1].co,
- collmd->current_x[collpair->bp2].co,
- collmd->current_x[collpair->bp3].co,
- &u1, &u2, &u3 );
-
- /* Calculate relative velocity */
- copy_v3_v3(v1, cloth1->verts[collpair->ap1].tv);
-
- collision_interpolateOnTriangle ( v2_new, collmd->current_v[collpair->bp1].co, collmd->current_v[collpair->bp2].co, collmd->current_v[collpair->bp3].co, u1, u2, u3 );
- /* XXX assume constant velocity of the collider for now */
- copy_v3_v3(v2_old, v2_new);
-
- sub_v3_v3v3(v_rel_old, v1, v2_old);
- sub_v3_v3v3(v_rel_new, v1, v2_new);
-
- /* normal component of the relative velocity */
- mag_v_rel = dot_v3v3(v_rel_old, collpair->normal);
-
- /**** DEBUG ****/
- BKE_sim_debug_data_add_dot(collpair->pa, 0.9, 0.2, 0.2, "collision", 833, collpair->face1, collpair->face2);
- BKE_sim_debug_data_add_dot(collpair->pb, 0.2, 0.9, 0.2, "collision", 834, collpair->face1, collpair->face2);
- BKE_sim_debug_data_add_line(collpair->pa, collpair->pb, 0.8, 0.8, 0.8, "collision", 835, collpair->face1, collpair->face2);
- /********/
-
- if (mag_v_rel < -ALMOST_ZERO) {
- float v_nor_old, v_nor_new;
- float v_tan_old[3], v_tan_new[3];
- float bounce, repulse;
-
- /* Collision response based on
- * "Simulating Complex Hair with Robust Collision Handling" (Choe, Choi, Ko, ACM SIGGRAPH 2005)
- * http://graphics.snu.ac.kr/publications/2005-choe-HairSim/Choe_2005_SCA.pdf
- */
-
- v_nor_old = mag_v_rel;
- v_nor_new = dot_v3v3(v_rel_new, collpair->normal);
-
- madd_v3_v3v3fl(v_tan_old, v_rel_old, collpair->normal, -v_nor_old);
- madd_v3_v3v3fl(v_tan_new, v_rel_new, collpair->normal, -v_nor_new);
-
- repulse = -margin_distance * inv_dt + dot_v3v3(v1, collpair->normal);
-
- if (margin_distance < -epsilon2) {
- bounce = -v_nor_new + v_nor_old * restitution;
- mul_v3_v3fl(impulse, collpair->normal, max_ff(repulse, bounce));
- }
- else {
- bounce = 0.0f;
- mul_v3_v3fl(impulse, collpair->normal, repulse);
- }
- cloth1->verts[collpair->ap1].impulse_count++;
-
- result = true;
- }
-
- if (result) {
- int i = 0;
-
- for (i = 0; i < 3; i++) {
- if (cloth1->verts[collpair->ap1].impulse_count > 0 && fabsf(cloth1->verts[collpair->ap1].impulse[i]) < fabsf(impulse[i]))
- cloth1->verts[collpair->ap1].impulse[i] = impulse[i];
- }
- }
- }
- return result;
-}
-
BLI_INLINE bool cloth_point_face_collision_params(const float p1[3], const float p2[3], const float v0[3], const float v1[3], const float v2[3],
float r_nor[3], float *r_lambda, float r_w[4])
{
@@ -1463,160 +1363,6 @@ static void cloth_points_objcollisions_nearcheck(ClothModifierData * clmd, Colli
}
}
-static int cloth_points_objcollisions_resolve(ClothModifierData * clmd, CollisionModifierData *collmd, PartDeflect *pd,
- CollPair *collisions, CollPair *collisions_index, float dt)
-{
- Cloth *cloth = clmd->clothObject;
- int i = 0, mvert_num = clmd->clothObject->mvert_num;
- ClothVertex *verts = cloth->verts;
- int ret = 0;
-
- // process all collisions
- if ( collmd->bvhtree ) {
- bool result = cloth_points_collision_response_static(clmd, collmd, pd, collisions, collisions_index, dt);
-
- // apply impulses in parallel
- if (result) {
- for (i = 0; i < mvert_num; i++) {
- // calculate "velocities" (just xnew = xold + v; no dt in v)
- if (verts[i].impulse_count) {
- // VECADDMUL ( verts[i].tv, verts[i].impulse, 1.0f / verts[i].impulse_count );
- VECADD ( verts[i].tv, verts[i].tv, verts[i].impulse);
- zero_v3(verts[i].impulse);
- verts[i].impulse_count = 0;
-
- ret++;
- }
- }
- }
- }
-
- return ret;
-}
-
-// cloth - object collisions
-int cloth_points_objcollision(Object *ob, ClothModifierData *clmd, float step, float dt)
-{
- Cloth *cloth= clmd->clothObject;
- BVHTree *cloth_bvh;
- int rounds = 0; // result counts applied collisions; ic is for debug output;
- float round_dt = dt / (float)clmd->coll_parms->loop_count;
- unsigned int i = 0, mvert_num = 0;
- ClothVertex *verts = NULL;
- int ret = 0, ret2 = 0;
- Object **collobjs = NULL;
- unsigned int numcollobj = 0;
-
- verts = cloth->verts;
- mvert_num = cloth->mvert_num;
-
- ////////////////////////////////////////////////////////////
- // static collisions
- ////////////////////////////////////////////////////////////
-
- // create temporary cloth points bvh
- cloth_bvh = BLI_bvhtree_new(mvert_num, max_ff(clmd->coll_parms->epsilon, clmd->coll_parms->distance_repel), 4, 6);
- /* fill tree */
- for (i = 0; i < mvert_num; i++) {
- float co[2][3];
-
- copy_v3_v3(co[0], verts[i].x);
- copy_v3_v3(co[1], verts[i].tx);
-
- BLI_bvhtree_insert(cloth_bvh, i, co[0], 2);
- }
- /* balance tree */
- BLI_bvhtree_balance(cloth_bvh);
-
- collobjs = get_collisionobjects(clmd->scene, ob, clmd->coll_parms->group, &numcollobj, eModifierType_Collision);
- if (!collobjs)
- return 0;
-
- /* move object to position (step) in time */
- for (i = 0; i < numcollobj; i++) {
- Object *collob= collobjs[i];
- CollisionModifierData *collmd = (CollisionModifierData *)modifiers_findByType(collob, eModifierType_Collision);
- if (!collmd->bvhtree)
- continue;
-
- /* move object to position (step) in time */
- collision_move_object ( collmd, step + dt, step );
- }
-
- do {
- CollPair **collisions, **collisions_index;
-
- ret2 = 0;
-
- collisions = MEM_callocN(sizeof(CollPair *) *numcollobj, "CollPair");
- collisions_index = MEM_callocN(sizeof(CollPair *) *numcollobj, "CollPair");
-
- // check all collision objects
- for (i = 0; i < numcollobj; i++) {
- Object *collob= collobjs[i];
- CollisionModifierData *collmd = (CollisionModifierData *)modifiers_findByType(collob, eModifierType_Collision);
- BVHTreeOverlap *overlap = NULL;
- unsigned int result = 0;
- float epsilon;
-
- if (!collmd->bvhtree)
- continue;
-
- /* search for overlapping collision pairs */
- overlap = BLI_bvhtree_overlap(cloth_bvh, collmd->bvhtree, &result, NULL, NULL);
- epsilon = BLI_bvhtree_get_epsilon(collmd->bvhtree);
-
- // go to next object if no overlap is there
- if (result && overlap) {
- /* check if collisions really happen (costly near check) */
- cloth_points_objcollisions_nearcheck(clmd, collmd, &collisions[i], &collisions_index[i],
- result, overlap, epsilon, round_dt);
-
- // resolve nearby collisions
- ret += cloth_points_objcollisions_resolve(clmd, collmd, collob->pd, collisions[i], collisions_index[i], round_dt);
- ret2 += ret;
- }
-
- if (overlap)
- MEM_freeN ( overlap );
- }
- rounds++;
-
- for (i = 0; i < numcollobj; i++) {
- if (collisions[i])
- MEM_freeN(collisions[i]);
- }
-
- MEM_freeN(collisions);
- MEM_freeN(collisions_index);
-
- ////////////////////////////////////////////////////////////
- // update positions
- // this is needed for bvh_calc_DOP_hull_moving() [kdop.c]
- ////////////////////////////////////////////////////////////
-
- // verts come from clmd
- for (i = 0; i < mvert_num; i++) {
- if ( clmd->sim_parms->vgroup_mass>0 ) {
- if ( verts [i].flags & CLOTH_VERT_FLAG_PINNED ) {
- continue;
- }
- }
-
- VECADD ( verts[i].tx, verts[i].txold, verts[i].tv );
- }
- ////////////////////////////////////////////////////////////
- }
- while ( ret2 && ( clmd->coll_parms->loop_count>rounds ) );
-
- if (collobjs)
- MEM_freeN(collobjs);
-
- BLI_bvhtree_free(cloth_bvh);
-
- return 1|MIN2 ( ret, 1 );
-}
-
void cloth_find_point_contacts(Object *ob, ClothModifierData *clmd, float step, float dt,
ColliderContacts **r_collider_contacts, int *r_totcolliders)
{
More information about the Bf-blender-cvs
mailing list