我正在开发一个AI沙箱,我想计算每个生物实体可以看到的东西。
规则是从实体的角度简单地隐藏形状边缘后面的内容。图像澄清了一切:
alt text http://img231.imageshack.us/img231/2972/shadows.png
我需要它作为人工智能的输入,或者以图形方式显示,以便在特定实体移动时显示它。
有什么好主意吗?
答案 0 :(得分:5)
这不是最快的算法,但它产生的多边形可能对AI的进一步分析有用:
我意识到这个解释并不是很好,但我可以使用an online demo here来了解它是如何工作的。将它扩展到与圆圈一起工作可能并不算太糟糕(着名的遗言)。
答案 1 :(得分:4)
如果你使用简单的形状来阻止实体的视图,那么有一种简单的方法可以实现这一点:
创建一个VisionWave
对象,可以水平或垂直移动。您可以使用源坐标定义VisionWave
,与该点相交的两条线以及距离源点的距离。
你应该有4个波:一个向上,一个向下,一个向左,一个向右,并且定义它们的线应该具有1和-1的斜率(即,X)。下面的粗略图表显示了一个波形(向右),由>
字符表示。
\ /
\ />
\ / >
@ >
/ \ >
/ \>
/ \
创建一个循环,每次传播一个像素。传播wave时,您需要执行以下操作:
我在我的Roguelike中实现了这样的系统,它非常快。确保您的代码存在瓶颈问题。
如果你非常聪明,你可能会尝试使用圆形波而不是直线,但我不知道由于三角计算它是否会更快。
答案 2 :(得分:1)
确定哪些顶点对您的眼点可见,然后将这些顶点从直线上的眼点投射回来以创建新顶点。关闭形状,您将创建一个表示不可见区域的多边形。
请参阅shadow volumes了解3D效果。