1

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

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

HelixToolkit.Wpf.ModelImporter

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

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

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

4

2 回答 2

4

我会解决你的第二个问题,因为我对你的第一个问题一无所知。

假设您可以读取顶点数据,将云数据读取到像 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;

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

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

</h:HelixViewport3D>

在c#中

HViewPort.Children.Add(cloudPoints);

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

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

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

祝你好运 :)

于 2015-12-21T16:08:03.777 回答
0

只是建立在另一个答案的基础上,您可以通过绑定 MVVM 样式在 XAML中设置Points属性:PointsVisual3D

<helix:HelixViewport3D>
    <helix:DefaultLights/>
    <helix:PointsVisual3D Color="Black" Size="2" Points="{Binding dataList}"/>
</helix:HelixViewport3D>
于 2017-05-17T14:53:34.577 回答