CGAL edge_collapse 断言失败
CGAL edge_collapse assertion failure
我正在使用内核类型为 typedef CGAL::Simple_cartesian<float> Kernel;
和表面网格类型为 typedef CGAL::Surface_mesh<Kernel::Point_3> Mesh;
的 CGAL 5.1
我通过 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”属性,但是位置 属性 是默认值。
如果有人能给我一个完整性检查,我将不胜感激!
虽然试图将问题隔离到 post 此处,但我开始尝试并发现因为我的网格嘈杂且不完整 - 它是摄影测量扫描 - 标准简化策略在我的边界上呕吐。忽略断言刚刚产生了海星。
所以我按照user manual中的例子,将我的边框标记为不可移动,现在快乐多了。
我正在使用内核类型为 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”属性,但是位置 属性 是默认值。
如果有人能给我一个完整性检查,我将不胜感激!
虽然试图将问题隔离到 post 此处,但我开始尝试并发现因为我的网格嘈杂且不完整 - 它是摄影测量扫描 - 标准简化策略在我的边界上呕吐。忽略断言刚刚产生了海星。
所以我按照user manual中的例子,将我的边框标记为不可移动,现在快乐多了。