Differential D8762 Diff 28333 extern/bullet2/src/BulletCollision/CollisionShapes/btConvexHullShape.h
Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/BulletCollision/CollisionShapes/btConvexHullShape.h
| Show All 11 Lines | |||||
| 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_CONVEX_HULL_SHAPE_H | #ifndef BT_CONVEX_HULL_SHAPE_H | ||||
| #define BT_CONVEX_HULL_SHAPE_H | #define BT_CONVEX_HULL_SHAPE_H | ||||
| #include "btPolyhedralConvexShape.h" | #include "btPolyhedralConvexShape.h" | ||||
| #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types | #include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types | ||||
| #include "LinearMath/btAlignedObjectArray.h" | #include "LinearMath/btAlignedObjectArray.h" | ||||
| ///The btConvexHullShape implements an implicit convex hull of an array of vertices. | ///The btConvexHullShape implements an implicit convex hull of an array of vertices. | ||||
| ///Bullet provides a general and fast collision detector for convex shapes based on GJK and EPA using localGetSupportingVertex. | ///Bullet provides a general and fast collision detector for convex shapes based on GJK and EPA using localGetSupportingVertex. | ||||
| ATTRIBUTE_ALIGNED16(class) btConvexHullShape : public btPolyhedralConvexAabbCachingShape | ATTRIBUTE_ALIGNED16(class) | ||||
| btConvexHullShape : public btPolyhedralConvexAabbCachingShape | |||||
| { | { | ||||
| btAlignedObjectArray<btVector3> m_unscaledPoints; | btAlignedObjectArray<btVector3> m_unscaledPoints; | ||||
| public: | public: | ||||
| BT_DECLARE_ALIGNED_ALLOCATOR(); | BT_DECLARE_ALIGNED_ALLOCATOR(); | ||||
| ///this constructor optionally takes in a pointer to points. Each point is assumed to be 3 consecutive btScalar (x,y,z), the striding defines the number of bytes between each point, in memory. | ///this constructor optionally takes in a pointer to points. Each point is assumed to be 3 consecutive btScalar (x,y,z), the striding defines the number of bytes between each point, in memory. | ||||
| ///It is easier to not pass any points in the constructor, and just add one point at a time, using addPoint. | ///It is easier to not pass any points in the constructor, and just add one point at a time, using addPoint. | ||||
| ///btConvexHullShape make an internal copy of the points. | ///btConvexHullShape make an internal copy of the points. | ||||
| btConvexHullShape(const btScalar* points=0,int numPoints=0, int stride=sizeof(btVector3)); | btConvexHullShape(const btScalar* points = 0, int numPoints = 0, int stride = sizeof(btVector3)); | ||||
| void addPoint(const btVector3& point, bool recalculateLocalAabb = true); | void addPoint(const btVector3& point, bool recalculateLocalAabb = true); | ||||
| btVector3* getUnscaledPoints() | btVector3* getUnscaledPoints() | ||||
| { | { | ||||
| return &m_unscaledPoints[0]; | return &m_unscaledPoints[0]; | ||||
| } | } | ||||
| const btVector3* getUnscaledPoints() const | const btVector3* getUnscaledPoints() const | ||||
| { | { | ||||
| return &m_unscaledPoints[0]; | return &m_unscaledPoints[0]; | ||||
| } | } | ||||
| ///getPoints is obsolete, please use getUnscaledPoints | ///getPoints is obsolete, please use getUnscaledPoints | ||||
| const btVector3* getPoints() const | const btVector3* getPoints() const | ||||
| { | { | ||||
| return getUnscaledPoints(); | return getUnscaledPoints(); | ||||
| } | } | ||||
| void optimizeConvexHull(); | |||||
| SIMD_FORCE_INLINE btVector3 getScaledPoint(int i) const | SIMD_FORCE_INLINE btVector3 getScaledPoint(int i) const | ||||
| { | { | ||||
| return m_unscaledPoints[i] * m_localScaling; | return m_unscaledPoints[i] * m_localScaling; | ||||
| } | } | ||||
| SIMD_FORCE_INLINE int getNumPoints() const | SIMD_FORCE_INLINE int getNumPoints() const | ||||
| { | { | ||||
| return m_unscaledPoints.size(); | return m_unscaledPoints.size(); | ||||
| } | } | ||||
| 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; | ||||
| virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors,btVector3* supportVerticesOut,int numVectors) const; | virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const; | ||||
| virtual void project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin,btVector3& witnesPtMax) const; | virtual void project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const; | ||||
| //debugging | //debugging | ||||
| virtual const char* getName()const {return "Convex";} | virtual const char* getName() const { return "Convex"; } | ||||
| virtual int getNumVertices() const; | virtual int getNumVertices() const; | ||||
| virtual int getNumEdges() const; | virtual int getNumEdges() const; | ||||
| virtual void getEdge(int i,btVector3& pa,btVector3& pb) const; | virtual void getEdge(int i, btVector3& pa, btVector3& pb) const; | ||||
| virtual void getVertex(int i,btVector3& vtx) const; | virtual void getVertex(int i, btVector3& vtx) const; | ||||
| virtual int getNumPlanes() const; | virtual int getNumPlanes() const; | ||||
| virtual void getPlane(btVector3& planeNormal,btVector3& planeSupport,int i ) const; | virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const; | ||||
| virtual bool isInside(const btVector3& pt,btScalar tolerance) const; | virtual bool isInside(const btVector3& pt, btScalar tolerance) const; | ||||
| ///in case we receive negative scaling | ///in case we receive negative scaling | ||||
| virtual void setLocalScaling(const btVector3& scaling); | virtual void setLocalScaling(const btVector3& scaling); | ||||
| virtual int calculateSerializeBufferSize() const; | virtual int calculateSerializeBufferSize() const; | ||||
| ///fills the dataBuffer and returns the struct name (and 0 on failure) | ///fills the dataBuffer and returns the struct name (and 0 on failure) | ||||
| virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; | virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const; | ||||
| }; | }; | ||||
| // clang-format off | |||||
| ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 | ///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64 | ||||
| struct btConvexHullShapeData | struct btConvexHullShapeData | ||||
| { | { | ||||
| btConvexInternalShapeData m_convexInternalShapeData; | btConvexInternalShapeData m_convexInternalShapeData; | ||||
| btVector3FloatData *m_unscaledPointsFloatPtr; | btVector3FloatData *m_unscaledPointsFloatPtr; | ||||
| btVector3DoubleData *m_unscaledPointsDoublePtr; | btVector3DoubleData *m_unscaledPointsDoublePtr; | ||||
| int m_numUnscaledPoints; | int m_numUnscaledPoints; | ||||
| char m_padding3[4]; | char m_padding3[4]; | ||||
| }; | }; | ||||
| // clang-format on | |||||
| SIMD_FORCE_INLINE int btConvexHullShape::calculateSerializeBufferSize() const | SIMD_FORCE_INLINE int btConvexHullShape::calculateSerializeBufferSize() const | ||||
| { | { | ||||
| return sizeof(btConvexHullShapeData); | return sizeof(btConvexHullShapeData); | ||||
| } | } | ||||
| #endif //BT_CONVEX_HULL_SHAPE_H | #endif //BT_CONVEX_HULL_SHAPE_H | ||||