0

我已经像这样使用 Helix 工具加载了一个 3d 模型

modelGroupScull = importer.Load("C:\\Users\\Robert\\Desktop\\a.obj");
GeometryModel3D modelScull = (GeometryModel3D)modelGroupScull.Children[0];

我也有 _3DTools 可以在 3d 空间中从点到点画线。现在要绘制我的 GeometryModel3D 的线框,我想我必须循环到它的顶点并将它们添加到 ScreenSpaceLines3D。

ScreenSpaceLines3D wireframe = new ScreenSpaceLines3D();

// need to cycle through all vertexes of modelScull as Points, to add them to wireframe
wireframe.Points.Add(new Point3D(1, 2, 3));


wireframe.Color = Colors.LightBlue;
wireframe.Thickness = 3;

Viewport3D1.Children.Add(wireframe);

但是......我如何真正得到这个顶点?

编辑:

感谢你的回答。它确实增加了积分

        ScreenSpaceLines3D wireframe = new ScreenSpaceLines3D();

        MeshGeometry3D mg3 = (MeshGeometry3D)modelScull.Geometry;

        foreach (Point3D point3D in mg3.Positions)
        {
            wireframe.Points.Add(point3D);
        }


        wireframe.Color = Colors.LightBlue;
        wireframe.Thickness = 1;

        Viewport3D1.Children.Add(wireframe);

但线框搞砸了)

在此处输入图像描述
(来源:gyazo.com

也许有人知道绘制线框的其他方法?)

4

2 回答 2

1

您应该在MeshGeometry3D.Positions 属性中找到顶点

foreach (var point3D in modelScull.Geometry.Positions)
于 2013-09-15T12:51:00.910 回答
1

通常使用索引缓冲区绘制三角形(以防止顶点的额外旋转)查看 TriangleIndices:

如果你做这样的事情:(未测试)

    MeshGeometry3D mg3 = (MeshGeometry3D)modelScull.Geometry;

    for(int index=0;index<mg3.TriangleIndices.Count; index+=3)
    {
        ScreenSpaceLines3D wireframe = new ScreenSpaceLines3D();

        wireframe.Points.Add(mg3.Positions[mg3.TriangleIndices[index]]);
        wireframe.Points.Add(mg3.Positions[mg3.TriangleIndices[index+1]]);
        wireframe.Points.Add(mg3.Positions[mg3.TriangleIndices[index+2]]);
        wireframe.Points.Add(mg3.Positions[mg3.TriangleIndices[index]]);

        wireframe.Color = Colors.LightBlue;
        wireframe.Thickness = 1;

        Viewport3D1.Children.Add(wireframe);
    }

但是,这可能会造成一些过度绘制(同一坐标上的两条线)并且可能非常慢。如果你把每一边都放在一个列表中,并在上面使用类似 Distinct 的东西,那会更好。

ScreenSpaceLines3D 的问题在于它将继续该行,而不是创建 1 行(开始/结束)。

如果您可以管理一个尝试用 1 条线绘制模型的算法,它会运行得更快。

WPF 中的线框非常慢。(因为它们是用三角形创建的)

于 2013-09-15T13:34:43.110 回答