我有一个伪随机生成的地形(由三角形组成)的3D环境。如果3D边界框和其中一个地形三角形发生碰撞,我想简单地检测;我怎样才能做到这一点?我读了this这个问题,这正是我想要的,但答案并不令人满意,因为它基本上只提供了一个AABB算法......
PS:三角形用3个3D点定义,边界框可以用8个顶点定义。
答案 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 ++中)。您要使用的那个将是具有线段的三角形的交集,您需要为边界框中的每个线段重复(框中的向量的所有组合)。