我有一个3d移动盒和一个固定的盒子。 我可以检测到碰撞,但现在我想将移动盒滑动到固定盒上作为碰撞响应。 为此,我需要与移动盒碰撞的脸部正常。 有谁知道我怎么弄出来的? 碰撞testing似乎没有给我这个信息。 任何帮助表示赞赏。
为了计算飞机的法线(相撞的AABB表面),您需要:
这将产生一个垂直于这个平面的vector(但是一个平面有两个边)。
这里是一个如何计算交叉乘积的例子。
让A,B,C和D成为AABB相撞一侧的四个点。
[B]---(c) | | [A]---[D]
如果我们用ABC,那么平面的法线就是
ADxAB (if we want a normal pointing out of the screen) ABxAD (if we want a normal pointing inside the screen)
(这是因为我们的例子是面向屏幕,如果从左侧看到飞机,则第一个正常点将指向右侧,第二个点将指向左侧)
正如你所看到的那样,你拿分数的顺序会影响正常人会指向的那一面。 这就是为什么开发人员通常按照指定的顺序(顺时针或逆时针方向存储它们的点数,但对于所有的表面都是一样的),所以他们知道按照何种顺序使用它们。
现在看到更多的细节:
AB = [ Bx-Ax, By-Ay, Bz-Az ] AD = [ Dx-Ax, Dy-Ay, Dz-Az ]
以下是如何获得第一个正常
ADxAB = [ ADx, ADy, ADz ] X [ ABx, ABy, ABz ] = [ (ADy*ABz - ADz*ABy), (ADz*ABx - ADx*ABz), (ADx*ABy - ADy*ABx) ]
第二个正常指向另一边
ABxAD = [ ABx, ABy, ABz ] X [ ADx, ADy, ADz ] = [ (ABy*ADz - ABz*ADy), (ABz*ADx - ABx*ADz), (ABx*ADy - ABy*ADx) ]
如果用前面(Bx-Ax,By-Ay,Bz-Az等)计算出的差异代替ABx,ABy,ABz等值,交叉积可以得到法向量。