1

疑似ランダムに生成された地形 (三角形で構成されている) を持つ 3D 環境があります。3D バウンディング ボックスと地形三角形の 1 つが衝突したかどうかを単純に検出したい。これどうやってするの?私はこの質問を読みましたが、これは私が望むものとほぼ同じですが、基本的にAABBアルゴリズムのみを提供するため、答えは満足のいくものではありません...

PS: 三角形は 3 つの 3D ポイントで定義され、バウンディング ボックスは 8 つの頂点で定義できます。

4

1 に答える 1

1

ボックスとランダムな形状 (まっすぐな側面のみを想定) との間の衝突検出を行うには、形状のいずれかの点がボックス内に含まれているかどうかを判断します。基本的には次のようなものです(疑似コード):

let objectsCollide boundingBox shape
    shape.vertexes
    |> Seq.forall (fun v -> boundingBox <|> vertex
    |> not

let (<|>) a b = 
    let vertex = a.vertexes[0]
    vertex.neighbors
    |> Seq.forall (fun neighbor ->if b is between v and neighbor
                                      return false
                                  else 
                                      true
    |> not

ここには、さまざまな交差問題の実装があります(c++)。使用したいものは、三角形と線分との交点であり、バウンディング ボックス (ボックス内のベクトルのすべての組み合わせ) 内の線分ごとに繰り返す必要があります。

于 2013-07-29T15:29:32.147 に答える