[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36073] trunk/blender: =cloth collisions=
Daniel Salazar - 3Developer.com
zanqdo at gmail.com
Sun Apr 10 03:15:20 CEST 2011
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
<zanqdo at gmail.com> wrote:
> scons error
> http://www.pasteall.org/20713
>
> Daniel Salazar
> 3Developer.com
>
>
> On Sat, Apr 9, 2011 at 5:19 PM, Joseph Eagar <joeedh at gmail.com> 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
>> Bf-blender-cvs at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>>
>
More information about the Bf-committers
mailing list