2013-01-01 80 views
0

我正在进行模拟,目前正在增加障碍物。现在障碍物的目的是让其他物体可以隐藏在其他人看不见的地方。但是我尝试要弄清楚什么是最好的方法,以检查是否针对代理是在障碍物后面,因此不能seen.Here是一个例子:检查物体是否被障碍物遮挡

enter image description here

黑代理不应该看到的代理红色,但是应该能够看到黄色的代理人(绿色线条表示黑色代理人的视野)

目前,我的视野只计算代理所在的角度,并检查角度是否在视野范围内。 我在寻找一些游戏开发人员使用的解决方案,并且正在阅读ray-casting,但它看起来像计算量非常大,对我来说不是一个好的解决方案,因为我将拥有数百个代理投射射线。

我在想的另一件事是检查障碍物占据的角度(例如从90到120度),如果代理人处于相同的角度范围内,则意味着障碍物阻挡了障碍物(如果这就说得通了)。

我在这里发帖是为了询问是否有人能够指导我一个简单而有效的解决方案,因为我对这类游戏开发相关的东西很新。

在此先感谢!

+0

这是为什么与java有关? – Swapnil

+0

对不起,我制作的程序是用java编写的。 – Tohmas

回答

1

如果是2d,则创建两行(以蓝色显示)并测试行与代理之间的距离。从蓝线到座席的距离必须至少为座席半径或座席可见。 还给每条蓝线一个垂直的“正常”矢量,你可以点击它来确定它所在的线的哪一侧。 如果它是3d,你可以做同样的事情,但是使用平面而不是直线,并且你需要4个或者多个平面而不是2个。 实质上,这是如何进行截锥体剔除的。

enter image description here