首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QVTKOpenGLWidget和vtkGenericOpenGlRenderWindow与QTDesigner

QVTKOpenGLWidget和vtkGenericOpenGlRenderWindow与QTDesigner
EN

Stack Overflow用户
提问于 2017-04-19 14:17:47
回答 1查看 2.1K关注 0票数 3

我试图在QVTKOpenGLWidget中使用QTDesigner和vtkGenericOpenGlRenderWindow,但是我获得了一个黑色窗口。当我将PCLVizualizer of PointCloud库(PCL)与vtkGenericOpenGlRenderWindow结合使用时,一切都很好。我正在尝试创建一个与PCL相同的自定义查看器。

代码语言:javascript
复制
QMainPanel::QMainPanel( HWND hWnd ) :
    QWinWidget( hWnd ),
    ui(new Ui::QMainPanel)
{
    ui->setupUi(this);

    rendererTest = vtkSmartPointer<vtkRenderer>::New();
    rendererTest->GradientBackgroundOn();
    rendererTest->SetBackground(0.27,0.27,0.27);
    rendererTest->SetBackground2(0.44,0.44,0.44);
    windowTest = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
    windowTest->AddRenderer(rendererTest);
    interactorTest = vtkSmartPointer<vtkRenderWindowInteractor>::New();
    interactorTest->SetRenderWindow( windowTest );
    ui->openGLWidget->SetRenderWindow( windowTest ); //  QVTKOpenGLWidget *openGLWidget;
}

谢谢

编辑:删除“交互器”解决了我的问题。

EN

回答 1

Stack Overflow用户

发布于 2017-11-03 10:48:19

您需要获得PCL表单https://github.com/PointCloudLibrary/pcl的主版本。这将提供一个具有更多构造函数的PCLVisualizer。因此,您可以使用这样的自定义小部件:

VideoQVTKOpenGLWidget.h

代码语言:javascript
复制
    #ifndef VIDEOQVKTOPENGLWIDGET_H
    #define VIDEOQVKTOPENGLWIDGET_H

    #include <QWidget>
    #include <QVTKOpenGLWidget.h>
    #include <pcl/visualization/pcl_visualizer.h>
    using namespace pcl::visualization;

    class VideoQVTKOpenGLWidget : public QVTKOpenGLWidget
    {
      public:
        explicit VideoQVTKOpenGLWidget(QWidget *parent = 0);
        void populateCloud(pcl::PointCloud<pcl::PointXYZRGBA>::Ptr cloud);

      private:
        boost::shared_ptr<PCLVisualizer> _viewer;
        vtkSmartPointer<vtkGenericOpenGLRenderWindow> _renderWindow;
    };

    #endif // VIDEOQVKTOPENGLWIDGET_H

VideoQVTKOpenGLWidget.cpp

代码语言:javascript
复制
    #include "VideoQVTKOpenGLWidget.h"

    #include <vtkPointPicker.h>
    #include <vtkGenericOpenGLRenderWindow.h>

    VideoQVTKOpenGLWidget::VideoQVTKOpenGLWidget(QWidget *parent)
      : QVTKOpenGLWidget(parent)
    {
      auto renderer = vtkSmartPointer<vtkRenderer>::New();
      _renderWindow = vtkSmartPointer<vtkGenericOpenGLRenderWindow>::New();
      _renderWindow->AddRenderer(renderer);
      _viewer.reset(new PCLVisualizer(renderer, _renderWindow, "viewer", false));
      this->SetRenderWindow(_viewer->getRenderWindow());
      this->update();
    }

    void VideoQVTKOpenGLWidget::populateCloud(pcl::PointCloud <pcl::PointXYZRGBA>::Ptr cloud)
    {
      if(!_viewer->updatePointCloud(cloud, "cloud")) {
        _viewer->addPointCloud(cloud, "cloud");
      }
      _renderWindow->Render();
    }
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43498363

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档