OpenMesh Decimater不会减少顶点数

时间:2016-07-20 14:19:32

标签: c++ openmesh

我正在尝试使用OpenMesh对网格进行抽取。 我按照文档中的说明进行了跟踪:

    cout << "Vertices: " << mesh->n_vertices() << endl;

    DecimaterT<Mesh>   decimater(*mesh);  // a decimater object, connected to a mesh
    ModQuadricT<Mesh>::Handle hModQuadric;      // use a quadric module

    decimater.add(hModQuadric); // register module at the decimater
    decimater.initialize();       // let the decimater initialize the mesh and the
                                  // modules
    decimater.decimate_to(15000);         // do decimation

    cout << "Vertices: " << decimater.mesh().n_vertices() << endl;

decimate_to方法正确终止并返回56,000,这是应该折叠的顶点数。

但是,我可以通过日志告诉网格上的顶点数没有改变。 这怎么可能?

1 个答案:

答案 0 :(得分:3)

抽取通过删除元素(顶点,面等)来更改网格的连通性。在OpenMesh中删除网格元素是通过暂时标记要删除的相应元素(使用mesh.status(handle).deleted()属性)来实现的。只有在明确请求时才会通过调用mesh.garbage_collection()来实际删除已删除的元素。在垃圾收集之前,mesh.n_vertices()仍然包括在其计数中标记为删除的顶点。

Decimator不会自动提示垃圾收集;留给用户这样做。在mesh.garbage_collection()之后插入decimater.decimate_to(...)的来电可以解决您的问题。