[vtkusers] Dynamically Add and Render Points using vtkPolyData
Andrew
Andrew at Ryonic.io
Thu Oct 19 01:30:26 EDT 2017
Hi All,
This will be my first post, I am new to VTK so I apologize for any Noobie
mistakes.
Outline: Our project uses a 2D lidar on a Robot to profile areas as it
moves, we are currently using VTK to visualize these point clouds.
The application needs to be real time as such we receive 10 scans a second
with roughly 360 points per scan.
What is the best way to add points to PolyData and render it?
The current method adds these points to the Polydata via:
//Setup
lidar_points = gcnew vtkPoints();
lidar_points_colors = gcnew vtkUnsignedCharArray();
lidar_points_colors->SetName("LidarPointsColors");
lidar_points_colors->SetNumberOfComponents(3);
lidar_points_data->GetPointData()->SetScalars(lidar_points_colors);
vertices = gcnew vtkCellArray();
lidar_points_data->SetPoints(lidar_points);
lidar_points_data->SetVerts(vertices);
lidar_points_data->GetPointData()->SetScalars(lidar_points_colors);
lidar_points_mapper->ImmediateModeRenderingOn();
//Per scan
for (point p in scan)
{
vtkPointData^ newPoint = vtkPointData::New();
int Id = lidar_points->InsertNextPoint(new_lidar_point_x,
new_lidar_point_y, new_lidar_point_z);
vertices->InsertNextCell(1);
vertices->InsertCellPoint(Id);
}
lidar_points->Modified();
lidar_points_data->Modified();
lidar_points_data->Update();
lidar_render_window->Render();
I have checked and the Insert for each scan takes 3ms regardless of total
point size of PolyData.
But the Render(); method starts at 4-5ms for an empty set and quickly grows
to 150ms for 1 million points. which already slows down the 10Hz scan rate.
Interestingly when the scans stop, using the mouse to interact with the
scene gives a very good FPS even when there are 3 Million points
The system has a GPU and I can verify the render calls do use the GPU, using
the mouse with 3 Million points maxes the GPU (100% utilization).
While Points are added and rendered both the GPU and CPU of the system are
below 50%, I have tried using threads to Split adding points from the render
event but Vtk really didnt enjoy that :P
Any Feed back would be very helpful
--
Sent from: http://vtk.1045678.n5.nabble.com/VTK-Users-f1224199.html
More information about the vtkusers
mailing list