球对边/孔碰撞检测和响应

时间:2011-05-06 12:39:23

标签: collision-detection game-physics

有人知道3D中的空洞碰撞检测和响应算法的良好范围吗?我花了很多时间用谷歌搜索没有成功。孔是2units的正方形.Sphere diameter = 3units。孔是轴对齐的。有重力和摩擦力。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

澄清: 我假设“孔”是指在与平面正交挤出的无限平面上的正方形,从而形成凹形。从你的问题来看,目前尚不清楚它是否可能是一个太空中的细线方块(它更容易检测到碰撞)。 3个单位的球体不能通过2个单位的正方形(假设2个单位是正方形的长度),你的意思是4个单位的正方形吗?有一个完美的2单位正方形,我可以想到3种接触配置:1面,2面和4面接触(边缘处的球体,角落处的所有4面都有,因为它比孔大) 。球体永远不会触及孔的内壁,只能触及边缘。这里没有凸顶点,所以它不能以有意义的方式真正触摸顶点(在正方形的顶点上放置会产生与在平面上休息相同的响应;它也是在拐角处休息时的退化情况两个角落的接触点都是一样的。)

另外,我假设您希望连续碰撞检测球体从有效配置开始(非穿透)。如果球体穿过角落的洞并且你希望从穿透中恢复得很好,那么找到良好的接触是有点棘手的,所以你最好的选择是不要让它穿透。

我相信你没有在google中找到碰撞检测算法,因为这种配置不够通用,不适合研究人员。由于孔是简单但凹入的形状,因此最有效的碰撞检测算法是将球体扫过孔(正方形)的任何边缘并抵靠平面。

假设球体从点p0以速度v0移动。平面是XZ平面(y = 0),方形有顶点( - 1,0,-1),(1,0,-1),(1,0,1),( - 1, 0,1)

要扫过飞机,只需找到时间t,使得v.y = 1.5(球的半径) 接触点 c 将是 p0 + v0 * t +(0,-1.5,0)。如果该接触点位于孔方块内(即 | c.x |< 1,| c.z |< 1 ),则继续扫描 - 球将接触孔边缘。否则计算碰撞响应与法线(0,1,0) - 平面法线。

要扫过任何边缘,你会扫过形成该边缘的无限线,即找到时间t,使得球的中心距离(p0 + v0 * t)到线等于球半径。如果您的细分受众群有 a b 以及正常方向 d =(ba)/ | ba | ,则可以找到球中心投影到line:((center-a),d)* d + a 。如果投影在片段上(即投影在 0 | b-a | 之间),则球接触该线。

在您的情况下,您不必将球扫过分段末端,但通常您必须对任何形状的任何凸角进行扫描。

我相信你可以在网上找到大量关于碰撞响应的论文。在最简单的情况下,它是无摩擦响应,其中一般的想法是找到沿着碰撞法线起作用的冲动,这将阻止球进入碰撞点。然后你可以增加一些冲动,使它有弹性。响应受到能量和动量守恒原则的限制。如果发生摩擦碰撞响应,请查看coloumb摩擦响应。在这种情况下,您会发现响应脉冲被约束为锥形,并且在如何计算响应方面存在差异,有时会出现矛盾的结果(查看Painlevé悖论)。

p,这比计划时间长。我希望它能帮助别人。过来。