OpenGL を使用して 3D 環境でゲームを作成しています。ほとんどのオブジェクト/ワールドの衝突に対して、スイープ楕円体の衝突検出/応答システムを実装していますが、これは正常に機能します。
私が直面している問題は、そのシステムをオブジェクト間の衝突検出システムと組み合わせることです。私が設計段階で解決しようとしている本当の問題は、別のオブジェクトの動きを止めたり変更したりする可能性のあるオブジェクトを見ているときです (たとえば、移動できるが、プレーヤーがぶつかると「壁」として機能する木枠など)。
次のようなことをしなければならないと思います。
- オブジェクトの変位を見つける
- オブジェクトが世界と衝突する最も早い時間を見つけます (a)
- オブジェクトが他のオブジェクトと衝突する最も早い時間を見つけます(もちろん、大まかなフェーズで選別されます)
- (a)または(b)のいずれか小さい方の変位に沿ってオブジェクトを移動し、応答を実行します。
- ディスプレイスメントが完全に使用されるまで繰り返します
これは正しいです?チェックを繰り返すたびに、衝突する可能性のあるオブジェクトをそれぞれチェックする必要があるため、これは非常にコストがかかるようです。
別の問題: 他のオブジェクトをプッシュするオブジェクトについて:
例として、箱が落ちてプレーヤーを押したとします。プレイヤーに当たるまでクレートを移動し、クレートの移動を終了する前に、プレイヤーが押されたときに衝突検出を実行する必要があります。また、プッシュが別のプッシュを引き起こす可能性があるため、法外に高価になる可能性があるようです。
どんなガイダンスも大歓迎です。