【发布时间】:2021-02-05 11:14:46
【问题描述】:
我正在使用 CGAL 5.1,内核类型为 typedef CGAL::Simple_cartesian<float> Kernel;,表面网格类型为 typedef CGAL::Surface_mesh<Kernel::Point_3> Mesh;
我通过 Assimp 加载网格,一切似乎都很好。但是当我开始运行 edge_collapse 时,我得到了一个断言失败 CGAL_assertion(resulting_vertex_count == vertices(m_tm).size()); 果然,对顶点总数减去删除的顶点数进行数学运算表明,无论我设置的比率如何,它都偏离了一个。
相关代码为:
if(!CGAL::is_triangle_mesh(*node->mesh_info.mesh))
{
std::cerr << "Input geometry is not triangulated." << std::endl;
return;
}
if(!is_valid_polygon_mesh(*node->mesh_info.mesh))
{
std::cerr << "Input geometry is not valid." << std::endl;
return;
}
SMS::Count_ratio_stop_predicate<Mesh> stop(reduction);
SMS::edge_collapse(*node->mesh_info.mesh, stop);
这两个测试都通过了,那么我有什么明显的遗漏吗?我还没有尝试过其他算法,也没有设置任何可选属性。我已经使用 Assimp 的工具清理了网格,用于移除退化的面和边,并合并重合顶点,但我没有尝试过任何 CGAL 的工具。
我在每个顶点上都有一个“v:uv”属性,但位置属性是默认值。
如果有人能给我一个健全的检查,我将不胜感激!
【问题讨论】:
-
您能否分享输入网格以便我们尝试重现该问题?一个最小的 cpp 也很好。