2

给定一组非旋转的 AABB 边界,我希望从原始集创建一组更简单的边界,允许指定数量的不准确性。

一些例子: 解决方案示例

我在 Unity with Bounds中使用它,但这只是基本的 AABB 比较东西,没有特定于 Unity 的东西。我想过去一定有人为此制定了一个系统,但我没有运气四处寻找。封装边界很容易,但这更难,因为你不能一个接一个地遍历每个边界。有时,更简单的解决方案只能通过查看整个事物来看到。

快速的性能并不重要,但会很好。不准确在两个方向上都是可以的(即边界可能实际尺寸小一点或多一点)。如果它有帮助,我可以期望原始集合中的所有边界都连接到某个地方 - 一个单独的组中没有自由浮动的部分。

我不指望任何人编写一个完整的系统来解决这个问题,我更希望它已经解决了,或者可能有一个我还没有想到的明显过程来实现它。

4

1 回答 1

0

这听起来可以通过表面积启发式(SAH) 处理。SAH 通常用于光线追踪,以在存储三角形的情况下构建更好的树状结构。有多个来源对此进行了更多讨论。一个好处是沃尔德的论文第 7.3 章。

SAH 构建的基本思想是从整个空间开始,递归地划分它。划分位置是通过扫描所有合理位置并计算两个子节点的表面积来确定的。合理的位置是任何三角形都有其上限或下限的位置。扫过所有候选后,使用孩子中总表面积最小的除法。

如果 SAH 对您的应用程序来说不是一个好主意,您可以使用类似的扫描所有候选人,但例如计算 AABB 内的额外空间。

于 2015-03-17T20:25:36.157 回答