用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 的任何旋转。
我正在玩 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 的任何旋转。