我正在使用PCL和Mesh编辑器(MeshLab).我有兴趣将我的网格导入PCL进行一些3D处理.
我有一个网格模型.当我用代码加载模型时:
PointCloud<PointXYZRGBA>::Ptr cloud (new PointCloud<PointXYZRGBA> ());
pcl::io::loadPLYFile<pcl::PointXYZRGBA>(argv[1], *cloud);
Run Code Online (Sandbox Code Playgroud)
我把它想象成一个点云:
visualization::PCLVisualizer viewer ("Model");
viewer.addPointCloud (cloud,"model");
Run Code Online (Sandbox Code Playgroud)
几何体与直接加载和可视化网格物体不同:
viewer.addModelFromPLYFile(argv[1], "model");
Run Code Online (Sandbox Code Playgroud)
在第二种情况下,我完全像使用网格编辑器一样可视化模型,但在第一种情况下,我可视化它的变形版本,即球体就像椭圆体一样.这里发生了什么?也许我应该手动采样网格?
如果我在观察器中添加两个模型,差异非常明显,点云比网格小,并且它遭受了一些奇怪的变形(请参见附图)
非常感谢你
定义了我的对象myType后,我需要存储这些对象之间的关系.这些关系存储在矩阵中.
事先不知道元素的数量,并非所有元素都有关系(element1可以与element3有关系,但可能没有与5有关)并且内存是个问题.例如,它可能看起来像:
element45与以下内容相关联:
element1661连接到:
有:
myType* element1;
myType* element2;
Run Code Online (Sandbox Code Playgroud)
我希望有类似的东西(正确指出元素):
my_table[element1][element2][1][2]=7;
Run Code Online (Sandbox Code Playgroud)
我曾考虑使用boost库创建嵌套哈希表:
boost::unordered_map<myType*, boost::unordered_map<myType*,
std::vector<std::vector <unsigned short int> > > > my_table;
Run Code Online (Sandbox Code Playgroud)
但是,即使代码编译,它也会崩溃(Segmentation fault,它指向计算哈希键的一行),运行一条简单的行,如:
my_table[element1][element2].resize(2);
for(int t=0; t<2; ++t)
my_table[element1][element2][t].resize(2);
Run Code Online (Sandbox Code Playgroud)
任何人都能给我一些关于这个的消息吗?这实际上或概念上是错误的吗?
欢迎使用任何其他方法来处理这个问题.
谢谢