[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