【发布时间】:2009-08-23 10:47:15
【问题描述】:
我有一个球体,我从相机的位置拍摄,它使用相机的前向矢量沿相机面对的方向行进。
我想知道如何检测我的球体和另一个网格之间的碰撞点。
如何使用 MOC 或 OGRE 检查两个网格之间的碰撞点?
更新:应该在前面提到过。我无法使用第 3 方物理库,因为我需要自己开发它(uni 项目)。
【问题讨论】:
标签: physics collision-detection ogre3d
我有一个球体,我从相机的位置拍摄,它使用相机的前向矢量沿相机面对的方向行进。
我想知道如何检测我的球体和另一个网格之间的碰撞点。
如何使用 MOC 或 OGRE 检查两个网格之间的碰撞点?
更新:应该在前面提到过。我无法使用第 3 方物理库,因为我需要自己开发它(uni 项目)。
【问题讨论】:
标签: physics collision-detection ogre3d
这里公认的解决方案完全不起作用。如果网格密度通常足够高以至于网格上没有两个点的距离比碰撞球的直径更远,它甚至会起作用。想象一个小球体在 huuuge 立方体网格的随机矢量上短距离发射。立方体网格只有 8 个顶点。立方体实际击中这 8 个顶点之一的几率是多少?
这确实需要通过每个多边形碰撞来完成。您需要能够检查多边形和球体的交集(如果您想避免像 reinier 提到的隧道效应,还需要检查圆柱体)。有很多在线和书籍形式的资源,但http://www.realtimerendering.com/intersections.html 可能是一个有用的起点。
关于优化的cmets很好。早期的机会(可能是针对网格的边界球或轴对齐的边界体积进行快速检查)是必不可少的。即使您确定自己位于包围体中,从潜在候选者列表中剔除不太可能的多边形(太远、朝向错误的方向等)可能也是一个好主意。
【讨论】:
我认为最好的办法是使用专门的物理库。
就是这么说的。如果我考虑这个问题,我会怀疑它并不难:
球体有一个中点和一个半径。对于网格中的每个点,请执行以下操作:
当然,这个程序会相当慢。 加快速度的几件事:
啊...只有当球体行进速度不太快(相对于网格)时,此例程才有效。如果它的速度非常快,并且您每秒对其采样 X 次,那么球体很可能会直接穿过网格而不会发生每次碰撞。为了克服这个问题,您必须使用“扫描体积”,这基本上使您的球体变成了一个管子。使数学变得复杂。
【讨论】: