From 35c2da987ede3dc3980d9d1b4c7510d5775c4e86 Mon Sep 17 00:00:00 2001 From: ejcoumans Date: Sun, 25 Jun 2006 19:53:07 +0000 Subject: [PATCH] preparation for compound collision shapes --- Bullet/BroadphaseCollision/BroadphaseProxy.h | 1 + .../CompoundCollisionAlgorithm.cpp | 35 ++++++++ .../CompoundCollisionAlgorithm.h | 51 ++++++++++++ Bullet/CollisionShapes/CompoundShape.cpp | 49 ++++++++++++ Bullet/CollisionShapes/CompoundShape.h | 79 +++++++++++++++++++ 5 files changed, 215 insertions(+) create mode 100644 Bullet/CollisionDispatch/CompoundCollisionAlgorithm.cpp create mode 100644 Bullet/CollisionDispatch/CompoundCollisionAlgorithm.h create mode 100644 Bullet/CollisionShapes/CompoundShape.cpp create mode 100644 Bullet/CollisionShapes/CompoundShape.h diff --git a/Bullet/BroadphaseCollision/BroadphaseProxy.h b/Bullet/BroadphaseCollision/BroadphaseProxy.h index aefe81cf7..86f6d078b 100644 --- a/Bullet/BroadphaseCollision/BroadphaseProxy.h +++ b/Bullet/BroadphaseCollision/BroadphaseProxy.h @@ -43,6 +43,7 @@ CONCAVE_SHAPES_START_HERE, //keep all the convex shapetype below here, for the check IsConvexShape in broadphase proxy! TRIANGLE_MESH_SHAPE_PROXYTYPE, EMPTY_SHAPE_PROXYTYPE, + COMPOUND_SHAPE_PROXYTYPE, MAX_BROADPHASE_COLLISION_TYPES }; diff --git a/Bullet/CollisionDispatch/CompoundCollisionAlgorithm.cpp b/Bullet/CollisionDispatch/CompoundCollisionAlgorithm.cpp new file mode 100644 index 000000000..a608df2cb --- /dev/null +++ b/Bullet/CollisionDispatch/CompoundCollisionAlgorithm.cpp @@ -0,0 +1,35 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#include "CollisionDispatch/CompoundCollisionAlgorithm.h" + + +CompoundCollisionAlgorithm::CompoundCollisionAlgorithm( const CollisionAlgorithmConstructionInfo& ci,BroadphaseProxy* proxy0,BroadphaseProxy* proxy1) +{ +} + +CompoundCollisionAlgorithm::~CompoundCollisionAlgorithm() +{ +} + +void CompoundCollisionAlgorithm::ProcessCollision (BroadphaseProxy* proxy0,BroadphaseProxy* proxy1,const DispatcherInfo& dispatchInfo) +{ + +} + +float CompoundCollisionAlgorithm::CalculateTimeOfImpact(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1,const DispatcherInfo& dispatchInfo) +{ + return 1.f; +} \ No newline at end of file diff --git a/Bullet/CollisionDispatch/CompoundCollisionAlgorithm.h b/Bullet/CollisionDispatch/CompoundCollisionAlgorithm.h new file mode 100644 index 000000000..ee82675b8 --- /dev/null +++ b/Bullet/CollisionDispatch/CompoundCollisionAlgorithm.h @@ -0,0 +1,51 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef COMPOUND_COLLISION_ALGORITHM_H +#define COMPOUND_COLLISION_ALGORITHM_H + +#include "BroadphaseCollision/CollisionAlgorithm.h" +#include "BroadphaseCollision/Dispatcher.h" +#include "BroadphaseCollision/BroadphaseInterface.h" + +#include "NarrowPhaseCollision/PersistentManifold.h" +class Dispatcher; +#include "BroadphaseCollision/BroadphaseProxy.h" + + + +/// CompoundCollisionAlgorithm supports collision between CompoundCollisionShapes and other collision shapes +/// Place holder, not fully implemented yet +class CompoundCollisionAlgorithm : public CollisionAlgorithm +{ + + BroadphaseProxy m_compound; + + BroadphaseProxy m_other; + + +public: + + CompoundCollisionAlgorithm( const CollisionAlgorithmConstructionInfo& ci,BroadphaseProxy* proxy0,BroadphaseProxy* proxy1); + + virtual ~CompoundCollisionAlgorithm(); + + virtual void ProcessCollision (BroadphaseProxy* proxy0,BroadphaseProxy* proxy1,const DispatcherInfo& dispatchInfo); + + float CalculateTimeOfImpact(BroadphaseProxy* proxy0,BroadphaseProxy* proxy1,const DispatcherInfo& dispatchInfo); + +}; + +#endif //COMPOUND_COLLISION_ALGORITHM_H diff --git a/Bullet/CollisionShapes/CompoundShape.cpp b/Bullet/CollisionShapes/CompoundShape.cpp new file mode 100644 index 000000000..8104a3afa --- /dev/null +++ b/Bullet/CollisionShapes/CompoundShape.cpp @@ -0,0 +1,49 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#include "CompoundShape.h" + + +#include "CollisionShape.h" + + +CompoundShape::CompoundShape() +{ +} + + +CompoundShape::~CompoundShape() +{ +} + + + ///GetAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version +void CompoundShape::GetAabb(const SimdTransform& t,SimdVector3& aabbMin,SimdVector3& aabbMax) const +{ + SimdVector3 margin(GetMargin(),GetMargin(),GetMargin()); + + aabbMin = t.getOrigin() - margin; + + aabbMax = t.getOrigin() + margin; + +} + +void CompoundShape::CalculateLocalInertia(SimdScalar mass,SimdVector3& inertia) +{ + assert(0); +} + + + diff --git a/Bullet/CollisionShapes/CompoundShape.h b/Bullet/CollisionShapes/CompoundShape.h new file mode 100644 index 000000000..02b04a2f3 --- /dev/null +++ b/Bullet/CollisionShapes/CompoundShape.h @@ -0,0 +1,79 @@ +/* +Bullet Continuous Collision Detection and Physics Library +Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/ + +This software is provided 'as-is', without any express or implied warranty. +In no event will the authors be held liable for any damages arising from the use of this software. +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it freely, +subject to the following restrictions: + +1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required. +2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software. +3. This notice may not be removed or altered from any source distribution. +*/ + +#ifndef COMPOUND_SHAPE_H +#define COMPOUND_SHAPE_H + +#include "CollisionShape.h" + +#include "SimdVector3.h" +#include "SimdTransform.h" +#include "SimdMatrix3x3.h" +#include +#include "CollisionShapes/CollisionMargin.h" + + + +/// CompoundShape allows to store multiple other CollisionShapes +/// This allows for concave collision objects. This is more general then the Static Concave TriangleMeshShape. +class CompoundShape : public CollisionShape +{ +public: + CompoundShape(); + + virtual ~CompoundShape(); + + + ///GetAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version + void GetAabb(const SimdTransform& t,SimdVector3& aabbMin,SimdVector3& aabbMax) const; + + + virtual void setLocalScaling(const SimdVector3& scaling) + { + m_localScaling = scaling; + } + virtual const SimdVector3& getLocalScaling() const + { + return m_localScaling; + } + + virtual void CalculateLocalInertia(SimdScalar mass,SimdVector3& inertia); + + virtual int GetShapeType() const { return COMPOUND_SHAPE_PROXYTYPE;} + + virtual void SetMargin(float margin) + { + m_collisionMargin = margin; + } + virtual float GetMargin() const + { + return m_collisionMargin; + } + virtual char* GetName()const + { + return "Compound"; + } + + +private: + SimdScalar m_collisionMargin; +protected: + SimdVector3 m_localScaling; + +}; + + + +#endif //COMPOUND_SHAPE_H