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
path: root/extern
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2005-07-27 13:30:53 +0400
committerErwin Coumans <blender@erwincoumans.com>2005-07-27 13:30:53 +0400
commit411123b2502388c9082886be48db93836ceacea8 (patch)
tree2d37fe8fc95b71b603a9e2fdf76580768a134313 /extern
parentb8142515ce762107a186fac501d73a2dbe42047a (diff)
- added debug line drawing in gameengine (handy for debugging physics problems)
- added #ifdef for a visual studio 8 crashing problems - added scaling and tolerances to triangle meshes
Diffstat (limited to 'extern')
-rw-r--r--extern/bullet/Bullet/CollisionShapes/CollisionShape.h2
-rw-r--r--extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.h4
-rw-r--r--extern/bullet/Bullet/CollisionShapes/TriangleMesh.h4
-rw-r--r--extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.cpp9
-rw-r--r--extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.h13
-rw-r--r--extern/bullet/Bullet/NarrowPhaseCollision/ContinuousConvexCollision.cpp9
-rw-r--r--extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.cpp12
-rw-r--r--extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.h3
-rw-r--r--extern/bullet/LinearMath/SimdQuadWord.h6
9 files changed, 44 insertions, 18 deletions
diff --git a/extern/bullet/Bullet/CollisionShapes/CollisionShape.h b/extern/bullet/Bullet/CollisionShapes/CollisionShape.h
index 6969075f38c..2a2d0543bb2 100644
--- a/extern/bullet/Bullet/CollisionShapes/CollisionShape.h
+++ b/extern/bullet/Bullet/CollisionShapes/CollisionShape.h
@@ -69,6 +69,8 @@ public:
const char * m_tempDebug;
//endif debugging support
+ virtual void SetMargin(float margin) = 0;
+ virtual float GetMargin() const = 0;
};
diff --git a/extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.h b/extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.h
index 3bdcd7edb38..d212c6f8904 100644
--- a/extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.h
+++ b/extern/bullet/Bullet/CollisionShapes/StridingMeshInterface.h
@@ -34,7 +34,7 @@ class StridingMeshInterface
public:
StridingMeshInterface() :m_scaling(1.f,1.f,1.f)
{
-
+
}
virtual ~StridingMeshInterface();
@@ -64,6 +64,8 @@ class StridingMeshInterface
{
m_scaling = scaling;
}
+
+
};
#endif //STRIDING_MESHINTERFACE_H
diff --git a/extern/bullet/Bullet/CollisionShapes/TriangleMesh.h b/extern/bullet/Bullet/CollisionShapes/TriangleMesh.h
index 6701ccbc328..37e29bf3b08 100644
--- a/extern/bullet/Bullet/CollisionShapes/TriangleMesh.h
+++ b/extern/bullet/Bullet/CollisionShapes/TriangleMesh.h
@@ -27,6 +27,7 @@ struct MyTriangle
class TriangleMesh : public StridingMeshInterface
{
std::vector<MyTriangle> m_triangles;
+
public:
TriangleMesh ();
@@ -56,8 +57,7 @@ class TriangleMesh : public StridingMeshInterface
virtual void preallocateVertices(int numverts){}
virtual void preallocateIndices(int numindices){}
-
-
+
};
#endif //TRIANGLE_MESH_H \ No newline at end of file
diff --git a/extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.cpp b/extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.cpp
index 996c740acce..c9c7a73b932 100644
--- a/extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.cpp
+++ b/extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.cpp
@@ -17,7 +17,8 @@
TriangleMeshShape::TriangleMeshShape(StridingMeshInterface* meshInterface)
-: m_meshInterface(meshInterface)
+: m_meshInterface(meshInterface),
+m_collisionMargin(0.1f)
{
}
@@ -31,16 +32,16 @@ TriangleMeshShape::~TriangleMeshShape()
void TriangleMeshShape::GetAabb(const SimdTransform& trans,SimdVector3& aabbMin,SimdVector3& aabbMax) const
{
- SimdScalar margin = 0.5f;
+
for (int i=0;i<3;i++)
{
SimdVector3 vec(0.f,0.f,0.f);
vec[i] = 1.f;
SimdVector3 tmp = trans(LocalGetSupportingVertex(vec*trans.getBasis()));
- aabbMax[i] = tmp[i]+margin;
+ aabbMax[i] = tmp[i]+m_collisionMargin;
vec[i] = -1.f;
tmp = trans(LocalGetSupportingVertex(vec*trans.getBasis()));
- aabbMin[i] = tmp[i]-margin;
+ aabbMin[i] = tmp[i]-m_collisionMargin;
}
}
diff --git a/extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.h b/extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.h
index ecd9cc530fd..2083985e6cc 100644
--- a/extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.h
+++ b/extern/bullet/Bullet/CollisionShapes/TriangleMeshShape.h
@@ -24,7 +24,8 @@ class TriangleMeshShape : public CollisionShape
{
StridingMeshInterface* m_meshInterface;
-
+ float m_collisionMargin;
+
public:
TriangleMeshShape(StridingMeshInterface* meshInterface);
@@ -57,6 +58,16 @@ public:
//debugging
virtual char* GetName()const {return "TRIANGLEMESH";}
+
+ virtual float GetMargin() const {
+ return m_collisionMargin;
+ }
+ virtual void SetMargin(float collisionMargin)
+ {
+ m_collisionMargin = collisionMargin;
+ }
+
+
};
diff --git a/extern/bullet/Bullet/NarrowPhaseCollision/ContinuousConvexCollision.cpp b/extern/bullet/Bullet/NarrowPhaseCollision/ContinuousConvexCollision.cpp
index 21baabfb864..2369b02b1b9 100644
--- a/extern/bullet/Bullet/NarrowPhaseCollision/ContinuousConvexCollision.cpp
+++ b/extern/bullet/Bullet/NarrowPhaseCollision/ContinuousConvexCollision.cpp
@@ -120,13 +120,18 @@ bool ContinuousConvexCollision::calcTimeOfImpact(
lambda = lambda + dLambda;
+ if (lambda > 1.f)
+ return false;
+
+ if (lambda < 0.f)
+ return false;
+
//todo: next check with relative epsilon
if (lambda <= lastLambda)
break;
lastLambda = lambda;
- if (lambda > 1.f)
- return false;
+
//interpolate to next lambda
SimdTransform interpolatedTransA,interpolatedTransB,relativeTrans;
diff --git a/extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.cpp b/extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.cpp
index 5dac60a9e06..6a815cb3113 100644
--- a/extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.cpp
+++ b/extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.cpp
@@ -83,6 +83,8 @@ void BoxTriangleCallback::ProcessTriangle(SimdVector3* triangle)
if (m_boxProxy->IsConvexShape())
{
TriangleShape tm(triangle[0],triangle[1],triangle[2]);
+ tm.SetMargin(m_collisionMarginTriangle);
+
RigidBody* triangleBody = (RigidBody* )m_triangleProxy.m_clientObject;
triangleBody->SetCollisionShape(&tm);
@@ -97,11 +99,12 @@ void BoxTriangleCallback::ProcessTriangle(SimdVector3* triangle)
-void BoxTriangleCallback::SetTimeStepAndCounters(float timeStep,int stepCount,bool useContinuous)
+void BoxTriangleCallback::SetTimeStepAndCounters(float timeStep,int stepCount,float collisionMarginTriangle,bool useContinuous)
{
m_timeStep = timeStep;
m_stepCount = stepCount;
m_useContinuous = useContinuous;
+ m_collisionMarginTriangle = collisionMarginTriangle;
//recalc aabbs
RigidBody* boxBody = (RigidBody* )m_boxProxy->m_clientObject;
@@ -141,8 +144,9 @@ void ConvexConcaveCollisionAlgorithm::ProcessCollision (BroadphaseProxy* ,Broadp
if (m_convex.IsConvexShape())
{
+ float collisionMarginTriangle = triangleMesh->GetMargin();
- m_boxTriangleCallback.SetTimeStepAndCounters(timeStep,stepCount, useContinuous);
+ m_boxTriangleCallback.SetTimeStepAndCounters(timeStep,stepCount, collisionMarginTriangle,useContinuous);
#ifdef USE_BOX_TRIANGLE
m_boxTriangleCallback.m_manifoldPtr->ClearManifold();
#endif
@@ -161,6 +165,8 @@ void ConvexConcaveCollisionAlgorithm::ProcessCollision (BroadphaseProxy* ,Broadp
float ConvexConcaveCollisionAlgorithm::CalculateTimeOfImpact(BroadphaseProxy* ,BroadphaseProxy* ,float timeStep,int stepCount)
{
+ return 1.f;
+
//quick approximation using raycast, todo: use proper continuou collision detection
RigidBody* convexbody = (RigidBody* )m_convex.m_clientObject;
const SimdVector3& from = convexbody->getCenterOfMassPosition();
@@ -193,7 +199,7 @@ float ConvexConcaveCollisionAlgorithm::CalculateTimeOfImpact(BroadphaseProxy* ,B
RigidBody* concavebody = (RigidBody* )m_concave.m_clientObject;
TriangleMeshShape* triangleMesh = (TriangleMeshShape*) concavebody->GetCollisionShape();
-
+
if (triangleMesh)
{
triangleMesh->ProcessAllTriangles(&raycastCallback,aabbMin,aabbMax);
diff --git a/extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.h b/extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.h
index 35248c841c6..10ff0718d92 100644
--- a/extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.h
+++ b/extern/bullet/BulletDynamics/CollisionDispatch/ConvexConcaveCollisionAlgorithm.h
@@ -33,6 +33,7 @@ class BoxTriangleCallback : public TriangleCallback
float m_timeStep;
int m_stepCount;
bool m_useContinuous;
+ float m_collisionMarginTriangle;
public:
@@ -40,7 +41,7 @@ public:
BoxTriangleCallback(Dispatcher* dispatcher,BroadphaseProxy* proxy0,BroadphaseProxy* proxy1);
- void SetTimeStepAndCounters(float timeStep,int stepCount, bool useContinuous);
+ void SetTimeStepAndCounters(float timeStep,int stepCount, float collisionMarginTriangle,bool useContinuous);
virtual ~BoxTriangleCallback();
diff --git a/extern/bullet/LinearMath/SimdQuadWord.h b/extern/bullet/LinearMath/SimdQuadWord.h
index efce56617a6..f256a215559 100644
--- a/extern/bullet/LinearMath/SimdQuadWord.h
+++ b/extern/bullet/LinearMath/SimdQuadWord.h
@@ -92,16 +92,14 @@ class SimdQuadWord
}
SIMD_FORCE_INLINE SimdQuadWord()
- :m_x(0),m_y(0),m_z(0)
- //todo, remove this in release/simd ?
- ,m_unusedW(0)
+ :m_x(0.f),m_y(0.f),m_z(0.f),m_unusedW(0.f)
{
}
SIMD_FORCE_INLINE SimdQuadWord(const SimdScalar& x, const SimdScalar& y, const SimdScalar& z)
:m_x(x),m_y(y),m_z(z)
//todo, remove this in release/simd ?
- ,m_unusedW(0)
+ ,m_unusedW(0.f)
{
}