背景:
vtk和pcl是优秀的三维开源引擎, 但是我们在工程中,需要集成到我们软件中,因而有了QVtkOpenglWidget等直接嵌入Qt程序的要求; 但是从vtk8.2之后,这部分源码又剔除出去了,随之影响的还有pcl 8.0系列之后的版本;
那么升级就遇到问题了, 如果在版本之前的编译我们还好说,但是随着这两个引擎的升级,新功能的迭代添加,为了适配之前的工程,我们就只能保持版本不动吗?这不可行! 这无疑是个巨大的痛点!
因而,本博主决定:从两个引擎中的源码中,分离pcl_visulization 和 vtkQtWidget,从而将渲染界面独立出来, 先看成果:
以上部分,就是抽离出来的两个库,独立编译并在qt中成功运行后的结果; 那么接下来就说说,移植之后的关键过程以及中间的坑
分离过程:
1.本博主是从pcl-1.13.1版本和vtk 8.2版本的 Rendering抽取
2.这里使用的是vstudio 2019 编译器: 分别创建 一个 QtPclVisulization 和 QtVtk3DWidget库
3.将这两个引擎的源码拷贝到工程目录下,并添加进来
关键点一: 里面凡是涉及到 <pcl/visulization/xxxx> 的,统一改成: "pcl/visulization/xxxx" ;保证是从本地文件读取到的
关键点二: pcl 中,记得把这些环境配置好!
关键三: vtk的src中,会缺少下面这些文件,记得从 Rendering中,把这些数据引入;
关键点四: 里面涉及到和全局环境中重叠的部分,因而,我们要把用到的类,放到自定义的命名空间中,我这里取的XPlote, 并注意把导出宏先去掉;
关键点5: 在上述分离库都完成的情况下,我们要写demo, 要使用 XPLote::QVTKWidget,我们必须添加下面的头文件以及宏,来初始化OPenGl相关的资源,否则pcl/vtkwidget 都会失败.
本博主就是在这一步被坑了很多次!!!! 切记
调用实例:
到此,我们的分离工作完成, 以后vtk或者pcl的库,任其升级变化,我们的上层软件交互都不会受到影响!
当然,其它的模块也可以这么做!