Подтвердить что ты не робот

2D-алгоритм построения прогнозируемой трехмерной сетки

С учетом: 3D-сетка, определенная с набором вершин и треугольников, создающих сетку с этими точками.

Задача: Найти 2-й контур проецируемой произвольно вращающейся сетки на произвольной плоскости.

Проецирование прост. Задача заключается в нахождении "корпуса" проекционных краев треугольника в плоскости. Мне нужна помощь с помощью ввода/указателей при исследовании этого алгоритма. Для простоты мы можем предположить, что 3D-ребра проецируются прямо на плоскость ху.

4b9b3361

Ответ 1

  • Начните с самой правой точки (точка с наибольшей координатой x)
  • Получить все ребра из этой точки
  • Следуйте краю с наименьшим углом к ​​положительной оси X, а также добавьте его в набор решений
  • Из достигнутого момента следуйте и добавьте край с наименьшим углом к ​​краю, который вы пришли из
  • Повторяйте, пока не достигнете исходной точки.

Ответ 2

Я вижу только ответы на выпуклые решения, так что вот я для невыпуклых. (Это было немного запутанно, каково было намерение.)

Возьмите все ребра из 2D-треугольников и сгруппируйте их. Если два ребра разделяют обе конечные точки, они находятся в одной группе. Все группы, имеющие только одно ребро, являются частью оболочки.

Наконец, вы можете комбинировать края оболочки с одним кольцом, объединяя их вместе.

Ответ 3

Метод альфа-форм, упомянутый в этом вопросе, обрабатывает общий набор точек, где вершинные соединения неизвестны:

Есть ли эффективный алгоритм для создания двумерного вогнутого корпуса?

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

Алгоритм грубой силы может быть осуществимым, особенно если используются пространственные структуры сортировки. например, для каждой грани:

  • Аспект проекта на плоскости
  • Убедитесь, что проецируемая грань полностью закрыта существующей геометрией, если да: сделано (нет необходимости расширять проецируемый силуэт).
  • Если точки выходят за пределами существующей геометрии, сделайте треугольник-треугольник пересечение, чтобы определить, какие участки выходят за пределы, построить произвольный п-угольник (возможно вогнутый), чтобы заполнить недостающее пространство, а затем нарезать п-угольник, чтобы треугольники

Другая идея, в зависимости от требуемой точности, - это просто стрелять из луча, нормального от вашей проекционной плоскости, до вашей оригинальной геометрии. Создайте 2d hit/miss и используйте это, чтобы определить ваши экстенты.

Ответ 4

2D-контур проекции сетки является подмножеством проекции его ребер.

Используя это наблюдение, можно определить 2D-схему, используя следующий метод:

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

Обратите внимание, что этот метод будет сообщать обо всех ребрах, которые ортогональны плоскости проектирования, даже те, которые не видны с точки зрения плоскости проекции. Например, с тором он найдет внутренние и внешние контуры, даже когда тор вращается таким образом, что его внутреннее отверстие не видно с точки зрения проекционной плоскости. Чтобы разобрать, какие края видны, вам понадобится какой-то тест на видимость. Если предполагаемое использование предназначено для пользовательского отображения, вы можете использовать буфер глубины, вычисленный с матрицей ортогональной проекции, для рендеринга геометрии с точки зрения плоскости проекции и выполнить некоторое z-тестирование, чтобы определить, какие ребра видны с плоскости. Если вам нужна точность, вам нужно будет выполнить пересечение лучей/треугольников, чтобы определить видимость.

Ответ 5

Просто добавьте: очень интуитивно понятный способ поиска краев в проекции - это отбрасывание лица! Любое ребро между отбракованным и не отбракованным лицом должно быть контуром. Если вы хотите скрыть внутренние края, просто используйте z-буфер. Отбраковка задней поверхности - это просто порядок вершины постпроекции и очень дешевый для вычисления.

Ответ 6

Это просто вопрос проецирования xyz точек в x'Y 'точек на произвольной плоскости, а затем просто выполнение выпуклой оболочки в этих координатах?