[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36203] branches/hairsim: committing some stuff I've been sitting on

Joseph Eagar joeedh at gmail.com
Mon Apr 18 02:36:49 CEST 2011


Revision: 36203
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36203
Author:   joeedh
Date:     2011-04-18 00:36:48 +0000 (Mon, 18 Apr 2011)
Log Message:
-----------
committing some stuff I've been sitting on

Modified Paths:
--------------
    branches/hairsim/CMakeLists.txt
    branches/hairsim/extern/CMakeLists.txt
    branches/hairsim/extern/cppad/vector.hpp
    branches/hairsim/release/scripts/ui/properties_particle.py
    branches/hairsim/release/scripts/ui/properties_physics_cloth.py
    branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h
    branches/hairsim/source/blender/blenkernel/intern/collision.c
    branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp
    branches/hairsim/source/blender/blenkernel/intern/particle_system.c
    branches/hairsim/source/blender/blenkernel/intern/pdynamics.c
    branches/hairsim/source/blender/blenkernel/intern/pointcache.c
    branches/hairsim/source/blender/blenlib/BLI_listbase.h
    branches/hairsim/source/blender/blenlib/BLI_math_vector.h
    branches/hairsim/source/blender/blenlib/intern/listbase.c
    branches/hairsim/source/blender/blenlib/intern/math_geom.c
    branches/hairsim/source/blender/blenlib/intern/math_vector.c
    branches/hairsim/source/blender/blenlib/intern/math_vector_inline.c
    branches/hairsim/source/blender/blenloader/intern/readfile.c
    branches/hairsim/source/blender/makesdna/DNA_cloth_types.h
    branches/hairsim/source/blender/makesrna/intern/rna_cloth.c
    branches/hairsim/source/blender/modifiers/intern/MOD_collision.c
    branches/hairsim/source/creator/CMakeLists.txt

Modified: branches/hairsim/CMakeLists.txt
===================================================================
--- branches/hairsim/CMakeLists.txt	2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/CMakeLists.txt	2011-04-18 00:36:48 UTC (rev 36203)
@@ -70,6 +70,7 @@
 OPTION(WITH_ELBEEM        "Enable Elbeem (Fluid Simulation)" ON)
 OPTION(WITH_FFTW3         "Enable FFTW3 support (Used for smoke and audio effects)" OFF)
 OPTION(WITH_BULLET        "Enable Bullet (Physics Engine)" ON)
+OPTION(WITH_ELTOPO        "Enable Eltopo Collision Engine" ON)
 OPTION(WITH_GAMEENGINE    "Enable Game Engine" ON)
 OPTION(WITH_PLAYER        "Build Player" OFF)
 # (unix defaults to OpenMP On)

Modified: branches/hairsim/extern/CMakeLists.txt
===================================================================
--- branches/hairsim/extern/CMakeLists.txt	2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/extern/CMakeLists.txt	2011-04-18 00:36:48 UTC (rev 36203)
@@ -28,6 +28,10 @@
 	ADD_SUBDIRECTORY(bullet2)
 ENDIF(WITH_BULLET)
 
+IF(WITH_ELTOPO)
+ADD_SUBDIRECTORY(eltopo)
+ENDIF(WITH_ELTOPO)
+
 IF(CMAKE_SYSTEM_NAME MATCHES "Linux")
 	ADD_SUBDIRECTORY(binreloc)
 ENDIF(CMAKE_SYSTEM_NAME MATCHES "Linux")

Modified: branches/hairsim/extern/cppad/vector.hpp
===================================================================
--- branches/hairsim/extern/cppad/vector.hpp	2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/extern/cppad/vector.hpp	2011-04-18 00:36:48 UTC (rev 36203)
@@ -244,7 +244,7 @@
 
 // ------------------ CppAD::vector<Type> ----------------------------------
 
-#define MAX_STATIC	44
+#define MAX_STATIC	128
 #define NEW_VEC(capacity, data)	capacity <= MAX_STATIC ? staticdata : CPPAD_TRACK_NEW_VEC(capacity, data)
 
 template <class Type>

