4

btDiscreteDynamicsWorldは、DynamicsWorld全体から独自のOctree / SpatialHashを再作成/拡張し、追加されたオブジェクトの距離を(0,0,0)から増やしながら、拡張し続けることができますか?たとえば、octreeに新しいトップレベルを追加して、より多くのメモリを使用し、それを再び縮小することはありませんか?

静的衝突には、btBvhTriangleMeshShapeの複数のオブジェクトを含むbtDiscreteDynamicsWorldを使用します。また、静的三角形メッシュと衝突する他のいくつかのプリミティブエンティティ(btBoxesおよびbtCylinders)。「アクションポイント」をDynamicsWorldの原点(0,0,0)から常に遠ざけ、古いTriangleMeshesと古いプリミティブエンティティを削除し、同じ方法で新しいエンティティを追加します。(手続き型生成の世界)x軸に沿って移動し続けると、メモリ使用量が絶えず増加します。しかし、ある時点で停止して元の状態に戻り、新しいシェイプを削除して再度追加すると、メモリの使用量は一定に保たれます。

衝突オブジェクトをヒープから適切に追加および削除(また削除)して(MotionStatesを手動で削除するなど)、メモリリークの可能性を排除した後も、この動作に直面します。

弾丸の技術文書はあまり詳細ではなく、弾丸のソースコードをざっと見ただけでも手がかりは得られませんでした。APIは、recalcOctree()関数のようなものを表示しません。

btDynamicsWorldオブジェクト全体を削除せずに、内部衝突構造の完全な再計算を強制できますか?それとも私はここで完全に間違った実行をしていますか?原点に近いオブジェクトと比較して、(0,0,0)から遠く離れたオブジェクトを追加するときに、弾丸でメモリ使用量が増加したことを他の誰かが経験しましたか?

Bullet2.79を使用しています

4

0 に答える 0