btConeShape

Kerrax
Posts: 1
Joined: Wed Nov 03, 2010 5:35 pm

btConeShape

Post by Kerrax »

I'm a newbie and maybe I'm asking dumb questions, but:

1. Has btConeShape::calculateLocalInertia been implemented correctly?

Code: Select all

	virtual void	calculateLocalInertia(btScalar mass,btVector3& inertia) const
	{
		btTransform identity;
		identity.setIdentity();
		btVector3 aabbMin,aabbMax;
		getAabb(identity,aabbMin,aabbMax);

		btVector3 halfExtents = (aabbMax-aabbMin)*btScalar(0.5);

		btScalar margin = getMargin();

		btScalar lx=btScalar(2.)*(halfExtents.x()+margin);
		btScalar ly=btScalar(2.)*(halfExtents.y()+margin);
		btScalar lz=btScalar(2.)*(halfExtents.z()+margin);
		const btScalar x2 = lx*lx;
		const btScalar y2 = ly*ly;
		const btScalar z2 = lz*lz;
		const btScalar scaledmass = mass * btScalar(0.08333333);

		inertia = scaledmass * (btVector3(y2+z2,x2+z2,x2+y2));

//		inertia.x() = scaledmass * (y2+z2);
//		inertia.y() = scaledmass * (x2+z2);
//		inertia.z() = scaledmass * (x2+y2);
	}
Since 0.08333333 is equal to 1/12, the formula looks like inertia of a box, not a cone.

And I've found different formulas for cone (http://en.wikipedia.org/wiki/List_of_moments_of_inertia):
Image
Image
Image

2.And one more question:

As far as I understood, the local center of mass of any CollisionShape must be at (local) position (0, 0, 0). Right?
However btConeShape puts (0,0,0) at half of its height, however the center of mass of a cone lies at a quarter of its height.