关于PCL读取OBJ文件到Texture并可视化的问题

本文档详细记录了解决PCL库在读取OBJ文件时无法正确加载纹理的问题。作者通过尝试不同函数,如loadOBJFile()和loadPolygonFileOBJ(),发现并分析了PCL库存在的bug。最终,通过组合两个函数的数据,成功实现了纹理贴图的正确显示。然而,这种方法仅适用于单张纹理贴图的情况,对于多张纹理贴图的处理仍存在不确定性。
摘要由CSDN通过智能技术生成


类似的问题有:

  1. loadOBJFile()不能读取Texture
  2. loadPolygonFIleOBJ()读取不到tex_materials
  3. 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。详情可以点击这里查看。

解决问题的历程

这一块是流水账,想要解决方案的,直接看最后一部分。

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值