一个好的3D网格库

22

我正在寻找一款优秀的3D网格库。

  • 应该能够读取流行格式(OFF,OBJ ...)
  • 应支持半边结构和三角形soup
  • 应对错误和非法网格具有容错性
  • 基本几何操作-相交、法线计算等
  • 最重要的是-不应与无尽的模板和继承层次结构混淆在一起。

我已经尝试了CGAL和OpenMesh,但都在最后一个问题上失败了。

特别是CGAL,即使使用最先进的代码分析工具也难以理解。

到目前为止,我正在认真考虑自己开发。

我倾向于使用C++,但我也可以接受其他选项。


我不知道它是否符合您的要求,但是可以看一下VCG。 - elect
请查看 MeshLib C++ 库。它包含了您提到的所有内容:可以读取 OFF 和 OBJ 格式,可以从三角形网格构建半边数据结构,具有各种网格修复功能,快速且稳健的交点计算,而且代码简单易懂,没有过多的模板使用。 - Fedor
3个回答

13

请问为什么最后一个要求是必须的呢?

为了让写给公众使用的库尽可能通用以便被尽可能广泛的用户使用,在C++中,通常最好使用模板。如果你发现一个不错的库,但发现它使用float而不是double,那将会非常糟糕。

例如,CGAL似乎采用了编写通用和可扩展的C++库的著名且经过充分测试的STL范例。这确实使得使用代码分析工具变得困难;我怀疑它们能否很好地跟踪STL头文件。

但是您是想使用该库还是修改它?无论哪种方式,他们似乎都有一些极高质量的文档(例如Kernel Manual),这应该可以相对简单地弄清楚需要做什么,而不必去阅读他们的代码。

免责声明:我知道这不是你所要求的内容。但我认为你在寻找的内容几乎不存在。像我浏览CGAL时看到的那样,开源代码和文档的质量极好是非常罕见的。我强烈建议您再次仔细查看它。


2
首先,关于您的需求,有一些普遍性的评论:
  • 读取OBJ或OFF文件非常容易。您可以在提供更多几何特性的库之上自行实现,仅需几分钟。另一方面,这种库的几何部分要复杂得多,因此您应该专注于真正涉及几何算法的需求,并尝试找到适合您需求的东西。然后,当然,如果存在抉择,开始考虑此接口问题。
  • 就几何操作而言,您要求交集。您是指基元交集吗?(可以找到和实现良好的简单算法)还是计算两个网格的交集?或者碰撞检测?(这些是棘手的问题,没有简单的答案)
  • 如果您从更高层次的角度更具体地描述您想要构建的工具类型,那么人们将能够将您引导到正确的工具。您的要求过于低级。

就我理解您的问题而言,我认为您并不清楚CGAL和OpenMesh等库的意义。这些库可能无法提供您所需的所有更高级别的工具,但它们的目的是为您提供(特别是在CGAL的情况下)构建几何应用程序所需的所有几何框架。这样的几何框架设计非常复杂,特别是由于鲁棒性问题,这在计算几何中非常特殊。如果没有这样的框架,构建一个健壮的应用程序将是一项可怕的工作。

如果您找不到适合您需求的库,您应该认真考虑使用像CGAL这样的库作为您的开发底层框架。它将防止出现与鲁棒性相关的问题,这些问题通常只有在开发过程的后期才会开始注意到,并且更改底层框架将是痛苦的。顺便说一下,CGAL有广泛的文档和非常活跃的用户邮件列表。

如果您不了解几何软件中的鲁棒性问题,请查看此页面: robustness issues


0

我不知道这对你是否有用。还有另一个库,名为Mangrove TDS Library,可以在http://mangrovetds.sourceforge.net免费获取。它支持任何类型的形状(2D、3D、任意维度),具有任何域(流形、非流形、伪流形、IQM复合体、单纯复合体等)。它可能支持非规则形状,即由不同维度的部分组成。

它的主要特点是可扩展性,即支持任何拓扑数据结构。它是一个插件,可以在运行时更改和加载。

它的实现基于实体的基于数组的索引,编码在支持迭代器的数据结构中。它还支持动态属性。

最后,它支持实体的隐式表示,这些实体直接未编码在数据结构中(幽灵实体),从而提高了拓扑查询的效率。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接