给定一组非旋转的AABB边界,我希望从原始集创建一组更简单的边界,这允许指定数量的不准确。
一些例子:
我在Unity中使用Bounds进行此操作,但它只是基本的AABB比较内容,没有特定于Unity的内容。我认为某人必须在过去的某个时刻为此制定一个系统,但我没有运气搜索。封装边界很容易,但这更难,因为你不能一个接一个地遍历每个边界。有时只能通过查看整个事物来看到更简单的解决方案。
快速的表现并不重要,但会很好。在两个方向上都不正确(即边界可能比实际尺寸略微更少或更多)。如果它有帮助,我可以预期原始集合中的所有边界都会在某个地方连接 - 在一个单独的组中没有自由浮动的部分。
我不希望任何人写一个完整的系统来解决这个问题,我更希望它已经解决了,或者可能有一个明显的过程来实现它还没有想到。
答案 0 :(得分:0)
这听起来可以通过 Surface Area Heuristics (SAH)来处理。 SAH通常用于光线跟踪,以便在存储三角形时构建更好的树状结构。有很多来源更多地讨论它。一个好处是Wald's thesis第7.3章。
SAH建立的基本思想是从整个空间开始并递归地划分它。通过扫描所有合理位置并计算两个子节点的表面积来确定分区位置。合理的位置是任何三角形的上限或下限的位置。在扫过所有候选人之后,使用儿童总面积最小的部门。
如果SAH对您的应用程序不是一个好主意,您可以使用类似的扫描所有候选项,但计算例如AABB内的额外空间。