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 将它们显示在屏幕上?
我将解决你的第二个问题,因为我不了解你的第一个问题。
假设您可以读入顶点数据,将云数据读入像 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 值。我会注意到这种方法,因为它的性能很重并且依赖于数据大小。
祝你好运 :)