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

Setting the corners of surface mesh parameterization with CGAL

我正在玩 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

角球3.selection.txt:

287 0 8 133

然而,result.off 在 Meshlab 中打开时,在所有三种情况下似乎都完全相同。

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

你应该调整的是参数化器在参数中采用的边界半边。

在内部(特别是,在 Square_border_parameterizer 的函数 compute_offsets() 中),通过从你设置的 halfedge bhd 开始遍历边界,角被赋予它们的几何 uv 位置已输入:遇到的第一个角将在 uv(0,0),等等

因此,如果你想修改哪个顶点在 (0,0) 并查看你正在玩的 squared_border_example.cpp,你可以简单地添加:

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

在使用 i=0,...,3 调用 SMP::paramterize() 之前,您将获得您可能需要的参数化 space 的任何旋转。