线与旋转盒碰撞对象的交点

Jav*_*Osa 5 math unity-game-engine raycasting

我正在实现我自己的 Raycasting 库以了解它是如何工作的。作为起点,我有一个旋转的盒子,并使用光线检测它在途中遇到的不同障碍物。值得一提的是:我使用线 AABB 相交方法进行了这项工作。下图显示了它的工作原理:

与 AABB 的线交点

当我旋转上述墙壁之一并尝试使用相同的方法检查光线的碰撞时,我的问题出现了:

旋转物体碰撞

我一直在寻找一种可能的解决方案来纠正这个问题,使用不同的算法,如分离轴定理和 Cohen-Sutherland,但我找不到任何类似于 AABB 交叉但使用 OBB 的方法。任何想法如何解决第二张图片中的问题,当它旋转时它与对象的边界相撞?我正在使用 Unity 和 C#。

Log*_*kup -1

我认为您不会找到类似于 AABB 的旋转对象算法。您可以在检查旋转的墙之前尝试旋转坐标系(即整个世界),以强制墙轴对齐,然后再次将结果旋转回原始坐标系,但在我看来,这会最终比将墙壁分解成线并进行线与线相交测试更混乱。

修改诸如分离轴定理之类的东西也可以工作 - 射线不是凸包,因此您不能直接使用该算法,但您可以使用类似的原理:将墙壁的点投影到垂直于射线的线上,并且然后,您将能够计算墙壁末端到射线的距离,以及墙壁是否与射线重叠。有了这些信息,您还应该能够计算屏幕截图中的“阴影”。不过,这是否比直线相交更容易,您必须亲自看看!