我正在实施自己的Raycasting库,以了解它的工作原理。作为一个起点,我有一个旋转的盒子,使用光线检测它遇到的不同障碍物。值得一提的是:我使用线AABB交叉方法工作。下图显示了它的工作原理:
当我旋转其中一个墙壁并尝试使用相同的方法来检查光线的碰撞时,我的问题出现了:
我正在寻找一种可能的解决方案,使用不同的算法,例如分离轴定理和Cohen-Sutherland,但我找不到任何与AABB交叉相似但使用OBB的方法。任何想法如何在第二张图片中解决问题,当它旋转时它与对象的边界碰撞?我使用Unity和C#。
答案 0 :(得分:0)
我认为您不会为旋转对象找到类似于AABB的算法。您可以尝试旋转坐标系(即整个世界),然后检查旋转的墙以强制墙对齐,然后再将结果旋转回原始坐标系,但在我看来,最终比将墙壁分解成线并进行直线交叉测试更加混乱。
修改像分离轴定理这样的东西也可以工作 - 光线不是凸包,所以你不能直接使用算法,但你可以使用类似的原则:将墙的点投影到垂直于然后,您将能够计算墙的末端到光线的距离,以及墙是否与光线重叠。有了这些信息,您还应该能够计算出"阴影"你有截图。不过,这是否比线路交叉更容易,你必须自己看看!