Issue 395: [Patch] implement btCompoundShape::createAabbTreeFromChildren

Thanks Paul Dubois for the patch
This commit is contained in:
erwin.coumans
2010-06-18 00:39:42 +00:00
parent f6242087a1
commit 5e069f220e
2 changed files with 23 additions and 0 deletions

View File

@@ -285,6 +285,27 @@ void btCompoundShape::setLocalScaling(const btVector3& scaling)
}
void btCompoundShape::createAabbTreeFromChildren()
{
if ( !m_dynamicAabbTree )
{
void* mem = btAlignedAlloc(sizeof(btDbvt),16);
m_dynamicAabbTree = new(mem) btDbvt();
btAssert(mem==m_dynamicAabbTree);
for ( int index = 0; index < m_children.size(); index++ )
{
btCompoundShapeChild &child = m_children[index];
//extend the local aabbMin/aabbMax
btVector3 localAabbMin,localAabbMax;
child.m_childShape->getAabb(child.m_transform,localAabbMin,localAabbMax);
const btDbvtVolume bounds=btDbvtVolume::FromMM(localAabbMin,localAabbMax);
child.m_node = m_dynamicAabbTree->insert(bounds,(void*)index);
}
}
}
///fills the dataBuffer and returns the struct name (and 0 on failure)

View File

@@ -149,6 +149,8 @@ public:
return m_dynamicAabbTree;
}
void createAabbTreeFromChildren();
///computes the exact moment of inertia and the transform from the coordinate system defined by the principal axes of the moment of inertia
///and the center of mass to the current coordinate system. "masses" points to an array of masses of the children. The resulting transform
///"principal" has to be applied inversely to all children transforms in order for the local coordinate system of the compound