类似的问题有:
- loadOBJFile()不能读取Texture
- loadPolygonFIleOBJ()读取不到tex_materials
- PCL可视化OBJ文件,纹理贴图
最近做点云相关的事情,然而就PCL自带函数读取OBJ文件并且显示这个事情卡了我几天,在这里记录一下,希望能帮到别人。
问题描述:
读入obj文件时,使用:
loadOBJFile( const std::string& file_name, pcl::TextureMesh &mesh)
此时,使用如下代码读取并显示:
int main(int argc,char** argv)
{
string objPath = "./texture_mesh.obj"; //当前目录下的obj文件
//读取
pcl::TextureMesh mesh;
pcl::io::loadOBJFile(objPath, mesh);
//显示
boost::shared_ptr<pcl::visualization::PCLVisualizer>viewer(new pcl::visualization::PCLVisualizer("3D viewer A"));
viewer->addTextureMesh(mesh,"mesh");
while (!viewer->wasStopped ()) // 在按下 "q" 键之前一直会显示窗口
{
viewer->spinOnce ();
}
return 0;
}
编译运行后
只显示一个窗口,里面没有任何东西,而且命令行提示:
[PCLVisualizer::addTextureMesh] No textures coordinates found!
即:没有找到纹理的坐标。
经过调试发现,loadOBJFile()能够正常读入点坐标数据,贴图文件,但不能读入每个点对应贴图文件的坐标,经过查阅资料和论坛讨论,发现这是一个PCL库的bug。
问题所在:
这是PCL库的bug,在最新版的PCL库(PCL 1.9.1)中还没有修复,PCL的github页上有人已经收集,整理提交了这个bug。详情可以点击这里查看。
解决问题的历程
这一块是流水账,想要解决方案的,直接看最后一部分。