我有一个从相机位置拍摄的球体,它使用相机的前向矢量沿着相机朝向的方向移动。
我想知道如何检测球体与另一个网格之间碰撞的点。
我如何使用MOC或OGRE检查两个网格之间的碰撞点?
更新:本来应该提到这个。我无法使用第三方物理库,因为我需要自己开发(uni项目)。
答案 0 :(得分:8)
此处公认的解决方案不起作用。如果网格密度通常足够高,使得网格上没有两个点比碰撞球体的直径更远,那么它甚至可以工作。想象一下在huuuge立方体网格上随机向量上的短距离发射的小球体。立方体网格只有8个顶点。多维数据集实际上会击中这8个顶点之一的几率是多少?
这确实需要通过每个多边形碰撞来完成。你需要能够检查多边形和一个球体的交叉点(如果你想避免隧道效应,还需要一个圆柱体,如同提到的加速器)。在线和书籍形式有相当多的资源,但http://www.realtimerendering.com/intersections.html可能是一个有用的起点。
关于优化的评论很好。早期机会(可能是对网格的边界球或轴对齐的边界体积进行快速检查)是必不可少的。即使你已经确定自己在一个边界体积内,也许能够从潜在候选者列表中清除不太可能的多边形(太远,面向错误的方向等)可能是个好主意。
答案 1 :(得分:2)
我认为最好的方法是使用专门的物理库。
那就是说。如果我想到这个问题,我会怀疑它并不那么难:
球体有一个中点和一个半径。对于网格中的每个点,执行以下操作:
当然,这个例程会相当慢。 加快它的一些事情:
啊......这个例程只有在球体移动得太快(相对于网格物体)时才有效。如果它会非常快地行进,并且你每秒采样X次,那么球体可能会在没有碰撞的情况下直接穿过网格。为了克服这个问题,你必须使用“扫掠体积”,它基本上可以使你的球体成为一个管子。使数学成倍增长。