btDiscreteDynamicsWorld可能会从整个DynamicsWorld中重新创建/扩展它自己的Octree / SpatialHash并继续扩展它,因为我增加了从(0,0,0)添加对象的距离吗?例如,在八叉树中添加一个新的顶级,从而使用更多的内存而不再将其缩回?
我使用包含btBvhTriangleMeshShape的多个对象的btDiscreteDynamicsWorld进行静态碰撞。还有一些其他原始实体(btBoxes和btCylinders)与静态三角形网格相撞。 我将“行动点”从动态世界的原点(0,0,0)移开,移除旧的TriangleMeshes和旧的原始实体,同时也以相同的方式添加新的实体。 (程序生成的世界) 当我继续沿x轴移动时,内存使用量不断增加。但是当我在某个时刻停下来然后移回我的方式,再次删除并添加新形状时,内存使用保持不变。
通过从我的堆中正确添加和删除(也删除)碰撞对象(如手动删除MotionStates等)来寻找可能的内存泄漏之后,我仍然会遇到这种情况。
子弹的技术文档不是很详细,通过子弹的源代码浏览也没有给我任何线索。 API没有显示类似recalcOctree()函数的内容。
我可以强制完全重新计算内部碰撞结构而不删除整个btDynamicsWorld对象吗?或者我在这里完全错误的运行? 当添加远离(0,0,0)的对象与原点附近的对象相比时,是否还有其他人在子弹中增加了内存使用量?
我使用Bullet 2.79