3

好的,所以我有这个碰撞检测代码,我试图将剩余的距离(从 0 移动到 +5,墙在 +2,剩余 = +3)穿过墙的平面。像这样: 在此处输入图像描述

现在我把大部分都记下来了,我知道我需要移动的剩余距离,以及墙的法线的叉积,但我需要一些帮助才能正确地解决这个问题。

我的问题是,沿墙平面移动剩余距离的正确公式是什么?

if(distRemaining.length() > 0){
            cProduct = cross(distRemaining, wallNormal);
            dest += new Vector3f(cProduct.x, 0, cProduct.z);
        }
4

1 回答 1

2

调用你A的起点、冲击点和壁平面B的法线向量。N计算取 A 到 B ( AB) 的向量,并计算它与 之间的向量积N。称之为 X

    X = AB x N

这是一个垂直于两者的向量NAB也位于墙壁的平面内。取另一个向量 Y 作为 和 之间的向量XN

    Y = X x N

现在这是墙上的另一个向量,它指向碰撞后粒子沿墙的运动方向。您需要对该向量进行归一化Y(计算Y / |Y|)并将其乘以您想要沿墙移动的量,然后将其添加到您的碰撞点B。这个向量可能会指向相反的方向,但如果你小心使用向量积的顺序,你应该没问题。

这就是你如何在 3D 中做到这一点,我假设你想从你的问题中得到它。在 2D 中,它会简单得多。

于 2012-06-25T22:58:33.563 回答