heh was gonna fix it my self and noticed there isn't any eltopo-capi.h file in the source. little fail! :)
cheers Daniel Salazar 3Developer.com On Sat, Apr 9, 2011 at 6:08 PM, Daniel Salazar - 3Developer.com <[email protected]> wrote: > scons error > http://www.pasteall.org/20713 > > Daniel Salazar > 3Developer.com > > > On Sat, Apr 9, 2011 at 5:19 PM, Joseph Eagar <[email protected]> wrote: >> Revision: 36073 >> >> http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36073 >> Author: joeedh >> Date: 2011-04-09 23:19:11 +0000 (Sat, 09 Apr 2011) >> Log Message: >> ----------- >> =cloth collisions= >> >> Plugged the eltopo library into the cloth solver. >> I was playing with it earlier, and it's so easy to >> use I decided to quickly put it in (trunk's) cloth. >> >> See http://www.cs.ubc.ca/labs/imager/tr/2009/eltopo/eltopo.html >> . The authors are on the bleeding edge of continuous collision >> detection (one of them did ILM's cloth sim). >> I >> don't really have to time to plug it into softbody, particles, >> bullet, fluid, etc, but doing so would be pretty straightforward. >> I'll leave that up to someone else. >> >> To use, turn on USE_ELTOPO (in cmake) or WITH_BF_ELTOPO in scons. >> >> Modified Paths: >> -------------- >> trunk/blender/build_files/cmake/FindPythonLibsUnix.cmake >> trunk/blender/build_files/scons/tools/btools.py >> trunk/blender/extern/CMakeLists.txt >> trunk/blender/extern/SConscript >> trunk/blender/source/blender/blenkernel/BKE_collision.h >> trunk/blender/source/blender/blenkernel/CMakeLists.txt >> trunk/blender/source/blender/blenkernel/SConscript >> trunk/blender/source/blender/blenkernel/intern/collision.c >> trunk/blender/source/blenderplayer/CMakeLists.txt >> trunk/blender/source/creator/CMakeLists.txt >> >> Modified: trunk/blender/build_files/cmake/FindPythonLibsUnix.cmake >> =================================================================== >> --- trunk/blender/build_files/cmake/FindPythonLibsUnix.cmake 2011-04-09 >> 19:46:17 UTC (rev 36072) >> +++ trunk/blender/build_files/cmake/FindPythonLibsUnix.cmake 2011-04-09 >> 23:19:11 UTC (rev 36073) >> @@ -4,7 +4,7 @@ >> # PYTHON_INCLUDE_DIRS >> # PYTHON_LIBRARY >> # PYTHON_LIBPATH >> -# PYTHON_LINKFLAGS >> +# PYTHON_LINKFLAGSPYTHON >> >> #============================================================================= >> >> >> Modified: trunk/blender/build_files/scons/tools/btools.py >> =================================================================== >> --- trunk/blender/build_files/scons/tools/btools.py 2011-04-09 19:46:17 >> UTC (rev 36072) >> +++ trunk/blender/build_files/scons/tools/btools.py 2011-04-09 23:19:11 >> UTC (rev 36073) >> @@ -99,7 +99,7 @@ >> 'WITH_BF_INTERNATIONAL', >> 'BF_GETTEXT', 'BF_GETTEXT_INC', 'BF_GETTEXT_LIB', >> 'WITH_BF_GETTEXT_STATIC', 'BF_GETTEXT_LIB_STATIC', 'BF_GETTEXT_LIBPATH', >> 'WITH_BF_ICONV', 'BF_ICONV', 'BF_ICONV_INC', 'BF_ICONV_LIB', >> 'BF_ICONV_LIBPATH', >> - 'WITH_BF_GAMEENGINE', 'WITH_BF_BULLET', 'BF_BULLET', >> 'BF_BULLET_INC', 'BF_BULLET_LIB', >> + 'WITH_BF_GAMEENGINE', 'WITH_BF_BULLET', 'WITH_BF_ELTOPO', >> 'BF_BULLET', 'BF_BULLET_INC', 'BF_BULLET_LIB', >> 'BF_WINTAB', 'BF_WINTAB_INC', >> 'WITH_BF_FREETYPE', 'BF_FREETYPE', 'BF_FREETYPE_INC', >> 'BF_FREETYPE_LIB', 'BF_FREETYPE_LIBPATH', 'BF_FREETYPE_LIB_STATIC', >> 'WITH_BF_FREETYPE_STATIC', >> 'WITH_BF_QUICKTIME', 'BF_QUICKTIME', 'BF_QUICKTIME_INC', >> 'BF_QUICKTIME_LIB', 'BF_QUICKTIME_LIBPATH', >> @@ -365,6 +365,8 @@ >> (BoolVariable('WITH_BF_GAMEENGINE', 'Build with gameengine' , >> False)), >> >> (BoolVariable('WITH_BF_BULLET', 'Use Bullet if true', True)), >> + (BoolVariable('WITH_BF_ELTOPO', 'Use Eltopo collision library if >> true', False)), >> + >> ('BF_BULLET', 'Bullet base dir', ''), >> ('BF_BULLET_INC', 'Bullet include path', ''), >> ('BF_BULLET_LIB', 'Bullet library', ''), >> >> Modified: trunk/blender/extern/CMakeLists.txt >> =================================================================== >> --- trunk/blender/extern/CMakeLists.txt 2011-04-09 19:46:17 UTC (rev 36072) >> +++ trunk/blender/extern/CMakeLists.txt 2011-04-09 23:19:11 UTC (rev 36073) >> @@ -31,6 +31,10 @@ >> add_subdirectory(bullet2) >> endif() >> >> +if(WITH_ELTOPO) >> + add_subdirectory(eltopo) >> +endif() >> + >> if(WITH_BINRELOC) >> add_subdirectory(binreloc) >> endif() >> >> Modified: trunk/blender/extern/SConscript >> =================================================================== >> --- trunk/blender/extern/SConscript 2011-04-09 19:46:17 UTC (rev 36072) >> +++ trunk/blender/extern/SConscript 2011-04-09 23:19:11 UTC (rev 36073) >> @@ -4,6 +4,9 @@ >> >> SConscript(['glew/SConscript']) >> >> +if env['WITH_BF_ELTOPO']: >> + SConscript(['eltopo/SConscript']) >> + >> if env['WITH_BF_BULLET']: >> SConscript(['bullet2/src/SConscript']) >> >> >> Modified: trunk/blender/source/blender/blenkernel/BKE_collision.h >> =================================================================== >> --- trunk/blender/source/blender/blenkernel/BKE_collision.h 2011-04-09 >> 19:46:17 UTC (rev 36072) >> +++ trunk/blender/source/blender/blenkernel/BKE_collision.h 2011-04-09 >> 23:19:11 UTC (rev 36073) >> @@ -63,7 +63,11 @@ >> /* COLLISION FLAGS */ >> typedef enum >> { >> - COLLISION_IN_FUTURE = ( 1 << 1 ), >> + COLLISION_IN_FUTURE = (1 << 1), >> +#ifdef USE_ELTOPO >> + COLLISION_USE_COLLFACE = (1 << 2), >> + COLLISION_IS_EDGES = (1 << 3), >> +#endif >> } COLLISION_FLAGS; >> >> >> @@ -81,7 +85,13 @@ >> float pa[3], pb[3]; // collision point p1 on face1, p2 on face2 >> int flag; >> float time; // collision time, from 0 up to 1 >> +#ifdef USE_ELTOPO /*either ap* or bp* can be set, but not both*/ >> + float bary[3]; >> + int ap1, ap2, ap3, collp, bp1, bp2, bp3; >> + int collface; >> +#else >> int ap1, ap2, ap3, bp1, bp2, bp3; >> +#endif >> int pointsb[4]; >> } >> CollPair; >> @@ -109,6 +119,7 @@ >> float pa[3], pb[3]; // collision point p1 on face1, p2 on face2 >> } >> FaceCollPair; >> + >> //////////////////////////////////////// >> >> >> >> Modified: trunk/blender/source/blender/blenkernel/CMakeLists.txt >> =================================================================== >> --- trunk/blender/source/blender/blenkernel/CMakeLists.txt 2011-04-09 >> 19:46:17 UTC (rev 36072) >> +++ trunk/blender/source/blender/blenkernel/CMakeLists.txt 2011-04-09 >> 23:19:11 UTC (rev 36073) >> @@ -140,7 +140,7 @@ >> intern/writeavi.c >> intern/writeffmpeg.c >> intern/writeframeserver.c >> - >> + >> BKE_DerivedMesh.h >> BKE_action.h >> BKE_anim.h >> @@ -235,6 +235,11 @@ >> add_definitions(-DUSE_BULLET) >> endif() >> >> +if(WITH_ELTOPO) >> + list(APPEND INC ../../../extern/eltopo) >> + add_definitions(-DUSE_ELTOPO) >> +endif() >> + >> if(WITH_IMAGE_OPENEXR) >> add_definitions(-DWITH_OPENEXR) >> endif() >> >> Modified: trunk/blender/source/blender/blenkernel/SConscript >> =================================================================== >> --- trunk/blender/source/blender/blenkernel/SConscript 2011-04-09 19:46:17 >> UTC (rev 36072) >> +++ trunk/blender/source/blender/blenkernel/SConscript 2011-04-09 23:19:11 >> UTC (rev 36073) >> @@ -27,6 +27,10 @@ >> if env['BF_DEBUG']: >> defs.append('DEBUG') >> >> +if env['WITH_BF_ELTOPO']: >> + incs += ' ../../../extern/eltopo' >> + defs.append('USE_ELTOPO') >> + >> if env['WITH_BF_QUICKTIME']: >> incs += ' ../quicktime' >> >> >> Modified: trunk/blender/source/blender/blenkernel/intern/collision.c >> =================================================================== >> --- trunk/blender/source/blender/blenkernel/intern/collision.c 2011-04-09 >> 19:46:17 UTC (rev 36072) >> +++ trunk/blender/source/blender/blenkernel/intern/collision.c 2011-04-09 >> 23:19:11 UTC (rev 36073) >> @@ -48,6 +48,8 @@ >> #include "BLI_math.h" >> #include "BLI_edgehash.h" >> #include "BLI_utildefines.h" >> +#include "BLI_ghash.h" >> +#include "BLI_memarena.h" >> >> #include "BKE_DerivedMesh.h" >> #include "BKE_global.h" >> @@ -63,7 +65,11 @@ >> #include "BLI_kdopbvh.h" >> #include "BKE_collision.h" >> >> +#ifdef USE_ELTOPO >> +#include "eltopo-capi.h" >> +#endif >> >> + >> /*********************************** >> Collision modifier code start >> ***********************************/ >> @@ -486,7 +492,7 @@ >> VECADDMUL ( to, v3, w3 ); >> } >> >> - >> +#ifndef USE_ELTOPO >> static int cloth_collision_response_static ( ClothModifierData *clmd, >> CollisionModifierData *collmd, CollPair *collpair, CollPair *collision_end ) >> { >> int result = 0; >> @@ -601,7 +607,663 @@ >> } >> return result; >> } >> +#endif >> >> +#ifdef USE_ELTOPO >> +typedef struct edgepairkey { >> + int a1, a2, b1, b2; >> +} edgepairkey; >> + >> +unsigned int edgepair_hash(void *vkey) >> +{ >> + edgepairkey *key = vkey; >> + int keys[4] = {key->a1, key->a2, key->b1, key->b2}; >> + int i, j; >> + >> + for (i=0; i<4; i++) { >> + for (j=0; j<3; j++) { >> + if (keys[j] >= keys[j+1]) { >> + SWAP(int, keys[j], keys[j+1]); >> + } >> + } >> + } >> + >> + return keys[0]*101 + keys[1]*72 + keys[2]*53 + keys[3]*34; >> +} >> + >> +int edgepair_cmp(const void *va, const void *vb) >> +{ >> + edgepairkey *a = va, *b = vb; >> + int keysa[4] = {a->a1, a->a2, a->b1, a->b2}; >> + int keysb[4] = {b->a1, b->a2, b->b1, b->b2}; >> + int i; >> + >> + for (i=0; i<4; i++) { >> + int j, ok=0; >> + for (j=0; j<4; j++) { >> + if (keysa[i] == keysa[j]) { >> + ok = 1; >> + break; >> + } >> + } >> + if (!ok) >> + return -1; >> + } >> + >> + return 0; >> +} >> + >> +static void get_edgepairkey(edgepairkey *key, int a1, int a2, int b1, int >> b2) >> +{ >> + key->a1 = a1; >> + key->a2 = a2; >> + key->b1 = b1; >> + key->b2 = b2; >> +} >> + >> +/*an immense amount of duplication goes on here. . .a major performance >> hit, I'm sure*/ >> +static CollPair* cloth_edge_collision ( ModifierData *md1, ModifierData >> *md2, >> + >> BVHTreeOverlap *overlap, CollPair *collpair, >> + >> GHash *visithash, MemArena *arena) >> +{ >> + ClothModifierData *clmd = ( ClothModifierData * ) md1; >> + CollisionModifierData *collmd = ( CollisionModifierData * ) md2; >> + MFace *face1=NULL, *face2 = NULL; >> + ClothVertex *verts1 = clmd->clothObject->verts; >> + double distance = 0; >> + edgepairkey *key, tstkey; >> + float epsilon1 = clmd->coll_parms->epsilon; >> + float epsilon2 = BLI_bvhtree_getepsilon ( collmd->bvhtree ); >> + float no[3], uv[3], t, relnor; >> + int i, i1, i2, i3, i4, i5, i6; >> + Cloth *cloth = clmd->clothObject; >> + float n1[3], n2[3], off[3], v1[2][3], v2[2][3], v3[2][3], v4[2][3], >> v5[2][3], v6[2][3]; >> + void **verts[] = {v1, v2, v3, v4, v5, v6}; >> + int j, ret, bp1, bp2, bp3, ap1, ap2, ap3, table[6]; >> + >> + face1 = & ( clmd->clothObject->mfaces[overlap->indexA] ); >> + face2 = & ( collmd->mfaces[overlap->indexB] ); >> + >> + // check all 4 possible collisions >> + for ( i = 0; i < 4; i++ ) >> + { >> + if ( i == 0 ) >> + { >> + // fill faceA >> + ap1 = face1->v1; >> + ap2 = face1->v2; >> + ap3 = face1->v3; >> + >> + // fill faceB >> + bp1 = face2->v1; >> + bp2 = face2->v2; >> + bp3 = face2->v3; >> + } >> + else if ( i == 1 ) >> + { >> + if ( face1->v4 ) >> + { >> + // fill faceA >> + ap1 = face1->v1; >> + ap2 = face1->v3; >> + ap3 = face1->v4; >> + >> + // fill faceB >> + bp1 = face2->v1; >> + bp2 = face2->v2; >> + bp3 = face2->v3; >> + } >> + else { >> + continue; >> + } >> + } >> + if ( i == 2 ) >> + { >> + if ( face2->v4 ) >> + { >> + // fill faceA >> + ap1 = face1->v1; >> + ap2 = face1->v2; >> + ap3 = face1->v3; >> + >> + // fill faceB >> + bp1 = face2->v1; >> + bp2 = face2->v3; >> + bp3 = face2->v4; >> + } >> + else { >> + continue; >> + } >> + } >> + else if ( i == 3 ) >> + { >> + if ( face1->v4 && face2->v4 ) >> + { >> + // fill faceA >> + ap1 = face1->v1; >> + ap2 = face1->v3; >> + ap3 = face1->v4; >> + >> + // fill faceB >> + bp1 = face2->v1; >> + bp2 = face2->v3; >> + bp3 = face2->v4; >> + } >> + else { >> + continue; >> + } >> + } >> + >> + copy_v3_v3(v1[0], cloth->verts[ap1].txold); >> + copy_v3_v3(v1[1], cloth->verts[ap1].tx); >> + copy_v3_v3(v2[0], cloth->verts[ap2].txold); >> + copy_v3_v3(v2[1], cloth->verts[ap2].tx); >> + copy_v3_v3(v3[0], cloth->verts[ap3].txold); >> + copy_v3_v3(v3[1], cloth->verts[ap3].tx); >> + >> + copy_v3_v3(v4[0], collmd->current_x[bp1].co); >> + copy_v3_v3(v4[1], collmd->current_xnew[bp1].co); >> + copy_v3_v3(v5[0], collmd->current_x[bp2].co); >> + copy_v3_v3(v5[1], collmd->current_xnew[bp2].co); >> + copy_v3_v3(v6[0], collmd->current_x[bp3].co); >> + copy_v3_v3(v6[1], collmd->current_xnew[bp3].co); >> + >> + normal_tri_v3(n2, v4[1], v5[1], v6[1]); >> + >> + /*offset new positions a bit, to account for margins*/ >> + copy_v3_v3(off, n2); >> + mul_v3_fl(off, epsilon1 + epsilon2 + ALMOST_ZERO); >> + add_v3_v3(v4[1], off); add_v3_v3(v5[1], off); >> add_v3_v3(v6[1], off); >> + >> + i1 = ap1; i2 = ap2; i3 = ap3; >> + i4 = bp1; i5 = bp2; i6 = bp3; >> + >> + for (j=0; j<3; j++) { >> + int collp1, collp2, k, j2 = (j+1)%3; >> + >> + table[0] = ap1; table[1] = ap2; table[2] = ap3; >> + table[3] = bp1; table[4] = bp2; table[5] = bp3; >> >> @@ Diff output truncated at 10240 characters. @@ >> _______________________________________________ >> Bf-blender-cvs mailing list >> [email protected] >> http://lists.blender.org/mailman/listinfo/bf-blender-cvs >> > _______________________________________________ Bf-committers mailing list [email protected] http://lists.blender.org/mailman/listinfo/bf-committers
