0

我有一个应用程序,我在其中使用八叉树来存储轴对齐边界框(AABB)的体积网格。

给定一个防水三角形网格,我需要:

  • 查找 AABB 是否与表面网格相交或完全在表面网格内部/外部,

  • 用相交的 AABB 剪裁表面网格,以生成完全位于每个 AABB 内的三角形。

包含 AABB 的三角剖分和八叉树都是动态的。八叉树中的叶节点数量巨大。表面网格中的三角形数量要少得多(O(10^9 - 10^13) 个八叉树节点,与 O(10^6) 个三角形相比)。

哪些数据结构和算法适合我的问题?

现在我:

  • 将三角形存储在与体积网格相同的八叉树中,
  • 将每个三角形存储在包含它的最小八叉树节点中,
  • 通过从该 AABB 遍历到根节点及其叶子,用单个 AABB 剪裁三角形网格,用 AABB 剪裁节点中包含的每个三角形。

直到叶子完全包含在 AABB 中的节点中的三角形不需要任何裁剪,而从 AABB 到根的节点中包含的三角形需要裁剪。然而:

  • 由于我存储三角形的方式,我没有可以存储在每个单个八叉树节点中的最大三角形数量的上限,所以我没有必须的三角形数量的上限用单个 AABB 剪裁表面网格时被剪裁。

  • 如果三角形存储在根节点中,则测试 AABB 是否与三角形网格相交可能需要裁剪。

  • 无法快速确定节点是否在网格内部/外部/与网格相交。

4

0 回答 0