【问题标题】:How can I efficiently implement raycasting through a 2D mesh?如何通过 2D 网格有效地实现光线投射?
【发布时间】:2015-09-08 18:28:11
【问题描述】:

我正在实现一个导航网格寻路系统,我需要能够在网格中的两个点之间进行光线投射,并获得光线穿过的所有边缘的列表。显然,我需要能够测试单个线的交叉点,但我希望有一种有效的方法来选择哪些线实际上需要检查,而不是蛮力迭代整个网格中的每个边缘。有谁知道我该怎么做?

【问题讨论】:

  • nav 网格可以是 3d 的,这意味着您必须更具体地提出关于光线如何与网格相交的问题。典型的方法会涉及像 kd-tree 这样的空间分区,但这取决于你的网格是什么样的。
  • 它可能是 3D,但如果我允许,所有计算(线交点等)都会变得更加复杂,而且我不需要它,所以我将其限制为有效 2D .
  • 我想我的意思是,如果你在 3d 地形上导航,你的导航地图将是 3d。无论哪种方式,然后查看 kd-trees,对于 2 维,对于光线跟踪查询。但是,如果您的路径很短,并且经常更改,那么“聪明”的蛮力可能是最好的选择。

标签: algorithm graph unity3d raycasting navmesh


【解决方案1】:

如果您的网格是矩形网格,请考虑文章"Fast Voxel Traversal Algorithm..."中 Woo 和 Amanatides 的有效方法

Implementation example

【讨论】:

  • 我尝试实现导航网格的全部原因是它不受网格的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-19
相关资源
最近更新 更多