#math #graphics #model #brep
#математика #графика #Модель #brep
Вопрос:
Есть ли у кого-нибудь хорошие стратегии реализации или ресурсы для создания системы моделирования b-rep?
OpenCascade — это, по-видимому, хорошая библиотека для моделирования b-rep (используется FreeCAD и pythonOCC — оба очень крутые), но библиотека огромная, сложная и, возможно, не является хорошей отправной точкой для изучения «движков» моделирования b-rep.
Я прочитал довольно много исследовательской работы, и хотя фундаментальная математика полезна для понимания того, почему все работает, у меня остались некоторые вопросы по реализации.
Структура данных с половинойребра, по-видимому, является предпочтительным способом хранения информации о теле в реализациях b-rep.
Итак, несколько вопросов в произвольном порядке:
-
Использование структуры данных halfedge как обычно реализуется рендеринг? Триангуляция на основе границ твердого тела?
-
Как обычно реализуются круглые грани / изогнутые поверхности? Например, цилиндр в одном базовом введении к b-rep, которое я прочитал, был сохранен внутри как призма. Т.Е. был сохранен вытянутый треугольник и метаданные о гранях крышки, обозначающие, что они действительно были круглыми.
-
Как обычно реализуются логические операции? Я читал о генерации BSP-дерева вдоль кривых пересечения, а затем объединении этих деревьев для создания новой геометрии. Существуют ли другие способы реализации логических операций и какие у них есть «за» / «против»?
Спасибо!
Если вы хотите предоставить пример кода, не беспокойтесь о языке — вопросы больше касаются деталей алгоритмической реализации / структуры данных
Комментарии:
1. Я не уверен, но я думаю, что это может быть хорошим вопросом для programmers.stackexchange.com
2. [ Достаточно справедливо, вопрос, вероятно, подходил бы для нескольких областей: cstheory.stackexchange.com , math.stackexchange.com ] хотя у меня сложилось впечатление, что программисты больше для профессиональной дискуссии и меньше о коде
3. Я не разбираюсь в программистах , но мне кажется, что этот вопрос требует обсуждения темы, а не конкретного ответа, и я думаю, что это ближе к описанию часто задаваемых вопросов для программистов .
Ответ №1:
Я работаю над B-Rep modeler на C # (я нахожусь на очень ранней стадии: это огромный проект), поэтому я задаю себе те же вопросы, что и вы. Вот мои ответы:
- Триангуляция: я не делал этого шага, но стратегия, о которой я думаю, заключается в следующем: спроецируйте границы граней в пространстве параметров, чтобы получить 2D-полигоны (с отверстиями), триангулируйте это с помощью алгоритма обрезки ушей, а затем перепроектируйте вершины треугольника в 3D-пространстве. Для криволинейных поверхностей мне нужно разделить полигоны сеткой, чтобы следовать поверхности;
- У цилиндра есть 3 ребра: две окружности и один отрезок прямой. У меня есть классы для каждого типа кривых (
Segment3d
,Circle3d
…), и каждая половина ребра содержит экземпляр одного из этих классов. Каждая грань содержит экземпляр объекта поверхности (плоскость, цилиндр, сфера …); - Здесь есть интересный проект, основанный на BSP-Tree, но он использует метод CSG, а не B-rep. Я все еще изучаю, как это сделать, но я не думаю, что мне понадобится дерево BSP. Сложность заключается в вычислении пересечений и топологии.
Лучшие книги, которые я нашел по этому предмету:
- 3D CAD — принципы и приложения (старые, но все еще актуальные)
- Геометрическое моделирование: математика фигур (более свежее, чем предыдущее, но менее понятное)
Комментарии:
1. Как насчет «Методов моделирования граничных представлений»?