我有一个带有伪随机生成地形(由三角形组成)的 3D 环境。我想简单地检测3D 边界框和地形三角形之一是否发生碰撞;我怎样才能做到这一点?我读了这个问题,这几乎正是我想要的,但答案并不令人满意,因为它基本上只提供了一个 AABB 算法......
PS:三角形是用3个3D点定义的,边界框可以用它的8个顶点来定义。
我有一个带有伪随机生成地形(由三角形组成)的 3D 环境。我想简单地检测3D 边界框和地形三角形之一是否发生碰撞;我怎样才能做到这一点?我读了这个问题,这几乎正是我想要的,但答案并不令人满意,因为它基本上只提供了一个 AABB 算法......
PS:三角形是用3个3D点定义的,边界框可以用它的8个顶点来定义。
要在盒子和随机形状之间进行碰撞检测(假设只有直边),请确定形状的任何点是否包含在盒子内。基本上是这样的(伪代码):
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++ 中)。您将要使用的将是三角形与线段的交点,您需要对边界框中的每个线段重复此操作(框中的所有矢量组合)。