一个很好的3D网格库

时间:2008-09-17 00:23:28

标签: math graphics 3d mesh

我正在寻找一个好的3D网格库

  • 应该能够阅读常用格式(OFF,OBJ ...)
  • 应该支持半边结构和三角汤
  • 应该容忍错误和非法网格。
  • 基本几何操作 - 交叉点,正常计算等'
  • 最重要的是 - 不应该使用无限的模板和继承层次结构。

我已经尝试了CGAL和OpenMesh,但在最后一点都失败了。

特别是CGAL,即使使用最先进的代码分析工具也无法遵循。

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

我的偏好是C ++,但我对其他选项持开放态度。

3 个答案:

答案 0 :(得分:12)

请问为什么最后一点是要求?

为公共消费而编写的图书馆旨在尽可能通用,以便最广泛的受众可以使用。在C ++中,这通常最好使用模板完成。如果找到一个好的图书馆,只会发现它对你的目的没用,因为它使用浮动而不是双打,这会非常糟糕。

例如,CGAL似乎采用了众所周知且经过良好测试的STL范式,即编写通用和可扩展的C ++库。这确实使得难以使用代码分析工具;我怀疑他们在追随STL标题方面也很擅长。

但是你想尝试使用该库还是修改它?无论哪种方式,它们似乎都有一些非常高质量的文档(例如Kernel Manual),这些文档应该能够比较简单地找出你需要做什么,而不必诉诸于阅读他们的代码。

免责声明:我知道这不是你所要求的。但我不认为你在寻找什么。很难找到开源代码,文档和我通过CGAL扫描的文档一样好。格外非常罕见。我强烈建议你再看看它。

答案 1 :(得分:2)

首先,一些关于你要求的一般性评论:

  • 读取OBJ或OFF文件非常简单。您可以在几分钟内在一个提供更多几何特征的库之上自己实现它。另一方面,这些库的几何部分是非常棘手的,你应该专注于你真正处理几何算法的要求,并尝试找到适合你需要的东西。然后,当然,如果存在平局,则开始考虑此接口问题。
  • 在几何操作方面,你要求交集。你的意思是原始交集吗? (可以找到并实现好的和简单的算法)或计算两个网格的交集?或碰撞检测? (这是微妙的问题,没有简单的答案)
  • 如果您更具体,从更高层次的角度来看,关于您想要构建的工具类型,那么人们将能够引导您使用正确的工具。您的要求太低了。

据我了解你的问题,在我看来,你并没有清楚地看到像CGAL和OpenMesh这样的库。这些库可能无法提供您需要的所有更高级别的工具,但它们的目的是为您(特别是在CGAL案例中)提供构建几何应用程序的所有几何框架。这种几何框架的设计非常精巧,特别是因为坚固性问题,这对计算几何非常具体。如果没有这样的框架,构建一个强大的应用程序是一项可怕的工作。

如果找不到适合自己需要的库,则应认真考虑使用CGAL等库作为开发的基础框架。它将防止出现与健壮性相关的问题,通常只会在开发过程的后期开始注意到,当更改底层框架时会很痛苦。另外,CGAL有广泛的文档和非常活跃的用户邮件列表。

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

答案 2 :(得分:0)

我不知道它对你有用。还有另一个图书馆,名为红树林TDS图书馆,免费提供http://mangrovetds.sourceforge.net它支持任何类型的形状(2d,3d,任何尺寸),任何领域(流形,非流形,伪流形) ,iqm复合物,单纯复合物等)。它可能支持非规则形状,即由不同维度的片段形成。

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

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

最后,它支持不直接编码在数据结构中的实体的隐式表示(重影实体),这提高了拓扑查询的效率