如何解决用于建立不可变边界voume层次结构的高效算法?
我正在尝试仅使用不可变数据结构来构建边界体积层次结构。我希望将树用于实时仿真中的宽相碰撞测试。
树形结构如下:
type BvhTree<'t> =
| Leaf of BvhLeaf<'t>
| Branch of BvhBranch<'t>
| Nil
and BvhLeaf<'t> =
{
Bounds : AABB
Data : 't
}
and BvhBranch<'t> =
{
Bounds : AABB option
Left : BvhTree<'t>
Right : BvhTree<'t>
}
然后的目标是获取所有具有边界体积的模拟对象列表(为使事情简单,现在仅使用ABB),并产生合理的最佳边界体积层次结构。
最佳树的定义是其分支节点的表面积总计最低的树。
测试每个可能的树结构的速度太慢,简单的附加操作会创建一棵偏斜的树,从而导致较差的碰撞测试性能。可能还可以使用先前模拟状态中的树作为起点来计算下一棵树。
由于我使用的是不可变数据,因此与通常采用的方法不同(请参见this excellent set of slides),我必须从头开始构建树。
我无法找到有关该主题的很多资源。
我想出的基本方法是生成一棵树列表,每个模拟对象一个树,然后递归合并它们,直到仅剩下一棵树。在每个步骤,都使用简单的启发式方法选择合并。
有什么好的技巧可以做到这一点?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。