我目前使用的是 Visual Studio 2022 我正在使用 vcpkg pcl:x64 库安装。 pcl版本:1.9.1-12 我期望能够访问每个多边形 3 个顶点。 不幸的是,我似乎无法访问与每个三角形关联的顶点。
#include <Eigen/Dense>
#include <pcl/common/io.h>
#include <pcl/filters/extract_indices.h>
#include <pcl/filters/passthrough.h>
#include <pcl/point_cloud.h>
#include <pcl/point_types.h>
#include <pcl/PolygonMesh.h>
#include <pcl/TextureMesh.h>
int main
{
pcl::PolygonMesh mesh;
pcl::io::loadPolygonFileOBJ("pathtomesh.meshfile.obj", mesh);
pcl::PointXYZ v = mesh.polygons[0].vertices[0];
}
我收到的错误是: 不存在合适的构造函数来从“boost::random::seed_seq::result_type”转换为“pcl::PointXYZ”
看起来 vertices 是一个 unsigned int 而不是 pcl::PointXYZ。这对我来说有点奇怪,因为我期望用双精度或浮点来存储顶点坐标。事实证明,mesh.polygons[0].vertices[0] 返回存储在点云中的网格中每个点的索引。因此,我能够通过将网格转换为 pcl::PointCloudpcl::PointXYZ 并将索引放入该函数来找到函数 mesh.polygons[0].vertices[0] 指向的点。
pcl::PolygonMesh mesh;
pcl::io::loadPolygonFileOBJ("D:\\testOBJs\\cube.obj", mesh);
pcl::PointCloud<pcl::PointXYZ>::Ptr allVertices(new pcl::PointCloud<pcl::PointXYZ>);
pcl::fromPCLPointCloud2(mesh.cloud, *allVertices);
std::cout << "All Vertices" << std::endl;
for (int i = 0; i < allVertices->size(); i++)
{
std::cout << std::to_string(i) + " " << allVertices->points[i] << std::endl;
}
std::cout << "All Polygons" << std::endl;
for (int i = 0; i < mesh.polygons.size(); i++)
{
std::cout << std::endl;
std::cout << mesh.polygons[i].vertices[0] << std::endl;
std::cout << mesh.polygons[i].vertices[1] << std::endl;
std::cout << mesh.polygons[i].vertices[2] << std::endl;
std::cout << std::endl;
}