2

さて、プロシージャルに生成された地形があります ( http://www.swiftless.com/terraintuts.htmlに大まかに基づいています) 。

私はあなたが飛び回ることができるティーポット「飛行機」を手に入れました(三人称カメラ)

基本的には谷間などを無傷で飛ばすのが目的です。

私がうまくいかないのは、地形に衝突したかどうかを計算する方法ですか?

何か案は?

4

2 に答える 2

3

地形マップは 2 次元の点 (x, y) から地形の高さ (その点での TERRAIN[x, y]) までのマップであるため、地形マップは衝突のテストが特に簡単です。(t_x, t_y, t_z) にティーポット プレーンがある場合、(t_x, t_y) の地形の高さに対してその高さをテストするだけです。つまり、t_z < TERRAIN[x, y] の場合は、クラッシュしています。より正確な結果を得るために、地形に対して複数のポイント (おそらくティーポットの中心にある立方体の角) をテストできます。地形マップの粗さに応じて、近くのグリッド ポイントを選択するか、直線的に補間して、任意のポイントでの地形の高さを計算します。

于 2011-12-03T13:17:00.983 に答える
0

衝突検出に特化した本全体がありますが、私が取り組んでいる単純なゲームでは、境界球を定義する各エンティティの半径を作成することで衝突検出を処理します。すべてのフレームで、すべてのエンティティが他のすべてのエンティティと比較され、それらの間の距離が求められます。距離が 2 つのエンティティの半径を合わせた値よりも小さい場合は、衝突が記録されます。

これを行うために、各クラス (たとえば、ロケット、モンスター、プレイヤー、ツリーなど) に、衝突が発生したときのロジックを保持するクラス Entity をサブクラス化します。つまり、ロケットが発射されたときにモンスターを殺すことができますが、木を燃やすだけです (ロケットと木のエンティティがあると仮定します)。

私がフォローしている良い本は、これの多くをより詳細に説明しています:

http://www.amazon.co.uk/Beginning-OpenGL-Game-Programming-Second/dp/159863528X/ref=dp_ob_title_bk

于 2011-12-03T13:10:31.583 に答える