使用 Helix-Toolkit 在 C# 中显示 .ply 点云

MoS*_*oSk 2 c# point-clouds kinect helix-3d-toolkit

我正在尝试从 .ply 文件创建点云,该文件包含从 Kinect v2 记录的顶点 (vxyzrgb) 及其颜色。到目前为止我尝试过的:

首先我使用MeshLab来检查我的.ply文件是否正确。这是。所以我尝试将 .ply 文件导出为 .obj 以使用 Helix-Toolkits

HelixToolkit.Wpf.ModelImporter
Run Code Online (Sandbox Code Playgroud)

然而,当使用我自己的代码和 Helix-Toolkit 示例中的 ModelViewer 时,这都会给我一个空白屏幕。这可能是因为 ply 文件不包含有关面的信息。

1.有没有一种简单的方法可以从层创建 obj 文件,并在此过程中添加面?

2.是否有另一种 - 可能更好的方法 - 从层文件创建点并使用 Helix 将它们显示在屏幕上?

Bri*_*ian 6

我将解决你的第二个问题,因为我不了解你的第一个问题。

假设您可以读入顶点数据,将云数据读入像 Point3D 列表这样的集合结构中。

Point3DCollection dataList = new Point3DCollection();

//read from ply file and append the positions to the dataList. i.e. dataList.Add(new Point3D(x,y,x));
PointsVisual3D cloudPoints = new PointsVisual3D { Color = Colors.Red, Size = 5 };

cloudPoints.Points = dataList;
Run Code Online (Sandbox Code Playgroud)

在 XAML 中为螺旋视口命名,以便可以在 C# 中引用它

<h:HelixViewport3D x:Name="HViewPort">
<h:DefaultLights/>

</h:HelixViewport3D>
Run Code Online (Sandbox Code Playgroud)

在 c# 中

HViewPort.Children.Add(cloudPoints);
Run Code Online (Sandbox Code Playgroud)

注意:这将显示具有与初始化时指定的相同颜色的所有点。因此,也许值得将数据的 RGB 值保留在单独的列表中。

到目前为止,我不知道如何将颜色分配给单个 PointVisual3D。如果你弄清楚了请分享。

另一种方法是创建以数据点为中心的单独 3D 球体,然后为它们分配记录的 rgb 值。我会注意到这种方法,因为它的性能很重并且依赖于数据大小。

祝你好运 :)