Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/BulletCollision/CollisionShapes/btSphereShape.h
| Show All 10 Lines | |||||
| 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. | 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. | 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. | 3. This notice may not be removed or altered from any source distribution. | ||||
| */ | */ | ||||
| #ifndef BT_SPHERE_MINKOWSKI_H | #ifndef BT_SPHERE_MINKOWSKI_H | ||||
| #define BT_SPHERE_MINKOWSKI_H | #define BT_SPHERE_MINKOWSKI_H | ||||
| #include "btConvexInternalShape.h" | #include "btConvexInternalShape.h" | ||||
| #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types | #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types | ||||
| ///The btSphereShape implements an implicit sphere, centered around a local origin with radius. | ///The btSphereShape implements an implicit sphere, centered around a local origin with radius. | ||||
| ATTRIBUTE_ALIGNED16(class) btSphereShape : public btConvexInternalShape | ATTRIBUTE_ALIGNED16(class) | ||||
| btSphereShape : public btConvexInternalShape | |||||
| { | { | ||||
| public: | public: | ||||
| BT_DECLARE_ALIGNED_ALLOCATOR(); | BT_DECLARE_ALIGNED_ALLOCATOR(); | ||||
| btSphereShape (btScalar radius) : btConvexInternalShape () | btSphereShape(btScalar radius) : btConvexInternalShape() | ||||
| { | { | ||||
| m_shapeType = SPHERE_SHAPE_PROXYTYPE; | m_shapeType = SPHERE_SHAPE_PROXYTYPE; | ||||
| m_localScaling.setValue(1.0, 1.0, 1.0); | |||||
| m_implicitShapeDimensions.setZero(); | |||||
| m_implicitShapeDimensions.setX(radius); | m_implicitShapeDimensions.setX(radius); | ||||
| m_collisionMargin = radius; | m_collisionMargin = radius; | ||||
| m_padding = 0; | |||||
| } | } | ||||
| virtual btVector3 localGetSupportingVertex(const btVector3& vec)const; | virtual btVector3 localGetSupportingVertex(const btVector3& vec) const; | ||||
| virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec)const; | virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const; | ||||
| //notice that the vectors should be unit length | //notice that the vectors should be unit length | ||||
| virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors,btVector3* supportVerticesOut,int numVectors) const; | virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; | ||||
| virtual void calculateLocalInertia(btScalar mass,btVector3& inertia) const; | virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const; | ||||
| virtual void getAabb(const btTransform& t,btVector3& aabbMin,btVector3& aabbMax) const; | virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const; | ||||
| btScalar getRadius() const { return m_implicitShapeDimensions.getX() * m_localScaling.getX();} | btScalar getRadius() const { return m_implicitShapeDimensions.getX() * m_localScaling.getX(); } | ||||
| void setUnscaledRadius(btScalar radius) | void setUnscaledRadius(btScalar radius) | ||||
| { | { | ||||
| m_implicitShapeDimensions.setX(radius); | m_implicitShapeDimensions.setX(radius); | ||||
| btConvexInternalShape::setMargin(radius); | btConvexInternalShape::setMargin(radius); | ||||
| } | } | ||||
| //debugging | //debugging | ||||
| virtual const char* getName()const {return "SPHERE";} | virtual const char* getName() const { return "SPHERE"; } | ||||
| virtual void setMargin(btScalar margin) | virtual void setMargin(btScalar margin) | ||||
| { | { | ||||
| btConvexInternalShape::setMargin(margin); | btConvexInternalShape::setMargin(margin); | ||||
| } | } | ||||
| virtual btScalar getMargin() const | virtual btScalar getMargin() const | ||||
| { | { | ||||
| //to improve gjk behaviour, use radius+margin as the full margin, so never get into the penetration case | //to improve gjk behaviour, use radius+margin as the full margin, so never get into the penetration case | ||||
| //this means, non-uniform scaling is not supported anymore | //this means, non-uniform scaling is not supported anymore | ||||
| return getRadius(); | return getRadius(); | ||||
| } | } | ||||
| }; | }; | ||||
| #endif //BT_SPHERE_MINKOWSKI_H | #endif //BT_SPHERE_MINKOWSKI_H | ||||