我正在用食人魔和MOC编写一个物理模拟。
我有一个球体,我从相机的位置拍摄,它通过相机的前向矢量向摄像机所面对的方向运动。
我想知道如何检测我的球体和另一个网格之间碰撞的点。
如何使用MOC或OGRE检查两个网格之间的碰撞点?
更新:应该在前面提到这一点。我无法使用第三方物理库,因为我们需要自己开发(uni项目)。
发布于 2009-08-23 12:06:18
我认为最好的办法是使用一个专门的物理图书馆。
这就是说。如果我考虑到这个问题,我会怀疑这并不难:
球体有一个中点和一个半径。对于网格中的每一点,请执行以下操作:
当然,这个例程会相当慢。有几件事情可以加快速度:
啊..。这个例程只有在球体移动不太快(相对于网格)的情况下才有效。如果它运行得非常快,你每秒钟取样X次,很有可能球体会在没有每一次碰撞的情况下穿过网格。要克服这一点,你必须使用“扫描体积”,这基本上使你的球体成了一个管。使数学变得非常复杂。
发布于 2009-08-25 03:29:20
这里完全接受的解决方案是行不通的。如果网格密度一般都足够高,网格上没有两个点比碰撞球的直径更远的话,它甚至只能起作用。想象一下,在胡格立方体网格上,在一个随机矢量上,一个微小的球体在短距离发射。立方体网格只有8个色块。这个立方体会击中这8个色系中的一个的几率有多大?
这真的需要用每个多边形的碰撞来完成。您需要能够检查多边形和球体的交集(另外还有一个圆柱体,如果您想避免像reinier提到的那样进行隧道操作)。对于这个在线和书籍形式,有相当多的资源,但是http://www.realtimerendering.com/intersections.html可能是一个有用的起点。
关于优化的评论是很好的。早期的机会(可能是一个快速检查的边界球或轴对齐的网格包围体积)是必不可少的。即使你已经确定你在一个范围内,它可能是一个好主意,能够剔除不可能的多边形(太远,面对错误的方向,等等)。可能的候选人名单上。
https://stackoverflow.com/questions/1318269
复制相似问题