补充:
如果嫌编译麻烦,这里可以下载我编译好的:VTK-8.0.1,下载后直接拷贝到pcl安装目录下替换原VTK目录。
编译VTK的原因:
pcl安装版中自带的vtk缺少QVTKWidget.dll,这样在QT Designer中就无法显示点云。
工具:
cmake-3.11
pcl-1.8.1-allinone,pcl-1.8.1-pdb
vs2015
Qt5.10.1 下载地址:official_release版
vtk-8.0.1 下载地址:vtk-8.0.1
vtk历史版本下载地址
安装过程:
pcl、vs、qt的安装就不多说了,都是exe文件双击运行就行了。
之前使用的vtk-8.1.1,结果不能,所以换回了pcl-1.8.1-allinone中自带的VTK是8.0的版本
这是pcl的安装目录,在3rdParty下有自带的VTK,我们先备份VTK文件夹为VTK_copy,把编译后的VTK就放到这个新建的VTK文件夹下
1、打开cmake-gui
source code :VTK-8.1.1.zip解压后的目录
build the binaries :在VTK-8.1.1.zip解压后的目录下新建一个build目录
点击configure, 选择编译器
configure完成之后一片红,但是不用担心,因为我们还没有开始配置
勾选Grouped和Advanced,进行以下设置:
BUILD下取消勾选BUILD_TESTING,只留BUILD_SHARED_LIBS就行了
CMAKE下CMAKE_INSTALL_PREFIX设置为你新建的VTK文件夹
INSTALL下目录也替换成你新建的VTK文件夹
VTK下勾选VTK_Group_Qt,VTK_RENDERING_BACKEND设置为OpenGL(这里一定要注意,否则pcl显示框会出错)
点击Add Entry,添加CMAKE_DEBUG_POSTFIX,Value设置为-gd(用来区别debug和release版本)
再次点击configure
2018年9月5日更新:
编译vtk-8.0.1的时候,由于qt默认版本号是4,这里的5.10的qt会报错,修改为5即可
再次configure
qt5已经自动识别出来了,目录正确,无需修改,点击configure
点击generate
点击open project
2018年9月5日更新
累,又是一片红,我这里是安装anaconda35,里面似乎也有QT,但是我不确定这个QT是不是好用,所以把QT改为我自己安装的QT-5.10.1,修改QT5_DIR到自己安装的QT路径下
勾选VTK_BUILD_QT_DESIGNER_PLUGIN ,因为我就是为了这个才编译VTK的
再次config
这个警告不用管的,因为我们把OpenGL2改成OpenGL引起的 。
点击generate
点击open project,自动打开vs
首先Debug x64下,右键ALL_BUILD重新生成,再右键INSTALL设置为启动项目、重新生成;
然后Release x64下,右键ALL_BUILD重新生成,再右键INSTALL设置为启动项目、重新生成;
将3rdParty\VTK\plugins\designer下的QVTKWidgetPlugin.dll拷贝到QT5.10.1\5.10\msvc2015_64\plugins\designer下,这样Qt Designer里面就有了QVtk的控件了。
当我们使用Qt Creater作开发工具的时候,windows下qt中自带的qt creater都是32位的,这里我们把QVTKWidgetPlugin.dll拷贝到\Qt5.10.1\Tools\QtCreator\bin\plugins\designer下是没有用的,我们在使用Qt Creater时依然看不到QVTKWidget,除非我们再编一个32位release版的QVTKWidgetPlugin.dll放到\Qt5.10.1\Tools\QtCreator\bin\plugins\designer,或者装一个64位版的Qt Creater
至此PCL在windows下的环境已经搭配好了,可以选择重启让环境变量生效。
2018年9月5日补充,环境测试:
注意:
1、windows下代码写法不太一样,windows生成的ui默认是对象,linux是对象指针
linux:ui->qvtkWidget->setRenderWindow();
windows: ui.qvtkWidget->setRedderWindow();
示例:
#include "pclviewer.h"
#include
#include
#include
//vtk
#include
PCLViewer::PCLViewer(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
//初始化点云
pcl::PointCloud::Ptr cloud(new pcl::PointCloud);
//设置点云大小
cloud->points.resize(200);
//填充点云
for (size_t i = 0; i < cloud->points.size(); ++i)
{
cloud->points[i].x = 1024 * rand() / (RAND_MAX + 1.0f);
cloud->points[i].y = 1024 * rand() / (RAND_MAX + 1.0f);
cloud->points[i].z = 1024 * rand() / (RAND_MAX + 1.0f);
}
//声明视窗
boost::shared_ptr viewer(new pcl::visualization::PCLVisualizer("3D Viewer"));
//设置视窗背景色
viewer->setBackgroundColor(0, 0, 0);
//预处理点云颜色
pcl::visualization::PointCloudColorHandlerCustom magenta(cloud, 255, 0, 255);
//把点云加载到视窗
viewer->addPointCloud(cloud, magenta, "cloud");
//设置点云大小
viewer->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "cloud");
//连接qvtk
ui.qvtkWidget->SetRenderWindow(viewer->getRenderWindow());
ui.qvtkWidget->update();
}
运行结果:
补充:
如果嫌编译麻烦,这里可以下载我编译好的:VTK-8.0.1,下载后直接拷贝到pcl安装目录下替换原VTK目录。