使用vtkRenderer创建的显示点云的窗口如何刷新(QT/C++)

一、使用vtkRenderer创建点云显示窗口,参考

在Qt创建的UI中放一个显示点云的窗口(PCL+QT5)_pcl点云和qt-CSDN博客

二、刷新vtkRenderer创建的窗口

使用场景:在某些情况下代码中需要对显示窗口的显示物改动,例如通过滑块组件改变点云位置又或者改变点云颜色,此类操作后需要点击VTK窗口,画面才会刷新。

实现方式:

(//前置条件-初始化与创建窗口-参考上述另一篇链接)

//前置条件-初始化与创建窗口-参考上述另一篇链接
//auto renderer = vtkSmartPointer<vtkRenderer>::New();
//auto renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
//renderWindow->AddRenderer(renderer);
//viewer.reset(new pcl::visualization::PCLVisualizer(renderer,renderWindow,"viewer",false));
//ui->widget_opengl->setRenderWindow(viewer->getRenderWindow());    //此处widget_opengl是我这个窗口的名称,自定义的
//viewer->setupInteractor(ui->widget_opengl->interactor(),ui->widget_opengl->renderWindow());

//在需要刷新窗口的地方加上如下这段

//在需要刷新窗口的地方加上如下这段
viewer->getRenderWindow()->Render();

好的,以下是可以显示点云QT 代码,已经配上了注释: ```c++ #include <QApplication> #include <QMainWindow> #include <QVTKOpenGLWidget.h> #include <vtkSmartPointer.h> #include <vtkPLYReader.h> #include <vtkPolyDataMapper.h> #include <vtkActor.h> #include <vtkRenderer.h> #include <vtkRenderWindow.h> #include <vtkRenderWindowInteractor.h> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建窗口 QMainWindow mainWindow; // 创建 VTK 渲染窗口 QVTKOpenGLWidget *vtkWidget = new QVTKOpenGLWidget(&mainWindow); vtkWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); mainWindow.setCentralWidget(vtkWidget); // 读取点云数据 vtkSmartPointer<vtkPLYReader> reader = vtkSmartPointer<vtkPLYReader>::New(); reader->SetFileName("point_cloud.ply"); reader->Update(); // 创建点云映射器 vtkSmartPointer<vtkPolyDataMapper> mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); mapper->SetInputConnection(reader->GetOutputPort()); // 创建点云演员 vtkSmartPointer<vtkActor> actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); // 创建渲染器 vtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New(); renderer->AddActor(actor); renderer->SetBackground(.1, .2, .4); // 创建渲染窗口 vtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New(); renderWindow->AddRenderer(renderer); renderWindow->SetSize(800, 600); // 创建交互器 vtkSmartPointer<vtkRenderWindowInteractor> interactor = vtkSmartPointer<vtkRenderWindowInteractor>::New(); interactor->SetRenderWindow(renderWindow); // 显示窗口 mainWindow.show(); // 开始渲染 renderWindow->Render(); interactor->Start(); return a.exec(); } ``` 希望这个代码对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值