Modified: branches/hairsim/release/scripts/ui/properties_particle.py
===================================================================
--- branches/hairsim/release/scripts/ui/properties_particle.py	2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/release/scripts/ui/properties_particle.py	2011-04-18 00:36:48 UTC (rev 36203)
@@ -269,8 +269,8 @@
         sub = col.column(align=True)
         sub.prop(cloth, "internal_friction", slider=True)
         sub.prop(cloth, "collider_friction", slider=True)
-        sub.prop(cloth, "grid_size", slider=True, text="Grid Size")
-        sub.prop(cloth, "filter_size", slider=True, text="Filter Size")
+        sub.prop(cloth, "gridsize", slider=True, text="Grid Size")
+        sub.prop(cloth, "filtersize", slider=True, text="Filter Size")
 
         col.label(text="Quality:")
         col.prop(cloth, "quality", text="Steps", slider=True)

Modified: branches/hairsim/release/scripts/ui/properties_physics_cloth.py
===================================================================
--- branches/hairsim/release/scripts/ui/properties_physics_cloth.py	2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/release/scripts/ui/properties_physics_cloth.py	2011-04-18 00:36:48 UTC (rev 36203)
@@ -183,6 +183,7 @@
         col.prop(cloth, "collision_quality", slider=True, text="Quality")
         col.prop(cloth, "min_distance", slider=True, text="Distance")
         col.prop(cloth, "friction")
+        col.prop(cloth, "repulsion")
 
         if wide_ui:
             col = split.column()

Modified: branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h
===================================================================
--- branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h	2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/source/blender/blenkernel/BKE_pdynamics.h	2011-04-18 00:36:48 UTC (rev 36203)
@@ -27,6 +27,7 @@
 
 	pdfloat tx[3], txstart[3], txold[3], txold2[3], tv[3], tvold[3];
 	pdfloat cno[3], springforce[3], goalforce[3], norforce[3]; /*cno is collision normal*/
+	pdfloat repelforce[3];
 	pdfloat txconst[3], txconstold[3];
 	pdfloat no[3], mass, goal;
 
@@ -70,7 +71,7 @@
 	pdfloat springdamp, goaldamp, rigid_damp;
 	pdfloat internel_friction, collision_friction;
 	pdfloat airdamp, gravity[3], self_repulsion;
-	pdfloat mindis;
+	pdfloat mindis, collision_repel, collision_repel_fac;
 
 	int do_coll; /*flag for if collisions are enabled*/
 	int do_goal;
@@ -181,6 +182,8 @@
 #define subfac_v3_v3	subfac_v3_v3_d
 #define addfac_v3_v3v3	addfac_v3_v3v3_d
 #define subfac_v3_v3v3	subfac_v3_v3v3_d
+#define mul_v3_v3		mul_v3_v3_d
+#define mul_v3_v3_sl	mul_v3_v3d
 #define mul_v3_sl		mul_v3_d
 #define len_v3			len_v3_d
 #define len_v3v3		len_v3v3_d
@@ -189,6 +192,7 @@
 #define normalize_v3	normalize_v3_d
 #define normal_tri_v3	normal_tri_v3_d
 #define normal_quad_v3	normal_quad_v3_d
+#define normal_short_to_float_v3	normal_short_to_float_v3_d
 #define cross_v3_v3v3	cross_v3_v3v3_d
 #define copy_v3_v3		copy_v3_v3_d
 #define tetra_isect		tetra_isect_d
@@ -197,6 +201,9 @@
 #define isect_line_line_v3	isect_line_line_v3_d
 #define negate_v3		negate_v3_d
 #define zero_v3			zero_v3_d
+#define interp_v3_v3v3	interp_v3_v3v3_d
+#define isect_ray_tri_plane_v3	isect_ray_tri_plane_v3_d
+#define closest_to_line_v3		closest_to_line_v3_d
 #endif
 #else
 #define mul_v3_sl		mul_v3_fl

