【问题标题】:Mesh to mesh intersections网格到网格的交叉点
【发布时间】:2011-12-19 21:05:58
【问题描述】:

我正在寻找描述如何确定一个三角形网格是否与另一个相交的库或论文。

有趣的是,我是空的。如果在 CGAL 中有什么方法可以做到这一点,那我就想不通了。

这显然应该是可能的,因为三角形相交是可能的,而且每个网格包含有限数量的三角形。但我认为必须有一种比显而易见的 O(n*m) 方法更好的方法,即一个网格有 n 个三角形,另一个网格有 m 个三角形。

【问题讨论】:

  • 如果其中一个网格完全在另一个网格内,“明显”方法会给出假阴性。
  • 我对作为零厚度表面的网格之间的碰撞感兴趣。如果我对解释为多面体的网格之间的碰撞感兴趣,我知道会发生这种情况。

标签: computational-geometry mesh surface triangulation


【解决方案1】:

我们通常使用 CGAL 的方式是使用CGAL::box_intersection_d

您可以通过将此example 与此one 混合来实现。

编辑:

从 CGAL 4.12 开始,现在有了函数CGAL::Polygon_mesh_processing::do_intersect()

【讨论】:

  • 示例 4 和 5 对初学者非常有帮助。然而,目前尚不清楚如何创建 AABB 的树形结构以加快整个过程。此外,对于自相交情况,这些示例更加清晰。在两个单独的网格的情况下,它不是很清楚(我猜将所有三角形/框扔到一个向量中根本不是最佳的)。以上有什么建议吗?
  • 每个网格需要使用一个向量并使用CGAL::box_intersection_d()
  • 从 CGAL 4.12 开始,现在有了函数 [CGAL::Polygon_mesh_processing::do_intersect()](doc.cgal.org/latest/Polygon_mesh_processing
【解决方案2】:

Real-Time Collision Detection 这本书为实现此类算法提供了一些很好的建议。基本方法是使用空间分区或边界体来减少您需要执行的三三相交测试的数量。

有很多很好的学术包可以解决这个问题,包括Proximity Query PackageGAMMA research group at University of North Carolina、SWIFT、I-COLLIDE 和 RAPID 的其他工作都是众所周知的。检查这些库上的许可证是否可接受。

开放动态引擎 (ODE) 是一种物理引擎,包含大量相交基元的优化实现。您可以在他们的wiki 上查看三角形-三角形相交测试的文档。

虽然这不是您想要的,但我相信 CGAL 也可以做到这一点 - Tree of Triangles, for Intersection and Distance Queries

【讨论】:

    【解决方案3】:

    我认为您缺少的搜索词是 overlay。例如,这是Surface Mesh Overlay 上的网页。该站点有一个简短的参考书目,全部由同一作者撰写。 这是关于该主题的另一篇论文:“Overlay mesh construction using interleaved spanning treesINFOCOM 2004:IEEE 计算机和通信学会第 23 届年度联合会议。 另请参阅 GIS SE 问题“Performing Overlay of Two Triangulated Irregular Networks (TIN)”。

    【讨论】:

      【解决方案4】:

      为了补充其他答案,还有涉及凸多面体的 3D Minkowski 和的技术 - 凹多面体可以分解为凸部分。查看this

      【讨论】:

        【解决方案5】:

        libigl 中,我们将cgal 的CGAL::box_intersection_d 包裹起来,以将具有顶点V 和面F 的网格与另一个具有顶点U 和面G 的网格相交,将相交的面对存储为行在IF:

        igl::intersect_other(V,F,U,G,false,IF);
        

        这将忽略自相交。为了完整起见,我会提到我们还在一个单独的函数中支持自相交:

        igl::self_intersect(V,F,...,IF);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-11
          • 1970-01-01
          • 2015-09-18
          • 2023-03-28
          • 1970-01-01
          相关资源
          最近更新 更多