Хорошая 3D-сетчатая библиотека
Я ищу хорошую библиотеку 3D Mesh
- Должна иметь возможность читать популярные форматы (OFF, OBJ...)
- Должен поддерживать как структуру с половинным краем, так и суп треугольника
- Должно быть толерантным к ошибкам и незаконным сеткам.
- Основные геометрические операции - пересечения, нормальный расчет и т.д.
- Самое главное - не должно быть свернуто с бесконечными шаблонами и иерархиями наследования.
Я пробовал как CGAL, так и OpenMesh, но оба они терпят неудачу в последней точке.
В частности, CGAL, который невозможно выполнить даже с помощью самых современных инструментов анализа кода.
До сих пор я серьезно подумываю о том, чтобы вытащить свои собственные.
Мое предпочтение - С++, но я открыт для других параметров.
Ответы
Ответ 1
Могу ли я спросить, почему последнее требование является обязательным?
Библиотеки, написанные для общественного потребления, разработаны как можно более общие, чтобы они могли использоваться самой широкой аудиторией. В С++ это часто лучше всего использовать с использованием шаблонов. Это было бы очень сильно сосать, если бы нашел хорошую библиотеку, только чтобы обнаружить, что это бесполезно для ваших целей, потому что в ней использовались плавающие элементы вместо двухлокальных.
Например, CGAL, по-видимому, приняла хорошо известную и хорошо протестированную парадигму STL для написания родовых и расширяемых библиотек С++. Это действительно затрудняет работу с инструментами анализа кода; Я сомневаюсь, что они хорошо разбираются в заголовках STL.
Но пытаетесь ли вы использовать библиотеку или изменить ее? В любом случае, похоже, у них есть чрезвычайно высококачественная документация (например, Руководство по ядру), что должно сделать относительно простым понять, что вам нужно do, не прибегая к чтению их кода.
Отказ от ответственности: Я знаю, что это не то, о чем вы просите. Но я не думаю, что то, что вы ищете, существует. необычно редко можно найти код с открытым исходным кодом с документацией так же хорошо, как то, что я видел при сканировании через CGAL. Я настоятельно рекомендую вам взглянуть на это.
Ответ 2
Во-первых, некоторые общие комментарии о ваших требованиях:
- чтение OBJ или OFF файлов очень просто. Вы можете реализовать его самостоятельно, в дополнение к библиотеке, обеспечивающей более геометрические функции, через несколько минут. С другой стороны, геометрическая часть таких библиотек настолько сложнее, что вы должны, безусловно, сосредоточиться на своих требованиях, которые действительно касаются геометрических алгоритмов, и попытаться найти то, что соответствует вашим потребностям. Тогда, конечно, если есть связь, начните рассматривать эту проблему с интерфейсом.
- в терминах геометрических операций, вы запрашиваете пересечение. Вы имеете в виду пересечение примитивов? (для чего можно найти и реализовать хорошие и простые алгоритмы) или вычисление пересечения двух сеток? или обнаружение столкновения? (которые являются деликатными вопросами, без простого ответа).
- Если вы более конкретно, с более высокой точки зрения, о том, какие инструменты вы хотите построить, тогда люди смогут направить вас к нужному инструменту. Ваши требования слишком низки.
Насколько я понимаю ваш вопрос, мне кажется, что вы явно не видите точки библиотек, таких как CGAL и OpenMesh. Такие библиотеки могут не предоставлять все инструменты более высокого уровня, которые вам нужны, но их цель - предоставить вам (особенно в случае CGAL) всю геометрическую структуру, на которой вы можете построить геометрическое приложение. Такие геометрические рамки очень деликатные для дизайна, особенно из-за проблемы надежности, которая очень специфична для вычислительной геометрии. И без такой структуры создание надежного приложения - это ужасающее усилие.
Если вы не найдете библиотеку, которая вам подходит, вам следует серьезно подумать о том, чтобы использовать библиотеку, такую как CGAL, в качестве базовой основы для вашей разработки. Это предотвратит появление проблем, связанных с устойчивостью, что вы обычно только начинаете замечать в конце своего процесса разработки, когда изменение базовой структуры будет болезненным. В стороне, CGAL имеет обширную документацию и очень активный список рассылки пользователей.
Если вы не знаете о проблемах надежности в программном обеспечении геометрии, посмотрите на эту страницу:
проблемы устойчивости
Ответ 3
Я не знаю, может ли это быть полезным для вас. Существует также другая библиотека, которая называется Mangrove TDS Library, свободно доступная по адресу http://mangrovetds.sourceforge.net Она поддерживает любые типы фигур (2d, 3d, любой размерности) с любыми доменами (многообразием, не многообразием, псевдоамплионами, комплексами iqm, симплициальными комплексами и т.д.). Он, возможно, поддерживает нерегулярные фигуры, т.е. Сформированные кусками разных размерностей.
Его основное свойство состоит в том, что оно расширяемо в том смысле, что поддерживается любая топологическая структура данных. Это плагин, который можно изменять и загружать во время выполнения.
Его реализация основана на индексировании объектов на основе массивов, закодированных в структуре данных, поддерживающих итераторы. Он также поддерживает динамические свойства.
Наконец, он поддерживает неявное представление объектов, непосредственно не закодированных в структуре данных (объектах-призраках), которые повышают эффективность топологических запросов