diff --git a/src/BulletCollision/CollisionShapes/btCompoundShape.cpp b/src/BulletCollision/CollisionShapes/btCompoundShape.cpp index d77193874..292dbbfbf 100644 --- a/src/BulletCollision/CollisionShapes/btCompoundShape.cpp +++ b/src/BulletCollision/CollisionShapes/btCompoundShape.cpp @@ -264,3 +264,19 @@ void btCompoundShape::calculatePrincipalAxisTransform(btScalar* masses, btTransf +void btCompoundShape::setLocalScaling(const btVector3& scaling) +{ + m_localScaling = scaling; + + for(int i = 0; i < m_children.size(); i++) + { + btTransform childTrans = getChildTransform(i); + btVector3 childScale = m_children[i].m_childShape->getLocalScaling(); + childScale = childScale * (childTrans.getBasis() * scaling); + m_children[i].m_childShape->setLocalScaling(childScale); + childTrans.setOrigin((childTrans.getOrigin())*scaling); + updateChildTransform(i, childTrans); + recalculateLocalAabb(); + } + +} diff --git a/src/BulletCollision/CollisionShapes/btCompoundShape.h b/src/BulletCollision/CollisionShapes/btCompoundShape.h index 577ef9513..eea1cac39 100644 --- a/src/BulletCollision/CollisionShapes/btCompoundShape.h +++ b/src/BulletCollision/CollisionShapes/btCompoundShape.h @@ -116,10 +116,8 @@ public: Use this yourself if you modify the children or their transforms. */ virtual void recalculateLocalAabb(); - virtual void setLocalScaling(const btVector3& scaling) - { - m_localScaling = scaling; - } + virtual void setLocalScaling(const btVector3& scaling); + virtual const btVector3& getLocalScaling() const { return m_localScaling;