简单的3D盒到多边形碰撞

时间:2013-07-27 21:08:19

标签: .net f# collision-detection

我有一个伪随机生成的地形(由三角形组成)的3D环境。如果3D边界框和其中一个地形三角形发生碰撞,我想简单地检测;我怎样才能做到这一点?我读了this这个问题,这正是我想要的,但答案并不令人满意,因为它基本上只提供了一个AABB算法......

PS:三角形用3个3D点定义,边界框可以用8个顶点定义。

1 个答案:

答案 0 :(得分: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

有各种交叉问题的实现here(在c ++中)。您要使用的那个将是具有线段的三角形的交集,您需要为边界框中的每个线段重复(框中的向量的所有组合)。