Хорошая 3D сетка

Я ищу хорошую библиотеку 3D Mesh

  • Должен уметь читать популярные форматы (OFF, OBJ...)
  • Должна поддерживать как половинную структуру, так и суп из треугольника
  • Должны быть терпимы к ошибкам и незаконным сеткам.
  • Основные геометрические операции - пересечения, нормальный расчет и т. Д.
  • Самое главное - не следует запутывать бесконечные иерархии шаблонов и наследования.

Я пробовал и CGAL, и OpenMesh, но оба с треском провалились в последнем пункте.

В частности, CGAL, за которым невозможно следовать даже с помощью самых современных инструментов анализа кода.

Пока что я серьезно думаю о том, чтобы вытащить себя.

Я предпочитаю C++, но я открыт для других вариантов.

3 ответа

Могу я спросить, почему последний пункт является обязательным?

Библиотеки, написанные для общественного потребления, разработаны так, чтобы быть как можно более общими, чтобы их можно было использовать максимально широкой аудитории. В C++ это часто лучше всего делать с помощью шаблонов. Если бы вы нашли хорошую библиотеку, она бы ужасно сосала, но обнаружила, что она бесполезна для ваших целей, потому что она использует числа с плавающей запятой вместо двойных.

Например, CGAL, похоже, принял хорошо известную и хорошо протестированную парадигму STL по написанию универсальных и расширяемых библиотек C++. Это действительно мешает следовать инструментам анализа кода; Я сомневаюсь, что они очень хорошо следят за заголовками STL.

Но вы пытаетесь использовать библиотеку или изменить ее? В любом случае, у них, кажется, есть какая-то чрезвычайно качественная документация (например, Руководство по ядру), которая должна сделать относительно простым определение того, что вам нужно сделать, не прибегая к чтению их кода.

Отказ от ответственности: я знаю, что это не то, что вы просите. Но я не думаю, что то, что вы ищете, существует. Крайне редко можно найти открытый исходный код с документацией, такой же хорошей, как то, что я видел при сканировании через CGAL. Я настоятельно рекомендую вам еще раз взглянуть на это.

Сначала несколько общих замечаний о ваших требованиях:

  • читать файлы OBJ или OFF очень легко. Вы можете реализовать это самостоятельно, поверх библиотеки, предоставляющей больше геометрических элементов, за несколько минут. С другой стороны, геометрическая часть таких библиотек настолько сложна, что вам, безусловно, следует сосредоточиться на ваших требованиях, которые действительно имеют дело с геометрическими алгоритмами, и попытаться найти то, что соответствует вашим потребностям. Тогда, конечно, если есть связь, начните рассматривать эту проблему интерфейса.
  • с точки зрения геометрических операций, вы просите пересечения. Вы имеете в виду пересечение примитивов? (для каких хороших и простых алгоритмов можно найти и реализовать) или вычисление пересечения двух сеток? или обнаружение столкновения? (это деликатные вопросы, без простого ответа)
  • Если вы будете более конкретны, с точки зрения более высокого уровня, о том, какие инструменты вы хотите создать, то люди смогут направить вас к нужному инструменту. Ваши требования слишком низкого уровня.

Насколько я понимаю ваш вопрос, мне кажется, что вы не совсем понимаете смысл библиотек, таких как CGAL и OpenMesh. Такие библиотеки могут не предоставлять все необходимые инструменты более высокого уровня, но их цель - предоставить вам (особенно в случае CGAL) всю геометрическую структуру, на которой вы можете построить геометрическое приложение. Такие геометрические структуры очень деликатны для проектирования, особенно из-за проблемы надежности, которая очень специфична для вычислительной геометрии. А без такой структуры создание надежного приложения - это ужасное усилие.

Если вы не можете найти библиотеку, которая соответствует вашим потребностям, вам следует серьезно рассмотреть вопрос об использовании библиотеки, такой как CGAL, в качестве основы для вашей разработки. Это предотвратит появление проблем, связанных с устойчивостью, которые вы, как правило, начнете замечать только в конце процесса разработки, когда изменение базовой структуры будет болезненным. Кроме того, CGAL имеет обширную документацию и очень активный список рассылки пользователей.

Если вы не знаете о проблемах надежности в программном обеспечении геометрии, посмотрите на эту страницу: проблемы надежности

Я не знаю, может ли это быть полезным для вас. Существует также другая библиотека, которая называется Библиотека мангровых TDS, свободно доступная по адресу http://mangrovetds.sourceforge.net/ Она поддерживает любые типы фигур (2d, 3d, любое измерение) с любыми доменами (многообразие, не-многообразие). псевдомногообразия, iqm комплексы, симплициальные комплексы и т. д.). Возможно, он поддерживает нерегулярные формы, т. Е. Образованные кусочками разных размеров.

Его основное свойство заключается в том, что он расширяемый в том смысле, что поддерживается любая топологическая структура данных. Это плагин, который может быть изменен и загружен во время выполнения.

Его реализация основана на индексировании объектов на основе массива, закодированных в структуре данных, поддерживающих итераторы. Он также поддерживает динамические свойства.

Наконец, он поддерживает неявное представление сущностей, не закодированных непосредственно в структуре данных (призрачных сущностей), что повышает эффективность топологических запросов.

Другие вопросы по тегам