如何实现完美的视线算法?涉及IT技术,这是一个提问标题。

4
免责声明:我并不真正尝试做一个这样的东西,只是好奇它如何完成。
当我说“最准确”,我包括基础知识:
- 墙 - 距离 - 光线水平
以及更复杂的:
- 大气中的灰尘 - 雨、雨夹雪、雪 - 云 - 植被 - 烟 - 火
如果我想编写这个程序,应该查找哪些资源,需要注意什么事项? 此外,有没有任何关于视线理论的相关书籍,包括所有这些变量?

1
这是关于一个算法的。它肯定可以被编程实现... - Vinko Vrsalovic
2
你应该先阅读一些物理书籍,我认为。 - Gert
3
这与编程有关,是图形编程。应该由某人进行编辑和澄清。 - Spencer Ruport
1
当然,它在编程领域具有潜在的相关性;可能是用于游戏,也可能是用于GPS或导弹制导,还可能有其他不太明显的应用。 - Hardryv
2
@Michael,你是否在说算法的学习与编程无关?这很奇怪,因为有大量与算法相关的编程书籍。我认为计算机科学理论也与编程有关。那么,这个问题到底哪里和编程无关呢?即使它不直接涉及代码,也会影响编码实现和后续问题。但我必须说,我认为这应该放在CW上,因为它要求“好”的书,这是一个主观的问题。 - mnuzzo
显示剩余3条评论
4个回答

4

我个人对这个主题不太了解,但是通过一些谷歌搜索可以找到一些包含相关信息的正式论文:

http://www.tecgraf.puc-rio.br/publications/artigo_1999_efficient_lineofsight_algorithms.pdf - 提供了两种不同方法有效地执行直线视线(LOS)计算的详细说明,包括所涉及的问题。

http://www.agc.army.mil/operations/programs/LOS/LOS%20Compendium.doc - 这个旨在维护“独特的LOS算法列表”,它有一个部分列出了相当多的算法,并详细描述了它们,重点放在军事应用上。

希望这可以帮助你!


3
通常,人们将世界表示为一组占据某种空间划分数据结构的空间体积,然后将代表您“视线”的射线与该结构相交,以找到它所击中的物体集;然后按顺序从射线起点遍历这些物体,以确定整体结果。反射性物体会引发更多的射线,不透明物体会停止遍历,而半透明物体则部分地对结果做出贡献。
您可能想了解一下光线追踪;关于这个主题有很多文献,并且已经存在了解决您列出的基本相同问题的成熟方法。

我看到的大多数光线追踪资源都仅关注我列出的基础知识,而我找不到任何与高级内容相关的东西。 - Bobby
1
把这些东西都想象成半透明的物体。所以,烟雾就是一定空间内的一个体积,它对光线穿过的那段长度产生了与之成比例的不透明度,等等。对于实际的光线追踪,你还需要了解诸如程序噪声生成之类的主题,但对于视线可见性(LOS),你只关心不透明度和反射性,对吗? - moonshadow

2
显而易见的问题是,你真的想要最准确的线视图吗?为什么?
我曾经参与制作过依赖于视野范围的游戏,你必须清楚地考虑你需要哪种类型的视野。
首先,AI能否看到你身体的任何部分?还是你在谈论“眼对眼”的线视图?
其次,如果玩家的相机视角不是他的化身视角,那么玩家将不会感知你高度准确的线视图为高度准确。此时,不准确性是可以接受的。
我不是试图劝阻你,但要记住,玩家体验是第一位的,这可能意味着不要拥有最好的线视图。
我的一个好朋友曾为一系列热门主机游戏做过AI。他经常讲述一个故事,即AIs最有趣(和有趣)的是第一款游戏,因为它们会无意中撞到你,而不是从远处看到你。现在,他拥有很好的线视图,并花费时间试图使它们像第一款游戏一样有趣。
所以你为什么要这样做?游戏需要吗?还是你只是想挑战自己?

挑战是其中很重要的一部分,当我在研究天气预报模型并想知道如何创建一个视线算法来处理它们时,这个想法就浮现在我脑海中。 - Bobby

0

由于输入未被明确定义,因此这些问题没有“一种算法”。

如果您将大气中的灰尘视为恒定值,则可以考虑一个算法来考虑它,但事实是,灰尘水平会从一个点到另一个点变化,因此您想要的算法需要了解您的灰尘数据的结构。

今天光线追踪器中最常用的算法只是增量射线行进,从定义上讲并不正确,但它确实近似地得出了终极答案。

即使您设法将所有这些属性合并到单个主算法中,您仍然必须以某种方式处理不同人对相同环境的感知。有些人近视,有些人远视。然后还有色盲。更不用说大气中的灰尘水平也会影响泪腺,从而影响能见度。然后还有人们实际看到的和他们认为自己看到的之间的整个二分法...

这里有太多变量,无法针对统一的解决方案。将您的环境视为像素化空间,并通过它发射射线。我怀疑这是您能够在单个生命周期内完成的唯一解决方案...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接