1. Descripción del fenómeno
Usando pcl::GreedyProjectionTriangulation para triangular la nube de puntos, la malla obtenida se puede mostrar directamente en pcl::visualization::PCLVisualizer sin ningún problema:
// Create a PCLVisualizer object
pcl::visualization::PCLVisualizer viewer("PCL Viewer");
// Define the color of the point cloud
viewer.setBackgroundColor(0.5, 0.6, 0.0);
// Add the point cloud and its normals to the viewer
viewer.addPointCloudNormals<pcl::PointXYZRGBNormal>(cloud_with_normals, 2); // 显示点云以及法线
viewer.addPolygonMesh(mesh); // 显示mesh
// Set the camera position and orientation
viewer.setCameraPosition(0.0, 0.0, -2.0, 0.0, -1.0, 0.0);
// Start the viewer
while(!viewer.wasStopped())
{
viewer.spin();
// viewer.spinOnce();
}
Como puede ver, las normales están todas en el mismo lado, lo que indica que la dirección es correcta.
Sin embargo, después de usar pcl::io::saveOBJFile para guardar la malla como obj y luego abrirla con otro software de terceros, aparecerá un efecto muy travieso:
pcl::PolygonMesh mesh;
ret = MyUtil::pointCloudToMesh(pclCloud, mesh);
if(ret != 0)
{
return;
}
QString fileName = QString("mesh_%1.obj").arg(QTime::currentTime().toString("hhmmss_zzz"));
//保存网格图名
pcl::io::saveOBJFile(fileName.toStdString(), mesh);
Como puedes ver, es todo negro y gris. Enciendan las normales y eche un vistazo:
buenos chicos, la mitad de ellas están hacia adelante y la otra mitad hacia atrás. No es de extrañar que algo no luzca bien. Cuando activa el sombreado direccional, puede ver que hay un problema con la dirección normal de algunos parches.
2.Solución
No lo sé todavía.
Usemos primero el formato ply. Aunque todavía parece haber un problema con las normales, básicamente se puede ver.
No sé por qué hay un problema con las normales, la visualización del objeto no funciona, pero la visualización del formato de capas está bien.