編集: https://gamedev.stackexchange.com/questions/100404/rigidbody-physics-concept-why-translate-collision-shape-on-the-fly-instead-of-mで、クロスポストは私が受け入れたいくつかの回答を受け取りました
Box2D、Phys2D (両方とも 2D)、JBullet (3D) などの物理エンジンのソースコードを Java で調べてみました。
各ステップで剛体が移動して変化する一方で、それに付随する衝突形状は変化しないことがわかりました。代わりに、それらは常に座標原点の周りに配置されたままになります。2 つの Rigidbody の衝突をチェックすると、それぞれから "translation" オブジェクトがフェッチされ、チェックされた 2 つの形状の頂点 (または形状の種類によっては他の定義プロパティ) をアタッチメントのワールド位置にオンザフライで移動するために使用されます。これらの情報は、衝突を検出して対応するために使用されます。
主な目的は、説明したシナリオではステートレスであり、必要な情報が各ステップでオンザフライで計算されるため、メモリを節約できるため、同じシェイプ インスタンスを複数のボディに再利用できることであると結論付けました。
しかし、私は現在、シェイプの位置プロパティをメンバー値と同様に変更する方が有利だと考えています。各形状の aabb と頂点は、各ステップで 1 回変更されるため、1 つの形状を他の複数の形状と交差させるときに、同じ頂点を複数回計算する必要はありません。さらに、シェイプは 1 つのボディでしか使用されないため、シェイプの領域プロパティ (ダメージ変形) を変更することもできます。
質問は次のとおりです。
変更可能な衝突形状ではなく、位置的に不変の衝突形状を使用するのが一般的なのはなぜですか?