【问题标题】:CGAL edge_collapse assertion failureCGAL edge_collapse 断言失败
【发布时间】: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 也很好。

标签: c++ cgal


【解决方案1】:

在尝试将问题隔离到此处发布时,我开始玩弄,发现由于我的网格嘈杂且不完整 - 它是摄影测量扫描 - 标准的简化策略在我的边界上大喊大叫。忽略断言只会产生海星。

所以我按照user manual中的例子,将我的边框标记为不可移动,现在开心多了。

【讨论】:

    猜你喜欢
    • 2011-05-27
    • 2021-03-16
    • 2010-09-26
    • 2018-11-09
    • 2021-01-20
    • 2014-06-10
    • 2014-02-10
    • 2013-04-03
    相关资源
    最近更新 更多