diff options
author | Erwin Coumans <blender@erwincoumans.com> | 2005-07-27 13:30:53 +0400 |
---|---|---|
committer | Erwin Coumans <blender@erwincoumans.com> | 2005-07-27 13:30:53 +0400 |
commit | 411123b2502388c9082886be48db93836ceacea8 (patch) | |
tree | 2d37fe8fc95b71b603a9e2fdf76580768a134313 /extern | |
parent | b8142515ce762107a186fac501d73a2dbe42047a (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')
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) { } |