好吧,所以我有这个碰撞检测代码,我试图在墙的平面上推动剩余距离(从0移动到+5,墙在+2,剩余= +3)。像这样:
现在我把它的大部分都放下了,我知道我需要距离移动的剩余距离,以及墙壁法线的交叉积,但我需要一些帮助才能使论坛正确。
我的问题是,什么是沿着墙壁移动剩余距离的正确论坛?
if(distRemaining.length() > 0){
cProduct = cross(distRemaining, wallNormal);
dest += new Vector3f(cProduct.x, 0, cProduct.z);
}
答案 0 :(得分:2)
将您的起点A
和影响点B
以及法线向量N
调用到您的墙上飞机。计算将A到B(AB
)的向量,并计算它与N
之间的向量积。叫这个X
X = AB x N
这是一个垂直于N
和AB
的向量,它也位于墙的平面上。将另一个向量Y作为X
和N
Y = X x N
现在,这是你墙上的另一个向量,它指向碰撞后墙上的粒子运动方向。您需要对此向量进行标准化Y
(计算Y / |Y|
)并将其乘以您想要沿墙移动的数量,然后将其添加到碰撞点B
。这个向量可能指向相反的方向,但是如果你对使用向量产品的顺序要小心,你应该没问题。
这就是你如何在3D中做到这一点,我假设你想从你的问题。在2D中它会相当简单。