VTK-计算渲染场景的点云

VTK - calculate point cloud for a renderered scene

本文关键字:计算 VTK-      更新时间:2023-10-16

我使用VTK渲染器渲染三角网格(多数据)。我想要获得渲染场景的3D点云(相对于摄影机)。

我在PCL库中发现了一个类似的片段,该库使用VTK作为可视化工具。

我在代码中实现了PCL函数,并设法获得了相同的结果(3D点云)。然而,我发现了一个我不知道从哪里开始解决的问题:

  • 对于z缓冲区中应该具有有效深度值的点,返回1(我认为这是默认设置值,意味着不是有效点)

我试着玩剪切平面(也称为nearz/farz),但没有任何改进。

更新:问题解决了,因为我忘记了VTK定义的图像坐标与传统坐标不同。在VTK中,原点是左下角,而不是左上角。

渲染器将变换显示<-->世界坐标。查看类vtkViewport的方法:SetDisplayPoint()DisplayToWorld()GetWorldPoint()。此API使用齐次坐标。查看任何vtk小部件的来源——在交互过程中,显示坐标会转换为世界坐标。

但是,如果你想得到一个位于曲面上的点的坐标,你真的想要一个vtkPointPickervtkCellPicker。看看这些类的例子和测试。

我一直在处理同样的问题。我使用的是vtk的python绑定,但我想您会对我最近发布的这个问题中的方法RequestData()感兴趣。我的问题是关于管道执行,而不是关于投影点。

mirni的答案肯定有效,但如果你对每个像素都这样做,你将额外创建两个矩阵,一个矩阵相乘,每个像素一个矩阵乘法。

按照我在方法中所做的方式,在300x300的窗口上节省了大约16秒。