碰撞后从方向抵消曲面轴

Cancelling out surface axis from direction after collision

本文关键字:曲面 抵消 方向 碰撞      更新时间:2023-10-16

假设我正在将 (0.5,0.5) 移动到表面法线为 (-1,0) 的墙壁中。我希望最终结果是(0,0.5),所以我不能继续移动到墙中,而是沿着表面滑动。

我怎样才能做到这一点?我有

comp_u = n * (maths::dot(dir,n) / maths::dot(n,n));
这给了我垂直于碰撞表面的方向

分量,其中"n"是垂直于碰撞表面的矢量,我可以抵消这一点。但是,如果我尝试离开墙壁,它将取消该组件,这意味着我永远无法离开墙壁。

只有当运动方向与正常方向相反时,才应该进行操作...... 也就是说,dot(dir,n)是负数。

如果结果是肯定的,则表示您将远离墙壁,并且不会修改dir