显示代码1
这里用一段代码把这个事情讲清楚,逻辑清晰,方便自己后期看
1,点云的读取
2,pcl的pclvisualizer的显示设置
这两步是自由的,只要动pcl就可以实现,不会在deepseek上到处都能找到pclvisualizer的使用
3,vtk部分是固定结构。甚至可以封装起来。通过一个函数传入一个pclvisualizer指针,和一个ui控件,完成显示
3.1:
1,创建新的vtkrenderwindow,并将pclvisualizer的渲染器绑定到vtk的渲染窗口上
2,将新的vtkrenderwindow绑定到ui的控件上
3.2,将pcl的pclvisualizer的交互设置,设置到新的vtkrenderwindow上
3.3,渲染更新
ui.label->setText("Hello World");
cloud.reset(new pcl::PointCloud<pcl::PointXYZ>);
string path = "D:\\deskep\\pacl_learning\\rabitte.ply";
pcl::io::loadPLYFile<pcl::PointXYZ>(path, *cloud);
//有了这段代码以后,我们只需要做好pcl部分的渲染设置就可以。就可以不用管vtk部分
//1,先做好pcl的PCLVisualizer的渲染部分,
viewer1.reset(new pcl::visualization::PCLVisualizer("Simple Cloud Viewer", false));
viewer1->addPointCloud<pcl::PointXYZ>(cloud, "sample cloud");
viewer1->setPointCloudRenderingProperties(pcl::visualization::PCL_VISUALIZER_POINT_SIZE, 3, "sample cloud");
viewer1->setBackgroundColor(0.0, 0.0, 0.0);
viewer1->resetCameraViewpoint();
//2,创建一个vtkwindow,并添加渲染器(舞台)==绑定pcl的的渲染器
// auto vtkrenwin = vtkGenericOpenGLRenderWindow::New(); //智能创建一个vtk渲染器窗口
m_renderer= viewer1->getRendererCollection()->GetFirstRenderer(); //获取pcl的渲染器
m_renderWindow->AddRenderer(m_renderer); //将pcl的渲染器添加到渲染器窗口中
ui.view_weight->setRenderWindow(m_renderWindow); //将渲染窗口添加到ui的控件上
//将pcl的交互系统,设置到vtk的窗口上的交互系统上。
viewer1->setupInteractor(ui.view_weight->interactor(), m_renderWindow);
m_renderer->ResetCamera();
//3,渲染并更新
ui.view_weight->renderWindow()->Render();
ui.view_weight->update();
.h文件
bash
#pragma once
#include <QtWidgets/QWidget>
#include "ui_pcltest.h"
#include <vtkGenericOpenGLRenderWindow.h>
#include <vtkCamera.h>
#include <QVTKOpenGLNativeWidget.h>
#include <pcl/visualization/pcl_visualizer.h>
#include <pcl/point_types.h>
class pcltest : public QWidget
{
Q_OBJECT
public:
pcltest(QWidget *parent = nullptr);
~pcltest();
private slots:
void adampt_window();
private:
Ui::pcltestClass ui;
vtkNew<vtkGenericOpenGLRenderWindow> m_renderWindow;
vtkSmartPointer<vtkRenderer> m_renderer=nullptr;
pcl::visualization::PCLVisualizer::Ptr viewer1;
vtkNew<vtkMatrix4x4> homeMatrix;
pcl::PointCloud<pcl::PointXYZ>::Ptr cloud;
pcl::visualization::Camera cam;
};