0

シンプルな 3D OpenGL ゲームを作成しています。現時点では、4 つの境界壁、内壁のランダムな分布、およびプレーヤー用の単純なクワッド キューブがあります。

プレイヤーとすべての壁の間の衝突検出を設定したいと考えています。xまたはz座標が値より小さいか大きいかを確認するだけなので、境界壁を使用すると簡単です。問題は内壁です。小さな長方形の壁セグメントを保持する glGenList があります。初期設定で、x、z 座標の配列をランダムに生成し、これらの壁セグメントを描画シーンのこの位置に変換します。また、衝突検出を複雑にする 45 または 90 の回転角度も追加しました。

ここで衝突を検出する方法を教えてください。各壁セクションの座標、各壁セクションのサイズ、およびプレイヤーの座標があります。

プレーヤーと壁の周りの境界ボックスを見ているのでしょうか、それともより良い代替手段がありますか?

4

2 に答える 2

0

あなたの質問は主に、ある角度で壁との衝突を検出することに関するものだと思います。これは、「点が線と一致するかどうかを検出する」と本質的に同じです。ここで行う方法に対する答えがあります。

ポイントが特定のラインに属しているかどうかを確認するにはどうすればよいですか?

(コードは C# の場合がありますが、その背後にある計算はどの言語にも当てはまります)。現在の設計では Y は考慮されていないように見えるため、これらの式の Y を Z に置き換える必要があります。

「良い」衝突検出を行う方法について書かれた多くの記事や本さえあります。もちろん、これの一部は、「非常に正確なコードが必要か、非常に高速なコードが必要か」に帰着します。「完璧な」シミュレーションの場合、正確さのために速度を犠牲にする場合があります。ほとんどのゲームでは、プレーヤーが壁の交差点を通過したために、プレーヤーの体が壁を少し「へこませる」ことがありますが、これはおそらく許容範囲内です。

「空間を仕切る」のにも便利です。これの一般的な方法は「バイナリ スペース パーティショニング」です。これについては、ここでうまく説明および図解されています

ゲーム プログラミングに関する書籍では、衝突検出の基本原則について説明する必要があります。ウィキペディアのエントリを含む、それに関するウェブ上の記事もたくさんあります:http://en.wikipedia.org/wiki/Collision_detection

于 2013-11-14T14:43:53.563 に答える