106 for (
int i=0;i<numVectors;i++)
115 for (
int j=0;j<numVectors;j++)
221 CenterCallback() : first(
true), ref(0, 0, 0),
sum(0, 0, 0), volume(0)
225 virtual void internalProcessTriangleIndex(
btVector3* triangle,
int partId,
int triangleIndex)
227 (void) triangleIndex;
236 btScalar vol =
btFabs((triangle[0] - ref).triple(triangle[1] - ref, triangle[2] - ref));
237 sum += (
btScalar(0.25) * vol) * ((triangle[0] + triangle[1] + triangle[2] + ref));
244 return (volume > 0) ?
sum / volume : ref;
261 InertiaCallback(
btVector3& center) :
sum(0, 0, 0, 0, 0, 0, 0, 0, 0), center(center)
265 virtual void internalProcessTriangleIndex(
btVector3* triangle,
int partId,
int triangleIndex)
267 (void) triangleIndex;
274 for (
int j = 0; j < 3; j++)
276 for (
int k = 0; k <= j; k++)
278 i[j][k] = i[k][j] = volNeg * (
btScalar(0.1) * (a[j] * a[k] + b[j] * b[k] + c[j] * c[k])
279 +
btScalar(0.05) * (a[j] * b[k] + a[k] * b[j] + a[j] * c[k] + a[k] * c[j] + b[j] * c[k] + b[k] * c[j]));
300 CenterCallback centerCallback;
303 btVector3 center = centerCallback.getCenter();
305 volume = centerCallback.getVolume();
307 InertiaCallback inertiaCallback(center);
312 inertia.
setValue(i[0][0], i[1][1], i[2][2]);