簡體   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