假设我正在 (0.5,0.5) 移动到表面法线为 (-1,0) 的墙中。我希望最终结果是 (0,0.5),所以我不能继续移动到墙上而是沿着表面滑动。
我怎样才能做到这一点?我有
comp_u = n * (maths::dot(dir,n) / maths::dot(n,n));
它给出了垂直于碰撞表面的方向分量,其中“n”是垂直于碰撞表面的 vector ,我可以将其抵消。但是,如果我试图离开墙,它会抵消该组件,这意味着我永远无法离开墙。
最佳答案
只有当运动方向与法线方向相反时才应该执行操作...也就是说,dot(dir,n)
为负数。
如果结果是肯定的,您将离开墙并且您不会修改 dir
。
关于c++ - 碰撞后从方向取消表面轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12768678/