[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