Загрузка результата сетки libigl в PCL PolygonMesh

Я выполнил некоторую обработку меша с использованием libigl, и результаты сохраняются, как показано ниже:

MatrixXd V;
MatrixXi F;
Matrix<unsigned char, Dynamic, Dynamic> C;

Я могу сохранить эти данные в виде файла PLY, используя команду ниже:

 igl::writePLY("out.ply", V, F, C, false);

Но я хочу визуализировать это с помощью программы просмотра PCL. что-то похожее на код ниже:

pcl::PolygonMesh::Ptr mesh(new pcl::PolygonMesh);

//  Here is what I need to do in between! --> converting V,F,C from libigl mesh into PCL mesh format.
// .....

pcl::visualization::PCLVisualizer viewer;
viewer.addPolygonMesh(*mesh);
viewer.spin();

Знаете ли вы, как конвертировать / загружать вершины и номиналы в формат сетки pcl? может быть для цикла?

0 ответов

Информация о цвете по-прежнему отсутствует, но следующий код преобразует формат из libigl в PCL. Тем не менее, у libigl есть средство просмотра, которое вы можете использовать вместо этого.

// load the mesh
Eigen::MatrixXd V;
Eigen::MatrixXi F;
igl::readPLY("input.ply", V, F);

pcl::PolygonMesh::Ptr polymesh (new pcl::PolygonMesh);
pcl::PointCloud<pcl::PointXYZRGB>::Ptr mesh_cloud (new pcl::PointCloud<pcl::PointXYZRGB>);

mesh_cloud->points.resize(V.rows());
for (int i=0; i<V.rows(); i++)
{
    mesh_cloud->points[i].x = V(i, 0);
    mesh_cloud->points[i].y = V(i, 1);
    mesh_cloud->points[i].z = V(i, 2);
}
pcl::toPCLPointCloud2( *mesh_cloud, polymesh->cloud );

polymesh->polygons.resize(F.rows());
for (int i=0; i<F.rows(); i++)
{
    polymesh->polygons[i].vertices.resize(3);
    polymesh->polygons[i].vertices[0] = F(i, 0);
    polymesh->polygons[i].vertices[1] = F(i, 1);
    polymesh->polygons[i].vertices[2] = F(i, 2);
}

pcl::visualization::PCLVisualizer viewer;
viewer.setBackgroundColor (1, 1, 1);
viewer.addPolygonMesh(*polymesh);
viewer.spin();
Другие вопросы по тегам