Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2008-09-27 01:49:26 +0400
committerErwin Coumans <blender@erwincoumans.com>2008-09-27 01:49:26 +0400
commit17d9f2eda9ac03fa54c5a5788643aabfcec34bc7 (patch)
tree4ef6e353e1c89b15ca7d409f4ddc936689a41659 /extern/bullet2/src
parent73119b840af9b6c7a3e27f451e4527f7797e27b2 (diff)
fixed soft body collision against concave triangle meshes.
Diffstat (limited to 'extern/bullet2/src')
-rw-r--r--extern/bullet2/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp40
1 files changed, 9 insertions, 31 deletions
diff --git a/extern/bullet2/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp b/extern/bullet2/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp
index 5e3211ed73b..3bcfe492107 100644
--- a/extern/bullet2/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp
+++ b/extern/bullet2/src/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp
@@ -32,7 +32,7 @@ subject to the following restrictions:
#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
#include "BulletSoftBody/btSoftBody.h"
-#define BT_SOFTBODY_TRIANGLE_EXTRUSION btScalar(0.3)
+#define BT_SOFTBODY_TRIANGLE_EXTRUSION btScalar(0.06)//make this configurable
btSoftBodyConcaveCollisionAlgorithm::btSoftBodyConcaveCollisionAlgorithm( const btCollisionAlgorithmConstructionInfo& ci, btCollisionObject* body0,btCollisionObject* body1,bool isSwapped)
: btCollisionAlgorithm(ci),
@@ -210,44 +210,22 @@ btCollisionObject* ob = static_cast<btCollisionObject*>(m_triBody);
void btSoftBodyTriangleCallback::setTimeStepAndCounters(btScalar collisionMarginTriangle,const btDispatcherInfo& dispatchInfo,btManifoldResult* resultOut)
{
m_dispatchInfoPtr = &dispatchInfo;
- m_collisionMarginTriangle = collisionMarginTriangle;
+ m_collisionMarginTriangle = collisionMarginTriangle+btScalar(BT_SOFTBODY_TRIANGLE_EXTRUSION);
m_resultOut = resultOut;
- //recalc aabbs
-// btTransform softbodyInTriangleSpace;
-// softbodyInTriangleSpace = m_triBody->getWorldTransform().inverse() * m_softBody->getWorldTransform();
-// btCollisionShape* convexShape = static_cast<btCollisionShape*>(m_convexBody->getCollisionShape());
- //CollisionShape* triangleShape = static_cast<btCollisionShape*>(triBody->m_collisionShape);
+
btVector3 aabbWorldSpaceMin,aabbWorldSpaceMax;
m_softBody->getAabb(aabbWorldSpaceMin,aabbWorldSpaceMax);
-
btVector3 halfExtents = (aabbWorldSpaceMax-aabbWorldSpaceMin)*btScalar(0.5);
btVector3 softBodyCenter = (aabbWorldSpaceMax+aabbWorldSpaceMin)*btScalar(0.5);
- btTransform triInverse = m_triBody->getWorldTransform().inverse();
-
- btMatrix3x3 abs_b = triInverse.getBasis().absolute();
- btPoint3 center = softBodyCenter + triInverse.getOrigin();
-
- btVector3 extent = btVector3(abs_b[0].dot(halfExtents),
- abs_b[1].dot(halfExtents),
- abs_b[2].dot(halfExtents));
-// extent += btVector3(getMargin(),getMargin(),getMargin());
-
- m_aabbMin = center - extent;
- m_aabbMax = center + extent;
-
- btScalar extraMargin = collisionMarginTriangle+btScalar(BT_SOFTBODY_TRIANGLE_EXTRUSION);
- btVector3 extra(extraMargin,extraMargin,extraMargin);
-
- m_aabbMax += extra;
- m_aabbMin -= extra;
-
-/* btVector3 extra(2,2,2);
- m_aabbMin = aabbWorldSpaceMin-extra;
- m_aabbMax = aabbWorldSpaceMax+extra;
-*/
+ btTransform softTransform;
+ softTransform.setIdentity();
+ softTransform.setOrigin(softBodyCenter);
+ btTransform convexInTriangleSpace;
+ convexInTriangleSpace = m_triBody->getWorldTransform().inverse() * softTransform;
+ btTransformAabb(halfExtents,m_collisionMarginTriangle,convexInTriangleSpace,m_aabbMin,m_aabbMax);
}
void btSoftBodyConcaveCollisionAlgorithm::clearCache()