簡體   English   中英

c# 中的 Helix Toolkit 顯示層點雲

[英]Helix Toolkit in c# displaying ply point cloud

我在這個包裝器的幫助下制作了一個 ply 文件。

我如何制作 ply 文件如下所示:

using (var frames = pipeline.WaitForFrames())
{
    var colorFrame = frames.ColorFrame.DisposeWith(frames);
    var depthFrame = frames.DepthFrame.DisposeWith(frames);
    var points = pc.Process(depthFrame).As<Points>();
    // We colorize the depth frame for visualization purposes
    var colorizedDepth = colorizer.Process<VideoFrame>(depthFrame).DisposeWith(frames);

    // CopyVertices is extensible, any of these will do:
    var vertices = new float[points.Count * 3];
    // var vertices = new Intel.RealSense.Math.Vertex[points.Count];
    // var vertices = new UnityEngine.Vector3[points.Count];
    // var vertices = new System.Numerics.Vector3[points.Count]; // SIMD
    // var vertices = new GlmSharp.vec3[points.Count];
    //  var vertices = new byte[points.Count * 3 * sizeof(float)];
    points.CopyVertices(vertices);
    points.ExportToPLY("pointcloud.ply", colorFrame);
    // Render the frames.
    cloudPoints = importer.Load(@"pointcloud.ply");
}

現在我想使用代碼顯示它:

private void Create3DViewPort()
{
    var hVp3D = new HelixViewport3D();
    var lights = new DefaultLights();
    HViewPort.Children.Add(lights);
    HViewPort.Children.Add(cloudPoints);
    this.AddChild(HViewPort);
}

但是我在HViewPort.Children.Add(cloudPoints);行收到錯誤 . 它是說:

它無法將 Systems.Windows.Media.Media3D.Model3D 轉換為 Systems.Windows.Media.Media3D.Visual3D。

有人可以幫助我如何使用 helix 工具包顯示點雲嗎?

我認為目前無法在 helix 工具包中顯示一些 ply 文件( 請參閱 Helix Wiki )。

你可以用下面的代碼顯示一個ply文件,但你不會看到你期望的項目

Model3DGroup group = new Model3DGroup();
var hpVp3D = new HelixViewport3D();
ModelVisual3D visual3D = new ModelVisual3D();
var lights = new DefaultLights();
ModelImporter importer = new ModelImporter();
Model3D element;

element = importer.Load(@"pointcloud.ply")
group.Children.Add(element);

visual3D.Content = group;

hVp3D.Children.Add(visual3D);
hVp3D.Children.Add(lights);

this.AddChild(hVp3D);

我不知道這是不是這樣,但我可以在 ply 文件中顯示點雲。 編碼:

Model3DGroup model1 = import.Load("pointcloud.ply");
model.Content = model1;

XAML:

<HelixToolkit:HelixViewport3D Grid.ColumnSpan="1" Grid.Column="1" Margin="2.4,1,0,-0.4" >
            <HelixToolkit:HelixViewport3D.Camera>
                <PerspectiveCamera />
            </HelixToolkit:HelixViewport3D.Camera>
            <HelixToolkit:DefaultLights></HelixToolkit:DefaultLights>
            <ModelVisual3D x:Name="model"></ModelVisual3D>
        </HelixToolkit:HelixViewport3D>

之前的建議確實有幫助。 但是,有必要創建導入器 class 的實例,並且在XAML文件中,編譯器要求您在聲明相機之前放置 model 聲明。

.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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM