我使用CGAL5.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());,可以肯定的是,对顶点总数减去删除的顶点计数的数学结果表明,不管我设置的比率如何,它都是1。
有关守则是:
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“属性,但是无论默认值是什么,位置属性都是。
如果有人能给我一个健全的检查,我会很感激的!
发布于 2021-02-08 19:21:35
当我试图把这个问题隔离到这里的时候,我开始四处游玩,发现因为我的网格很嘈杂,而且不完整--这是摄影测量扫描--标准的简化策略在我的边界上被破坏了。无视断言刚刚产生了一只海星。
因此,我遵循了用户手册中的例子,并将我的边界标记为不可移动的,现在它要高兴得多。
https://stackoverflow.com/questions/66062263
复制相似问题