【问题标题】:Line Intersection with rotated box collider object与旋转的盒对撞机对象的线交点
【发布时间】:2016-09-22 04:58:56
【问题描述】:
我正在实现自己的 Raycasting 库以了解它的工作原理。作为起点,我有一个旋转的盒子,它使用光线检测它在途中遇到的不同障碍物。值得一提:我使用 AABB 线相交方法进行了这项工作。下图显示了它是如何工作的:
Line Intersection with AABB
当我旋转上述墙壁之一并尝试使用相同的方法检查光线的碰撞时,我的问题就出现了:
Rotated Object collision
我正在寻找一种可能的解决方案来纠正这个问题,使用不同的算法,如分离轴定理和 Cohen-Sutherland,但我找不到任何与 AABB 交叉点类似但使用 OBB 的方法。任何想法如何解决第二张图片中的问题,当它旋转时它与对象的边界发生碰撞?我正在使用 Unity 和 C#。
【问题讨论】:
标签:
math
unity3d
raycasting
【解决方案1】:
我认为您不会找到类似于 AABB 的用于旋转对象的算法。您可以在检查旋转的墙壁之前尝试旋转坐标系(即整个世界)以强制墙壁与轴对齐,然后再次将结果旋转回原始坐标系,但我认为这会最终比将墙壁分解成线并进行线-线交叉测试更混乱。
修改诸如分离轴定理之类的东西也可以工作 - 射线不是凸包,因此您不能直接使用该算法,但您可以使用类似的原理:将墙的点投影到垂直于射线,然后您将能够计算墙的最末端到射线的距离,以及墙是否与射线重叠。有了这些信息,您还应该能够计算屏幕截图中的“阴影”。不过,这是否比线-线交叉更容易,您必须自己看看!