使用CGAL设置曲面网格参数化的角落

时间:2019-05-14 11:49:33

标签: c++ mesh cgal parameterization

我正在使用CGAL-4.14中的square_border_parameterizer.cpp示例。我不仅要选择四个角落,还要决定哪个。也就是说,我想指定哪个角将被分配参数对(0,0),哪个将变成(0,1),哪个将变成(1,0),哪个将变成(1,1)。有可能吗?

我尝试了随CGAL一起提供的Nefertiti示例,其中包含选定角的多个排列。

corners1.selection.txt:

133 8 0 287

corners2.selection.txt:

8 0 287 133

corners 3.selection.txt:

287 0 8 133

但是,在Meshlab中打开的所有三种情况下,result.off似乎都相同。

我也看了一下源代码,但是我还不能断定如何实现我的目标。据我所知,文档仅提到一个人可以选择四个角。

1 个答案:

答案 0 :(得分:0)

您应该调整的是参数化程序在参数中采用的边界半边。

在内部(特别是在Square_border_parameterizer的函数compute_offsets()中),通过从您经过的半边线bhd开始,通过沿边界移动拐角,将角的几何uv位置赋予其角在输入中:第一个遇到的角将在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之前,您将获得所需旋转的参数化空间。