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

#math #graphics #model #brep

#математика #графика #Модель #brep

Вопрос:

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

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

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

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

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

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

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

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

Спасибо!

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

Комментарии:

1. Я не уверен, но я думаю, что это может быть хорошим вопросом для programmers.stackexchange.com

2. [ Достаточно справедливо, вопрос, вероятно, подходил бы для нескольких областей: cstheory.stackexchange.com , math.stackexchange.com ] хотя у меня сложилось впечатление, что программисты больше для профессиональной дискуссии и меньше о коде

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

Ответ №1:

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

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

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

Комментарии:

1. Как насчет «Методов моделирования граничных представлений»?