Реализация моделирования представления границ

Есть ли у кого-нибудь хорошие стратегии реализации или ресурсы для создания системы моделирования b-rep?

OpenCascade - это, очевидно, хорошая библиотека для моделирования b-rep (используемая FreeCad и PythonOCC оба очень крутые), но библиотека огромна, сложна и может не быть хорошей отправной точкой для изучения "движков" моделирования b-rep.

Я довольно много читал исследовательскую работу, и хотя фундаментальная математика полезна для понимания того, почему все работает, у меня остались некоторые вопросы по реализации.

Представляется, что структура данных с половинным краем является предпочтительным способом хранения информации о теле в реализациях b-rep.

Итак, несколько вопросов в произвольном порядке:

  1. Используя половинную структуру данных, как обычно выполняется рендеринг? Триангуляция на основе границ твердого тела?

  2. Как обычно применяются круглые грани / изогнутые поверхности? Например, цилиндр в одном базовом введении к б-репу, который я читал, хранился внутри как призма. Т.е. экструдированный треугольник и метаданные были сохранены вокруг граней колпачка, обозначая, что они действительно были круглыми.

  3. Как обычно выполняются логические операции? Я читал о создании BSP-Tree вдоль кривых пересечений, а затем о комбинировании этих деревьев для создания новой геометрии. Существуют ли другие способы реализации логических операций и какие у них есть плюсы / минусы?

Спасибо!

Если вы хотите привести пример кода, не беспокойтесь о языке - вопросы больше о деталях реализации алгоритмической структуры / структуры данных

1 ответ

Я работаю над B-Rep-моделером на C# (я на очень ранней стадии: это огромный проект), поэтому я задаю себе те же вопросы, что и вы. Вот мои ответы:

  1. Триангуляция: я не сделал этого шага, но стратегия, о которой я думаю, заключается в следующем: спроецируйте границы граней в пространстве параметров, чтобы получить 2D-многоугольники (с отверстиями), триангулируйте это с помощью алгоритма отсечения ушей, а затем перепроектируйте вершины треугольника. в трехмерном пространстве. Для изогнутых поверхностей мне нужно разделить полигоны с помощью сетки, чтобы следовать поверхности;
  2. Для цилиндра есть 3 ребра: два круга и один отрезок. У меня есть классы для каждого типа кривых (Segment3d, Circle3d...) и каждая половина содержит экземпляр одного из этих классов. Каждая грань содержит экземпляр поверхностного объекта (плоскость, цилиндр, сфера...);
  3. Здесь есть интересный проект, основанный на BSP-дереве, но он использует метод CSG, а не B-rep. Я все еще изучаю, как это сделать, но не думаю, что мне понадобится дерево BSP. Сложность заключается в вычислении пересечений и топологии.

Лучшие книги, которые я нашел на эту тему:

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