繁体   English   中英

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

[英]Displaying .ply Point Cloud in C# using Helix-Toolkit

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

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

HelixToolkit.Wpf.ModelImporter

但是,在使用我自己的代码和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;

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

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

</h:HelixViewport3D>

在C#中

HViewPort.Children.Add(cloudPoints);

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

到目前为止,我还不知道如何将颜色分配给各个PointVisual3D。 如果您知道了,请分享。

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

祝好运 :)

只是基于其他答案,您可以通过MVVM样式的绑定在XAML中设置PointsVisual3DPoints属性:

<helix:HelixViewport3D>
    <helix:DefaultLights/>
    <helix:PointsVisual3D Color="Black" Size="2" Points="{Binding dataList}"/>
</helix:HelixViewport3D>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM