1

我有一个带有伪随机生成地形(由三角形组成)的 3D 环境。我想简单地检测3D 边界框和地形三角形之一是否发生碰撞;我怎样才能做到这一点?我读了这个问题,这几乎正是我想要的,但答案并不令人满意,因为它基本上只提供了一个 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 回答