在我的应用程序中,我使用了很多三角形网格,有时我需要减少其中的三角形数量(折叠一些边)。对于网格处理,我使用 openmesh (openmesh.org),因为它是现代的 (C++),但主要是因为它不会拖累大量依赖项(仅依赖于 c++ std 并且任何现代编译器都可以处理它(我需要跨平台) Linux/Windows/Mac OSX))。
现在我需要减少(openmesh 术语中的抽取)一些网格,但我需要保留边界。(有问题的网格是原始网格(512x512),但在它们的中心,一些凹面元素被挤出/添加,关键是在缩小后网格的外边缘仍然形成矩形)
我看不到任何方法可以在 openmesh 中抽取它们并保留体积/轮廓,所有 OpenMesh::Decimater::Mod* 抽取模块都使用二次作为其基础。
在 GTS(GNU Triangulated Surface Library)中,实现了 Lindstrom-Turk 缩减,非常适合我的需求(我做了一些肮脏的包装来测试它是否是我想要的)并且它可以工作,但是 GTS 存在问题 - 它是不是多线程保存(我在多个线程上减少了许多网格)并且使用 GTS 是不可能的,因为它使用库中的全局变量来禁用/启用某些东西,同时减少网格:/)(而且它也拖了整个 glib,因为它是依赖项)
还有 CGAL,它也实现了 Lindstrom-Turk,但它本身拖了整个 boost 和其他依赖项:/
是否有任何用于 openmesh 的抽取器模块可以通过边界/体积保留进行抽取?(我已经搜索过,但没有找到:/)