我的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次..