Реализация моделирования представления границ - PullRequest
4 голосов
/ 21 мая 2011

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

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

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

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

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

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

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

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

Спасибо!

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

1 Ответ

0 голосов
/ 03 января 2016

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...