C++ で 2D 物理エンジンを実験しようとしています。これまでのところ、最も人気があるのは Box2D のようです。残念ながら、Box2D は剛体物理エンジンであり、私が試したいことにはあまり役に立ちません。
この形状が剛体または他の非剛体の形状と衝突したときにその形状が柔軟になるように、バネで結合された多数の頂点を持つ形状を定義できるようにしたいと考えています。
今、剛体のみを使用して Box2D でこれを行う方法を考えようとしましたが、常に欠陥があるようです:
- 柔軟な形状の外縁には、長方形または線分を使用します。これらは他の形状と衝突します。残念ながら、それらは弾力性がないため、望ましい効果は見られません。
- シェイプの各頂点は、独自の小さな円形のボディである可能性があります。これらのボディは、スプリングで結合できます。これは形状の変形に関してはうまく機能しますが、形状が硬いスパイクに着地し、スパイクが頂点間をちょうど通過した場合を想像してみてください。そうすると、形状がスパイクに引っかかってしまいます。
では、C++ でこの種の物理演算を実行する最善の方法は何でしょうか? できれば、物理エンジン全体を作成する必要はありません。Box2D の機能が不足しているだけかもしれません。多分それは正しい選択ではありません。では、正しい選択とは?