4

btDiscreteDynamicsWorld 是否可以从整个 DynamicsWorld 重新创建/扩展它自己的八叉树/SpatialHash 并随着我从 (0,0,0) 增加添加对象的距离而继续扩展它?例如,向八叉树添加一个新的顶层,从而使用更多的内存并且永远不会再次缩小它?

我使用包含多个 btBvhTriangleMeshShape 对象的 btDiscreteDynamicsWorld 进行静态碰撞。还有一些其他原始实体(btBoxes 和 btCylinders)与静态三角形网格碰撞。我不断地将“动作点”从 DynamicsWorld 的原点 (0,0,0) 移开,移除旧的 TriangleMeshes 和旧的原始实体,同时以相同的方式添加新实体。(程序生成的世界)当我继续沿 x 轴移动时,内存使用量不断增加。但是当我在某个点停下来并回到我来的路上,再次删除和添加新形状时,内存使用保持不变。

在通过从我的堆中正确添加和删除(也删除)碰撞对象(如手动删除 MotionStates 等)来寻找可能的内存泄漏之后,我仍然面临这种行为。

子弹的技术文档不是很详细,浏览子弹的源代码也没有给我任何线索。API 没有显示类似 recalcOctree() 函数的内容。

我可以在不删除整个 btDynamicsWorld 对象的情况下强制重新计算内部碰撞结构吗?还是我在这里完全走错了路?与原点附近的对象相比,在添加远离 (0,0,0) 的对象时,是否有其他人经历过子弹中的内存使用量增加?

我使用子弹 2.79

4

0 回答 0