优质的3D网格库
我正在寻找一个好的3D Mesh库
- 应该能够读取流行的格式(OFF,OBJ ...)
- 应该同时支持半边结构和三角形汤
- 应该容忍故障和非法网格。
- 基本几何运算-相交,法线计算等'
- 最重要的是-不应与无休止的模板和继承层次结构混淆。
我已经尝试了CGAL和OpenMesh,但都在最后一点失败了。
特别是CGAL,即使使用最先进的代码分析工具也无法遵循。
到目前为止,我正在认真考虑自己动手做。
我的偏好是C ++,但我愿意接受其他选择。
解决方案
回答
请问为什么最后一点是要求?
专为公共消费而编写的图书馆被设计为尽可能通用,以便尽可能广泛的读者使用。在C ++中,通常最好使用模板来完成。如果找到一个好的库,它将极大地吸引人,却发现它对目的没有用,因为它使用浮点数而不是双精度数。
例如,CGAL似乎采用了编写通用和可扩展C ++库的著名且经过测试的STL范例。确实,这使得使用代码分析工具变得困难。我怀疑他们在遵循STL标头方面是否也很擅长。
但是,我们是要使用该库还是对其进行修改?无论哪种方式,他们似乎都有一些非常高质量的文档(例如,内核手册),应该可以相对简单地弄清楚我们需要做什么,而不必诉诸阅读其代码。
免责声明:我知道这不是我们要的。但是我不认为我们要找的东西存在。在文档中找到与我在CGAL中扫描过的一样出色的开源代码是非常罕见的。我强烈建议我们再看一遍。
回答
首先,关于要求的一些一般性评论:
- 读取OBJ或者OFF文件非常容易。我们可以在几分钟之内在提供更多几何特征的库之上自己实现它。另一方面,此类库的几何部分非常棘手,我们当然应该专注于真正处理几何算法的需求,并尝试找到适合我们需求的东西。然后,当然,如果有关系,请开始考虑此接口问题。
- 在几何运算方面,我们要求相交。你是说原始交集吗? (可以找到并实现哪些好的而简单的算法)还是计算两个网格的交点?还是碰撞检测? (这是很棘手的问题,没有简单的答案)
- 如果我们从更高的角度更具体地了解要构建的工具类型,那么人们将能够将我们引导至正确的工具。要求太低级了。
据我了解问题,在我看来,我们似乎没有清楚地看到CGAL和OpenMesh之类的库的要点。这样的库可能无法提供我们需要的所有更高级别的工具,但是它们的目的是为我们(尤其是在CGAL情况下)提供可用于构建几何应用程序的所有几何框架。这样的几何框架在设计上非常精致,特别是由于健壮性问题,这对于计算几何是非常特定的。如果没有这样的框架,构建健壮的应用程序将是一件令人费解的工作。
如果找不到适合我们需要的库,则应认真考虑使用诸如CGAL之类的库作为开发的基础框架。这将防止出现与健壮性相关的问题,当更改基础框架会很痛苦时,我们通常只会在开发过程的后期才开始注意到。顺便说一句,CGAL具有广泛的文档和非常活跃的用户邮件列表。
如果我们不了解几何图形软件中的鲁棒性问题,请查看此页面:
健壮性问题