加载 .off 文件很容易:
typedef CGAL::Simple_cartesian<double> Kernel;
typedef CGAL::Surface_mesh<Kernel::Point_3> SurfaceMesh;
typedef CGAL::Polyhedron_3<Kernel> Polyhedron;
...
SurfaceMesh surface;
Polyhedron poly;
std::fstream inputOffFile( "myFile.off" );
inputOffFile >> poly;
CGAL::copy_face_graph( poly, surface);
然后,我可以通过以下方式迭代顶点坐标:
std::vector<float> verts;
for( SurfaceMesh::Vertex_index vi : surface.vertices() )
{
Point pt = surface.point( vi );
verts.push_back( pt.x() );
verts.push_back( pt.y() );
verts.push_back( pt.z() );
}
但是我如何访问也存储在 .off 文件中的顶点颜色?
编辑:可能 CGAL::copy_face_graph 不会复制颜色属性,所以我想我需要不同的方法?
最佳答案
您需要使用 SurfaceMesh 的属性映射。当且仅当 OFF 文件有颜色(意味着第一行的第一个指示是 COFF 而不是 OFF),并且每个顶点都有颜色而不仅仅是每个面有颜色,那么你的 SurfaceMesh 将有一个名为“v:”的内部属性映射颜色”。您可以通过调用来访问它
SurfaceMesh::Property_map<SurfaceMesh::Vertex_index, CGAL::Color> vcolors =
surface.property_map<SurfaceMesh::Vertex_index, CGAL::Color >("v:color").first;
for( SurfaceMesh::Vertex_index vi : surface.vertices() )
{
CGAL::Color ci = vcolors[vi];
}
如果每个面都有颜色,您可以类似地访问它,但通过搜索名为“f:color”的属性映射。您可以使用 surface.property_map<......>(...).second 检查 map 是否存在。
关于c++ - CGAL:加载 .off 文件后如何访问顶点颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55955579/