我正致力于一个简单的碰撞系统,专注于让胶囊碰撞。使用了很多资源,但主要是this site我已经能够让两个胶囊相互碰撞。这种方法给了我两个线段之间的最短距离。然后,我检查两个胶囊的组合半径,看看是否发生碰撞。
这是有效的,但此解决方案存在两个问题:
我有另一个功能,我发现here使用球体,这将返回两个球体碰撞的时间。当使用此功能时,我检测到碰撞(时间< 1)我可以将该帧的物体速度乘以时间并使物体冲洗。我真的在寻找一种方法来修改该网站的网段冲突功能,以便为我提供与网段冲突相同的信息。
答案 0 :(得分:0)
希望这有用......
通常,问题#1没有直接解决方案,会永远困扰着你。时间积分步骤必须足够小,以防止它与您使用的速度发生。 (如果以某种方式你只能计算正距离= | x2-x1 | ...)
,情况尤其如此我并没有真正区分胶囊和球体,但是 你不计算dt之前和之后每个维度的距离:
dx = obj1.x - obj2.x;
dy = obj1.y - obj2.y;
dz = obj1.z - obj2.y;
dxlater = obj1.x + obj1.vx*dt - (obj2.x + obj2.vx*dt);
dylater = obj1.x + obj1.vy*dt - (obj2.y + obj2.vy*dt);
dzlater = obj1.x + obj1.vz*dt - (obj2.z + obj2.vz*dt);
如果dx和dxlater具有不同的符号,则对象发生碰撞,即:
if (dx*dxlater < 0) // collision occured
如果你想知道发生碰撞的时间,解决距离= RAD_SUM为t :(对于所有维度)
obj1.x + obj1.vx*tc - (obj2.x + obj2.vx*tc) = RAD_SUM
应该是:
tc = (RAD_SUM + obj2.x - obj1.x)/(obj1.vx - obj2.vx)
正常计算到该点的位置,然后计算新的速度,然后应用新闻速度直到dt