在八叉树中存储具有共享边的三角形

时间:2017-04-07 19:54:03

标签: c++ structure octree

我正在尝试加载STL网格文件并将其三角形存储在八叉树数据结构中,以进行一些科学分析(不适用于游戏)。

an example of two triangles with a shared edge

如图像所示,三角形1存储在八叉树节点NE,SE,SW和NW中,而三角形2存储在八叉树节点NW和SW中。 (2d表示,但它在3d中是相同的故事)。

从两个三角形开始划分节点NW和SW是没有意义的 分享红色边缘。如果我有两个以上的三角形跨越几个单元格,这个问题会变得更麻烦。

那么,在八叉树中存储三角形的正确方法是什么?

ps-我不想剪辑三角形。

1 个答案:

答案 0 :(得分:0)

我使用了两种最常用的方法:

  • 在与三角形相交的每个叶节点中存储三角形;所以,一个三角形可能在多个叶子中;
  • 将三角形存储在完全包围三角形的节点(分支或叶子)中;没有重复。

第一种方法对粗糙,轴对齐,物体形状的估计很有用 - 解决紧密堆积问题。基本上它是不均匀的体素化。第二种方法非常适合碰撞检测。每个三角形都需要与同一节点及其子节点中的其他三角形相撞。第二种方法产生了非常轻量级的实现(您可以将链接列表的下一个指针直接添加到三角形)。