QVTKWidget vs QOpenGLWidget

时间:2017-11-08 22:35:43

标签: c++ qt opengl vtk

我的VTK显示速度太慢,可能是因为我不理解有效使用它的方式。

我还使用OpenGL进行了显示,速度更快但很难看。

  • VTK显示(使用QVTKWidget):

    在通信线程中,我们连接到我们的传感器,每次获取新数据时,我都会更新缓冲区并调用绘制3D结果的函数。一个大问题是,我收到的数据比渲染速度快得多。

  • OpenGL显示(QOpenGLWidget):

    在通信线程中,我们连接到传感器,每次获取新数据时,都会更新缓冲区。 在QT接口线程中,paintGL()函数使用当前缓冲区值绘制场景。

在使用QVTKWidget的VTK中,是否可以使用与我的OpenGL显示相同的逻辑?有一个使用缓冲区绘制场景的功能吗?像paintGL()函数一样?

或者有人能告诉我VTK逻辑每秒渲染一次新场景20次吗?

我的计划示例:

OnDataReceived()
{
    vtkSmartPointer<vtkRendererCollection> lRC = mVTKWidget->GetRenderWindow()->GetRenderers();
    lRC->InitTraversal();
    vtkSmartPointer<vtkRenderer> lPointsRenderer = lRC->GetNextItem();

    vtkSmartPointer<vtkHexahedron> lHex = vtkSmartPointer<vtkHexahedron>::New();
    // Create a cell array to store the hex in
    vtkSmartPointer<vtkCellArray> lHexs = vtkSmartPointer<vtkCellArray>::New();
    for ( i = 0; i < number_of_objects; ++i)
    {
        // Insert 8 points
        lPoints->InsertNextPoint( ... );
        lHex->GetPointIds()->SetId( ... );
        lHexs->InsertNextCell( lHex );
    }

    vtkSmartPointer<vtkUnstructuredGrid> luGrid = vtkSmartPointer<vtkUnstructuredGrid>::New();
    luGrid->SetPoints( lPoints );
    luGrid->SetCells( VTK_HEXAHEDRON, lHexs );
    luGrid->GetCellData()->SetScalars( lColors );

    // Setup actor and mapper
    vtkSmartPointer<vtkDataSetMapper> lMapper = vtkSmartPointer<vtkDataSetMapper>::New();
    lMapper->SetInputData( luGrid );
    lActor->SetMapper( lMapper );

    lPointsRenderer->AddActor( lActor );
    mVTKWidget->update();
}

是否可以更新每个六面体的8个点而不是每次都重建场景?我有超过10 000六面体,每秒更新20次..

0 个答案:

没有答案