Modified: branches/hairsim/source/blender/blenkernel/intern/collision.c
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/collision.c	2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/source/blender/blenkernel/intern/collision.c	2011-04-18 00:36:48 UTC (rev 36203)
@@ -83,6 +83,7 @@
 			VECCOPY(pv->tv, collmd->current_v[i].co);
 			VECCOPY(pv->txconst, pv->tx);
 			VECCOPY(pv->txconstold, pv->txold);
+			normal_short_to_float_v3_d(pv->no, collmd->current_xnew[i].no);
 		}
 
 		pt = collmd->pdm->tris;

Modified: branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp
===================================================================
--- branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp	2011-04-17 22:47:23 UTC (rev 36202)
+++ branches/hairsim/source/blender/blenkernel/intern/derivatives.cpp	2011-04-18 00:36:48 UTC (rev 36203)
@@ -71,6 +71,35 @@
 namespace {
 	template <class Type> class ConTemplate {
 	public:
+		Type TriCollision(const Type &vars)
+		{
+			Type v1(3), v2(3), v3(3), n(3), y(1), dotf(3), c(1);
+			
+			c[0] = M_PI*0.5;
+			
+			/*coordinates are ordered: point, tri [v1, v2, v3]*/
+			v1[0] = vars[0] - vars[3];
+			v1[1] = vars[1] - vars[4];
+			v1[2] = vars[2] - vars[5];
+
+			v2[0] = vars[6] - vars[3];
+			v2[1] = vars[7] - vars[4];
+			v2[2] = vars[8] - vars[5];
+
+			v3[0] = vars[9] - vars[3];
+			v3[1] = vars[10] - vars[4];
+			v3[2] = vars[11] - vars[5];
+			
+			cross(n, v2, v3);
+			normalize(n);
+			normalize(v1);
+
+			dotf[0] = dot(n, v1);
+			y[0] = c[0] - CppAD::acos(dotf[0]);
+
+			return y;
+		}
+
 		// define y(x) = Poly(a, x) in the empty namespace
 		Type AngleConstraint2(const Type &vars)
 		{
@@ -96,8 +125,8 @@
 			return y;
 		}
 
-		Type TetraVolumeConstraint(const Type &vars) {
-			Type v1(3), v2(3), v3(3), v4(3), v5(3), v6(3), up(3), n(3), ret(1), r1(4);
+		Type EdgeCollisionConstraint(const Type &vars) {
+			Type origin(3), origin2(3), t1(1), t2(1), v1(3), v2(3), v3(3), v4(3), v5(3), v6(3), up(3), n(3), ret(1), r1(4);
 			int i;
 
 			up[0] = vars[14];
@@ -112,41 +141,53 @@
 			v2[1] = vars[7] - vars[10];
 			v2[2] = vars[8] - vars[11];
 			
+			r1[0] = 1.0;
+			t1[0] = vars[17];
+			t2[0] = vars[18];
+			
 			for (i=0; i<3; i++) {
-				v3[i] = vars[i+3] - vars[i+6];
-				v4[i] = vars[i] - vars[i+9];
-
-				v5[i] = vars[i+3] - vars[i+9];
-				v6[i] = vars[i] - vars[i+6];
+				v3[i] = vars[i] + (vars[i+3] - vars[i])*t1[0];
+				v4[i] = vars[i+6] + (vars[i+9] - vars[i+6])*t2[0];
+				
+				/*put origin outside of edge, to avoid numerical error at vertices*/
+				origin[i] = v1[i]*2.0 + vars[i+3];
+				
+				/*put origin outside of edge, to avoid numerical error at vertices*/
+				origin2[i] = v2[i]*2.0 + vars[i];
 			}
-
+#if 0
 			normalize(v1);
 			normalize(v2);
 			cross(n, v1, v2);
 			normalize(n);
-
-			normalize(v3);
-			normalize(v4);
+			
+			r1[0] = 0.0;
+			r1[1] = 1.0;
+			r1[2] = CppAD::CondExpGt(r1[0], dot(n, up), -r1[1], r1[1]);
+			mul_fl(n, r1[2]);
+			
+			sub(v5, origin, v4);
 			normalize(v5);
+			sub(v6, origin2, v4);
 			normalize(v6);
+			
+			r1[0] = M_PI*0.5;
+			r1[1] = dot(n, v5)*0.5 + dot(n, v6)*0.5;
+			ret[0] = r1[0] - CppAD::acos(r1[1]);
+#else
+			sub(n, v3, v4);
+			r1[0] = -1.0;
+			ret[0] = CppAD::sqrt(dot(n, n))*r1[0];
+			
+			r1[0] = -1.0;
+			r1[1] = 1.0;
+			r1[2] = 0.0;
+			normalize(n);
+			
+			ret[0] = ret[0]*CppAD::CondExpGt(r1[2], dot(n, up), r1[1], r1[0]);
+			
+#endif
 
-			r1[0] = 0.0;
-			r1[1] = -1.0;
-			r1[2] = 1.0;
-
-			mul_fl(n, CppAD::CondExpGt(r1[0], dot(n, up), r1[1], r1[2]));
-
-			r1[0] = dot(n, v4);
-			r1[1] = dot(n, v5);
-			r1[2] = dot(n, v6);
-
-			ret[0] = dot(n, v3);
-
-			ret[0] = CppAD::CondExpGt(ret[0], r1[0], r1[0], ret[0]);
-			ret[0] = CppAD::CondExpGt(ret[0], r1[1], r1[1], ret[0]);
-			ret[0] = CppAD::CondExpGt(ret[0], r1[2], r1[2], ret[0]);
-
-			//ret[0] = CppAD::CondExpGt(r1[0], dot(n, up), ret[0], -ret[0]);
 			return ret;
 		}
 	};
@@ -168,7 +209,6 @@
 									   double grad2[3], double grad3[3], double restangle)
 {
 	using CppAD::AD;
-	double rest=restangle;
 	CppAD::vector< AD<double> > *P = 0;
 	static CppAD::ADFun<double> *f1;
 	static CppAD::vector<double> *d=NULL, *p=NULL;
@@ -237,9 +277,86 @@
 		delete P;
 }
 
-extern "C" double solve_tetra_gradient(double ip1[3], double ip2[3], double ip3[3], double ip4[3],
+/*ip1 is point, ip2/3/4 is tri*/
+extern "C" double solve_tri_point_gradient(double ip1[3], double ip2[3], double ip3[3], double ip4[3], 
+                                         double grad1[3], double grad2[3], double grad3[3], double grad4[3])
+{
+	using CppAD::AD;
+	CppAD::vector< AD<double> > *P = 0;
+	static CppAD::ADFun<double> *f1;
+	static CppAD::vector<double> *d=NULL, *p=NULL;
+	CppAD::ErrorHandler info(myhandler);
+	int i;
+
+	if (!p) {
+		p = new CppAD::vector<double>(12);
+		d = new CppAD::vector<double>(12);
+	}
+
+	//grad1[0] =  grad1[1] = grad1[2] = grad2[0] = grad2[1] = grad2[2] = 0.0;
+	//return;
+
+	if (!f1)
+		P = new CppAD::vector< AD<double> >(12);
+
+	for (i=0; i<3; i++) {
+		if (!f1) {
+			(*P)[i] = ip1[i];
+			(*P)[i+3] = ip2[i];
+			(*P)[i+6] = ip3[i];
+			(*P)[i+9] = ip4[i];
+		}
+
+		(*p)[i] = ip1[i];
+		(*p)[i+3] = ip2[i];
+		(*p)[i+6] = ip3[i];
+		(*p)[i+9] = ip4[i];
+	}
+
+	try {
+		if (!f1) {
+			ConTemplate< CppAD::vector< AD<double> > > tmpl;
+

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list