【问题标题】:Displaying .ply Point Cloud in C# using Helix-Toolkit使用 Helix-Toolkit 在 C# 中显示 .ply 点云
【发布时间】:2022-04-28 20:26:10
【问题描述】:

我正在尝试从包含顶点的 .ply 文件创建点云 (v x y z r g b) 及其从 Kinect v2 记录的颜色。到目前为止我尝试过的:

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

HelixToolkit.Wpf.ModelImporter

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

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

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

【问题讨论】:

    标签: c# kinect point-clouds helix-3d-toolkit


    【解决方案1】:

    我会解决你的第二个问题,因为我不知道你的第一个问题。

    假设您可以读取顶点数据, 将云数据读入一个集合结构,如 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 值。我会注意这种方法,因为它的性能很重并且取决于数据大小。

    祝你好运:)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        【解决方案3】:

        需要创建 importer 类的实例,并且在 XAML 文件中,编译器会要求您在声明相机之前放置模型声明。

        cpp 文件:

        ModelImporter importer = new ModelImporter();
        Model3DGroup model=importer.Load("model_file.ply");
        MyModel.Content = model;
        

        XAML:

        <helix:HelixViewport3D x:Name="viewPort3d">
            <ModelVisual3D x:Name="MyModel"/>
            <helix:HelixViewport3D.Camera>
                <PerspectiveCamera UpDirection="-0.00794080933244957, 0.909926622339627, 0.414693242656239"
                                   LookDirection="49.636719684, -2387.8047, -29918.6652549283"
                                   Position="-48.6367196, 5688.80470553634, 29917.665254"/>
        
            </helix:HelixViewport3D.Camera>
        </helix:HelixViewport3D>
        

        【讨论】:

          猜你喜欢
          • 2021-01-01
          • 2021-09-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-01-02
          • 2017-11-30
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多