btGjkPairDetector maxIter exceeded:1002
sepAxis=(-0.143599,0.031060,0.286383), squaredDistance=0.103600, shapeTypeA=9, shapeTypeB=9
The program finished without no colliders. However, after drawing those ellipsoids in AutoCAD with the bullet Calculation results(worldTransform), A few overlaps is found. Then I try to change the margin of btCollisonShape to 0.1 and 0.2, but this problem still exits. The semimajor axis of ellipsoid is range from 2.5 to 10. If I use btSphereShape or btConvexHullShape to do it, the program goes well, and no overlaps occur in CAD. Any Suggestion?
The code to create ellipsiod shape
Code: Select all
[/size]
class EllipsoidShape : public btMultiSphereShape
{
public:
EllipsoidShape(const btVector3& radii, btScalar margin = CONVEX_DISTANCE_MARGIN, btVector3&& position = btVector3(0.0, 0.0, 0.0), btScalar radius = 1.0);
};
EllipsoidShape::EllipsoidShape(const btVector3& radii, btScalar margin, btVector3&& position, btScalar radius)
: btMultiSphereShape(&position, &radius, 1), m_volume(4.0 / 3.0 * SIMD_PI * radii.getX() * radii.getY() * radii.getZ())
{
m_userIndex = ELLIPSOID_SHAPE;
setLocalScaling(radii);
setMargin(margin);
recalcLocalAabb();
}
Code: Select all
void AggregatePacking::setCollisionObjectTransform(btCollisionObject* colObj, const btVector3& position, const btQuaternion& orientation) const
{
btTransform tr;
tr.setOrigin(position);
tr.setRotation(orientation);
colObj->setWorldTransform(tr);
m_collisionWorld->refreshBroadphaseProxy(colObj)
}