Использование памяти Bullet Physics в больших изменяющихся мирах с множеством треугольных сеток - PullRequest
4 голосов
/ 21 марта 2012

Может ли btDiscreteDynamicsWorld воссоздать / расширить свой собственный Octree / SpatialHash из всего DynamicsWorld и продолжать его расширять по мере увеличения расстояния добавляемых объектов от (0,0,0)?Например, добавление нового верхнего уровня в октодерево и, следовательно, использование большего объема памяти и его повторное сжатие?

Я использую btDiscreteDynamicsWorld, содержащий несколько объектов btBvhTriangleMeshShape для статического столкновения.Также некоторые другие примитивные сущности (btBoxes и btCylinders) сталкиваются со статическими треугольными сетками.Я постоянно перемещаю «точку действия» от источника (0,0,0) DynamicsWorld, удаляя старые TriangleMeshes и старые примитивные сущности, а также добавляя новые таким же образом.(процедурно сгенерированный мир) Когда я продолжаю двигаться вдоль оси X, использование памяти постоянно увеличивается.Но когда я в какой-то момент останавливаюсь и возвращаюсь тем же путем, что и раньше, снова удаляя и добавляя новые фигуры, использование памяти остается постоянным.

После поиска возможных утечек памяти с добавлением и удалением (а также удалением) объектов столкновениядолжным образом из моей кучи (например, удаление MotionStates вручную и т. д.), я все еще сталкиваюсь с этим поведением.

Техническая документация пули не очень подробная, и просмотр исходного кода пули также не дал мне никаких подсказок.API не показывает что-то вроде функции recalcOctree ().

Можно ли принудительно выполнить полный пересчет внутренней структуры столкновения, не удаляя весь объект btDynamicsWorld?Или я совершенно не на своем пути?Кто-нибудь еще испытывал увеличение использования памяти в маркере при добавлении объектов, удаленных от (0,0,0), по сравнению с объектами вблизи источника?

Я использую Bullet 2.79

...