Math 与旋转长方体碰撞器对象的直线相交

Math 与旋转长方体碰撞器对象的直线相交,math,unity3d,raycasting,Math,Unity3d,Raycasting,我正在实现我自己的Raycasting库,以了解它是如何工作的。作为一个起点,我有一个盒子,它可以旋转,并使用光线检测它在前进途中遇到的不同障碍物。值得一提的是:我使用线AABB相交方法进行了这项工作。下图显示了它的工作原理: 当我旋转上面的一面墙并尝试使用相同的方法检查光线的碰撞时,我的问题出现了: 我一直在寻找一个可能的解决方案来纠正这一点,使用不同的算法,如分离轴定理和Cohen Sutherland,但我找不到任何类似于AABB交叉点但使用OBB的算法。在第二张图片中,当物体旋转时,

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

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


我一直在寻找一个可能的解决方案来纠正这一点,使用不同的算法,如分离轴定理和Cohen Sutherland,但我找不到任何类似于AABB交叉点但使用OBB的算法。在第二张图片中,当物体旋转时,它与物体的边界发生碰撞,你知道如何解决这个问题吗?我使用的是Unity和C#。

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

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