Skip to content

Commit cccdd36

Browse files
committed
- physics: support arbitrary convex shape in CEqCollisionObject::Initialize
1 parent 3fec51c commit cccdd36

2 files changed

Lines changed: 25 additions & 3 deletions

File tree

‎shared/physics/eqCollision_Object.cpp‎

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ bool CEqCollisionObject::Initialize( CEqBulletIndexedMesh* mesh, bool internalEd
178178
return true;
179179
}
180180

181-
bool CEqCollisionObject::Initialize(const FVector3D& boxMins, const FVector3D& boxMaxs)
181+
bool CEqCollisionObject::Initialize(const Vector3D& boxMins, const Vector3D& boxMaxs)
182182
{
183183
using namespace EqBulletUtils;
184184

@@ -189,7 +189,7 @@ bool CEqCollisionObject::Initialize(const FVector3D& boxMins, const FVector3D& b
189189

190190
ConvertDKToBulletVectors(vecHalfExtents, ext);
191191

192-
m_center = (boxMins+boxMaxs)*0.5f;
192+
m_center = (boxMins + boxMaxs) * 0.5f;
193193

194194
btBoxShape* box = new btBoxShape( vecHalfExtents );
195195
box->initializePolyhedralFeatures();
@@ -258,6 +258,27 @@ bool CEqCollisionObject::Initialize(float radius, float height)
258258
return true;
259259
}
260260

261+
bool CEqCollisionObject::Initialize(ArrayCRef<Vector3D> points, float margin)
262+
{
263+
ASSERT(!m_shape);
264+
265+
m_numShapes = 1;
266+
m_shapeList = nullptr;
267+
268+
m_shape = new btConvexHullShape(reinterpret_cast<const float*>(points.ptr()), points.numElem(), sizeof(points[0]));
269+
m_shape->setMargin(margin == 0.0f ? ph_margin.GetFloat() : margin);
270+
m_shapeOwning = OWNS_SHAPE;
271+
272+
m_collObject = new btCollisionObject();
273+
m_collObject->setCollisionShape(m_shape);
274+
275+
InitAABB();
276+
277+
m_collObject->setUserPointer(this);
278+
279+
return true;
280+
}
281+
261282
ArrayCRef<btCollisionShape*> CEqCollisionObject::GetBulletCollisionShapes() const
262283
{
263284
return ArrayCRef<btCollisionShape*>(m_numShapes > 1 ? m_shapeList : &m_shape, m_numShapes);

‎shared/physics/eqCollision_Object.h‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ class CEqCollisionObject
7171
bool Initialize(const StudioPhysData& physData, int objIdx); ///< Studio data with physics object id
7272
bool Initialize(const StudioPhyObjData& physObject); ///< Studio physics object
7373
bool Initialize(CEqBulletIndexedMesh* mesh, bool internalEdges); ///< Triangle mesh shape TODO: different container
74-
bool Initialize(const FVector3D& boxMins, const FVector3D& boxMaxs); ///< bounding box
74+
bool Initialize(const Vector3D& boxMins, const Vector3D& boxMaxs); ///< bounding box
75+
bool Initialize(ArrayCRef<Vector3D> points, float margin = 0.0f); ///< convex shape
7576
bool Initialize(float radius); ///< sphere
7677
bool Initialize(float radius, float height); ///< cylinder
7778

0 commit comments

Comments
 (0)