2014-11-11 2 views
2

В настоящее время я пытаюсь реализовать крах половинного края, чтобы выполнить инкрементное ремеширование. Я имею дело с многообразием сетки. Рассмотрим следующую простую сетку:Half-Edge Collapse

enter image description here

Цель состоит в том, чтобы свернуть в б.

enter image description here

В этом случае, однако, это приводит к не-коллектору сетки

enter image description here

, который я хочу, чтобы предотвратить. Мой вопрос:

Как это сделать заблаговременно, т. Е. Выполнить проверку перед свертыванием, безопасна ли операция коллапса?

Я пробовал критерии (условие связи) из Hoppe, но оба выполняются так, как кажется. Кроме того, единственное пересечение однокольца a и b является c, таким образом, только одна точка, поскольку она является граничным ребром.

И вообще, какие еще проверки необходимо выполнить, чтобы избежать незаконного срыва?

Прямо сейчас, у меня есть следующие критерии:

  • если а и Ь граничные вершины, то ребро АВ должно быть граничным
  • а, б и третья вершина треугольника, прилегающих к edge ab должен быть допустимым треугольником (условие связи)
  • Если треугольники, прилегающие к краю ab, являются граничными треугольниками, не сжимайте, если a находится на граничном краю
  • , если пересечение a-1-ring и b- 1-кольцо не равно двум (или одному для граничных ребер), не разрушится

ответ

2

Вы можете посмотреть на этой бумаге: (? прогрессирующей сетки)

Tamal Dey, Herbert Edelsbrunner, Sumanta Guha, and Dmitry Nekhayev. Topology preserving edge contraction.

Я не уверен, какая бумага Хоппе вы имеете в виду, но состояние ссылка Тамала Дей является отличающийся от того, который вы указали. Наглядно, ребро АВ, если сворачиваемая

one-ring(a) intersected with one-ring(b) == one-ring(ab). 

Для ребро АВ, одно кольцо является множество других вершин граней, разделяющих AB. Также в состоянии связи Тамаль Дей необходимо учитывать размер пространства внедрения. (т. е. условие связи отличается для ребра в 2d и в 3d). Многие другие работы используют это условие связи для сглаживания ребер без возникновения топологических ошибок.

В чем-то непонятно, из вашего примера я не мог сказать, является ли это сеткой с границей в 3d или 2d, или как «плоский». Эти факторы определяют, имеет ли полученная сетка «сворачивание» или нет, например. треугольник bcd считается сложенным в 2d, но может быть хорошим в 3d, если сетка не является плоской.

+0

Спасибо за ответ, прошло некоторое время с тех пор, как я разместил этот вопрос.Пример должен был быть просто 2d, причем все вершины, кроме 'c', являются граничными вершинами. Просто быстро пройдя условие: 'однокольцо (a) = {b, c, d}, однокольцо (b) = {a, c, e}, однокольцо (ab) = {c}' , что означало бы «однокольцо (а) пересекалось однокольцо (b) = {c} = однокольцо (ab)», поэтому условие было бы выполнено, даже если bcd сложен, правильно? – peacer212

+0

Да, в этом случае условие связи должно быть выполнено, даже если есть геометрическая складка. Дело в том, что условие предназначено только для сохранения топологии без изменения геометрических артефактов. Чтобы предотвратить сгибание треугольника, я думаю, вам нужно либо подтолкнуть затронутые вершины вокруг, например. пересчитайте vert c как некоторую взвешенную сумму своего однокольца или действительно задержите сбрасывание тех ребер, которые повлекут за собой большую деформацию – danielyan86129

+0

(это также работает с каркасом краев, или сетью с прореживанием, используя геометрические ошибки, чтобы дать каждому краевому сокращению приоритет). Я также работаю над чем-то похожим, но геометрическое искажение не вызывает беспокойства, так как я только обрушиваю край длины 0. Надеюсь, что это обсуждение поможет. – danielyan86129

Смежные вопросы