В моем приложении я работаю с большим количеством треугольных сеток, и иногда мне нужно уменьшить количество треугольников в них (свернуть некоторые ребра). Для обработки сетки я использую openmesh (openmesh.org), так как он современный (C++), но в основном потому, что он не тащит с собой огромное количество зависимостей (зависит только от C++ std, и любой современный компилятор может с этим справиться (мне нужно быть кроссплатформенным). Linux/Windows/Mac OSX)).
Теперь мне нужно уменьшить (decimate в терминологии openmesh) некоторые сетки, но мне нужно сохранить границы. (рассматриваемые сетки изначально были сеточными (512x512), но в центре их были вытянуты/добавлены некоторые выпуклые элементы, важно, чтобы после уменьшения внешние края сетки по-прежнему образовывали прямоугольник)
Я не вижу никакого способа децимировать их в openmesh и сохранить объем/контур, все модули децимации OpenMesh::Decimater::Mod* используют квадрики в качестве основы.
В GTS (GNU Triangulated Surface Library) реализована редукция Линдстрема-Тёрка, которая идеально подходит для моих нужд (я сделал грязную оболочку, чтобы проверить, нужна ли она мне), и она работает, но с GTS есть проблемы - это не многопоточное сохранение (я сокращаю количество сеток в нескольких потоках), а с GTS это невозможно, поскольку он использует глобальные переменные внутри библиотеки для отключения/включения некоторых вещей при уменьшении сетки:/) (а также перетаскивает весь glib как его зависимости)
Есть еще CGAL и в нем тоже реализован Lindstrom-Turk, но он тащит за собой весь буст и прочие зависимости :/
Есть ли какой-нибудь модуль прореживания для openmesh, который выполняет прореживание с сохранением границы/объема? (Я искал, но не нашел :/)