vtkSelectVisiblePoints过滤器输出有0个点
vtkSelectVisiblePoints filter output has 0 points
我试图仅获得3D模型的可见部分的polyData。在这种程度上,我通过vtkSelectVisiblePoints过滤器传递原始数据。
我使用模拟渲染器,映射器和演员,因为我想在显示它们之前对可见点进行后处理。
然而,由于某种原因,vtkSelectVisiblePoints过滤器的输出包含"0"点…
使用以下示例:http://www.vtk.org/Wiki/VTK/Examples/Cxx/PolyData/SelectVisiblePoints
我写了下面的代码: // Render window and interactor
vtkSmartPointer<vtkRenderWindow> renderWindow =
vtkSmartPointer<vtkRenderWindow>::New();
renderWindow->SetSize(800, 800);
vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
vtkSmartPointer<vtkRenderWindowInteractor>::New();
renderWindowInteractor->SetRenderWindow(renderWindow);
// Mock renderer, mapper and actor
vtkSmartPointer<vtkRenderer> mockRenderer =
vtkSmartPointer<vtkRenderer>::New();
renderWindow->AddRenderer(mockRenderer);
vtkSmartPointer<vtkPolyDataMapper> mockMapper =
vtkSmartPointer<vtkPolyDataMapper>::New();
mockMapper->SetInput(reader->GetOutput());
vtkSmartPointer<vtkActor> mockActor = vtkSmartPointer<vtkActor>::New();
mockActor->SetMapper(mockMapper);
mockRenderer->AddActor(mockActor);
// Set camera to the correct position
mockRenderer->GetActiveCamera()->SetPosition(0, -1, 0);
mockRenderer->GetActiveCamera()->SetFocalPoint(0, 0, 0);
mockRenderer->GetActiveCamera()->SetViewUp(0, 1, 0);
mockRenderer->ResetCamera();
vtkSmartPointer<vtkSelectVisiblePoints> selectVisiblePoints =
vtkSmartPointer<vtkSelectVisiblePoints>::New();
selectVisiblePoints->SetInput(reader->GetOutput());
selectVisiblePoints->SetRenderer(mockRenderer);
selectVisiblePoints->Update();
std::cout << "Visible nr of points = " << selectVisiblePoints->GetOutput()->GetNumberOfPoints() << std::endl;
renderWindow->RemoveRenderer(mockRenderer);
…打印0.
然而,如果我调用renderWindow->Render()
,模型的可见部分被正确显示…
我错过什么了吗?
答案就在那里,在过滤器的文档中:
警告必须小心地同步此过滤器的执行。过滤器引用渲染器,每次渲染时都会修改渲染器发生。因此,过滤器总是过时的,而且总是执行。您可能需要执行两次渲染传递
如果我添加//new
行,它就像预期的那样工作,就像Arnas在他的评论中建议的那样:
vtkSmartPointer<vtkSelectVisiblePoints> selectVisiblePoints =
vtkSmartPointer<vtkSelectVisiblePoints>::New();
selectVisiblePoints->SetInput(originalData);
selectVisiblePoints->SetRenderer(renderer);
selectVisiblePoints->Update();
renderWindow->Render(); // new
selectVisiblePoints->Update(); // new
std::cout << "Visible nr of points = " << selectVisiblePoints->GetOutput()->GetNumberOfPoints() << std::endl;
相关文章:
- 在不传递参数数量且只有3个点的情况下,如何使用变差函数
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- PCL:将两个点云缩放到相同的大小
- libmpg123 在我使用整数编码读取 mp3 时强制浮点输出
- 当被一个输入分开时,有两个控制台输出同时显示
- 如何从两个点创建矩形?
- 在C++中使用 PCL 在同一窗口中查看多个点云
- 如何校准相机焦距,平移和旋转给定四个点
- 从 3 个视点在 3 张图像上有 3 个点如何在 3D 空间中获取其坐标?
- 代码不会打印回 numSum 作为 numSum = 数组中的 2 个点
- opengl3 2 个点向量的颜色相同
- 如何在无限轴上找到 N 个点,以便从 M 点到其最近的 N 的距离总和最小
- 如何使用灵活的碰撞库在两个点云或点云与机器人末端执行器模型之间进行碰撞检测
- 如何在给定两个点的线上移动对象?
- 具有单个函数的两个点的距离和坡度
- 如何将两个点的向量保留在一个向量中
- 检查三个点是否线性
- 使用三个点(x,y),如何确定它是否是三角形
- 阵列C 中两个点函数之间的距离
- vtkSelectVisiblePoints过滤器输出有0个点