在体素立方体的 3D 网格中寻找视线
Finding Line of Sight in a 3D Grid of Voxel Cubes
我正在开发一个应用程序,其中体素立方体存储在基本 3D 数组中,这样 Array.[z][x][y] 将访问高度层 z、行 x、列 y 的体素。
我想在两个立方体(比如 A 和 B)之间实施视线检查,如果 A 中的任何 点的视线指向 任意点B,则存在视线。每个立方体要么是可见的,要么是看不见的,没有中间的。
但是,立方体的六个面中的任何一个都可以算作障碍墙。立方体可能在所有四个面上都有墙,但在顶部和底部没有墙,或者只有两侧都有墙。
我在寻找解决方案时发现的几乎所有内容都指向 Bresenham 算法的 3D 修改,就像描述的方法 here。
但我也一直看到关于 Bresenham 在路径上遗漏立方体并且有更好的选择的警告。跟随 Bresenham 似乎也不会给我关于遇到立方体的哪个面的数据,所以我不确定我如何正确检查线访问的立方体中是否撞到墙。我似乎也找不到太多关于 Bresenham 的替代品实际上是什么。
3D Bresenham 是继续进行的好方法吗?或者也许因为我的体素都具有相同的 width/height/length,所以有更好的方法不会错过那么多立方体?
要检索 A 和 B 中两个 点 之间的所有单元格,您可以使用 Woo 和 Amanatides 网格遍历算法。
我不确定您是否会接触到由 A 和 B 细胞形成的 "tunnel" 的所有细胞。
"Fast Voxel Traversal Algorithm..."
二维案例图:
我正在开发一个应用程序,其中体素立方体存储在基本 3D 数组中,这样 Array.[z][x][y] 将访问高度层 z、行 x、列 y 的体素。
我想在两个立方体(比如 A 和 B)之间实施视线检查,如果 A 中的任何 点的视线指向 任意点B,则存在视线。每个立方体要么是可见的,要么是看不见的,没有中间的。
但是,立方体的六个面中的任何一个都可以算作障碍墙。立方体可能在所有四个面上都有墙,但在顶部和底部没有墙,或者只有两侧都有墙。
我在寻找解决方案时发现的几乎所有内容都指向 Bresenham 算法的 3D 修改,就像描述的方法 here。
但我也一直看到关于 Bresenham 在路径上遗漏立方体并且有更好的选择的警告。跟随 Bresenham 似乎也不会给我关于遇到立方体的哪个面的数据,所以我不确定我如何正确检查线访问的立方体中是否撞到墙。我似乎也找不到太多关于 Bresenham 的替代品实际上是什么。
3D Bresenham 是继续进行的好方法吗?或者也许因为我的体素都具有相同的 width/height/length,所以有更好的方法不会错过那么多立方体?
要检索 A 和 B 中两个 点 之间的所有单元格,您可以使用 Woo 和 Amanatides 网格遍历算法。
我不确定您是否会接触到由 A 和 B 细胞形成的 "tunnel" 的所有细胞。
"Fast Voxel Traversal Algorithm..."
二维案例图: