Настройка углов параметризации поверхностной сетки с помощью CGAL

Я играю с примером Square_border_parameterizer.cpp из CGAL-4.14. Я хотел бы не только выбрать четыре угла, но и решить, какой из них есть какой. То есть я хотел бы указать, какому углу будет присвоена пара параметров (0,0), какой станет (0,1), какой станет (1,0) и какой станет (1,1). Является ли это возможным?

Я попробовал пример Nefertiti, поставляемый с CGAL, с несколькими перестановками выбранных углов.

углов1.выбор.txt:

133 8 0 287

углов2.выбор.txt:

8 0 287 133

углы 3.selection.txt:

287 0 8 133

Тем не менее, result.off кажется совершенно одинаковым во всех трех случаях при открытии в Meshlab.

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


person Dominik Mokriš    schedule 14.05.2019    source источник


Ответы (1)


Что вам следует настроить, так это граничное полуребро, принимаемое параметризатором в качестве аргумента.

Внутренне (в частности, в функции для Square_border_parameterizer), углам присваивается их геометрическое положение в ультрафиолетовой области путем обхода границы, начиная с полуребра bhd, которое вы передали во входных данных: первый встретившийся угол будет в uv(0,0) и т. д.

Таким образом, если вы хотите изменить, какая вершина находится в (0,0), и посмотрите на squared_border_example.cpp, с которым вы играли, вы можете просто добавить:

  while(source(bhd, sm) != vda[i])
    bhd = next(bhd, sm); // walk the border

перед вызовом SMP::paramterize() с i=0,...,3, и вы получите любое вращение параметризованного пространства, какое только захотите.

person Mael    schedule 15.05.2019
comment
Я последовал твоему совету. Из нескольких экспериментов кажется, что vda[0] затем присваивается значение параметра (0,0). Однако значения параметров остальных точек кажутся независимыми от их порядка; Я предполагаю, что они определяются ориентацией полуребер вокруг vda[0]. Этого достаточно для моего приложения. (-; - person Dominik Mokriš; 11.06.2019
comment
Поскольку вход должен быть топологическим диском, вершины в UV-области и на входе должны появляться в одном и том же порядке, поэтому, как вы говорите, другие позиции будут определяться обходом границы. - person Mael; 12.06.2019