windows下cmake编译VTK到PCL中

补充:

如果嫌编译麻烦,这里可以下载我编译好的: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的版本

windows下cmake编译VTK到PCL中_第1张图片

这是pcl的安装目录,在3rdParty下有自带的VTK,我们先备份VTK文件夹为VTK_copy,把编译后的VTK就放到这个新建的VTK文件夹下

windows下cmake编译VTK到PCL中_第2张图片

cmake编译VTK步骤

1、打开cmake-gui

windows下cmake编译VTK到PCL中_第3张图片

source code :VTK-8.1.1.zip解压后的目录

build the binaries :在VTK-8.1.1.zip解压后的目录下新建一个build目录

windows下cmake编译VTK到PCL中_第4张图片

点击configure, 选择编译器 

windows下cmake编译VTK到PCL中_第5张图片

windows下cmake编译VTK到PCL中_第6张图片

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显示框会出错)

windows下cmake编译VTK到PCL中_第7张图片

点击Add Entry,添加CMAKE_DEBUG_POSTFIX,Value设置为-gd(用来区别debug和release版本)

windows下cmake编译VTK到PCL中_第8张图片

再次点击configure


2018年9月5日更新:

编译vtk-8.0.1的时候,由于qt默认版本号是4,这里的5.10的qt会报错,修改为5即可

windows下cmake编译VTK到PCL中_第9张图片

再次configure

windows下cmake编译VTK到PCL中_第10张图片

qt5已经自动识别出来了,目录正确,无需修改,点击configure

点击generate

点击open project

2018年9月5日更新


 

 windows下cmake编译VTK到PCL中_第11张图片

累,又是一片红,我这里是安装anaconda35,里面似乎也有QT,但是我不确定这个QT是不是好用,所以把QT改为我自己安装的QT-5.10.1,修改QT5_DIR到自己安装的QT路径下

windows下cmake编译VTK到PCL中_第12张图片

勾选VTK_BUILD_QT_DESIGNER_PLUGIN ,因为我就是为了这个才编译VTK的

再次config

windows下cmake编译VTK到PCL中_第13张图片

这个警告不用管的,因为我们把OpenGL2改成OpenGL引起的 。

点击generate

点击open project,自动打开vs

windows下cmake编译VTK到PCL中_第14张图片

首先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();
}

运行结果:

windows下cmake编译VTK到PCL中_第15张图片


补充:

如果嫌编译麻烦,这里可以下载我编译好的:VTK-8.0.1,下载后直接拷贝到pcl安装目录下替换原VTK目录。

你可能感兴趣的:(C++,Point,Clouds,踩过的坑)