用于建立不可变边界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 (将#修改为@)