优化大型STL文件的WPF

时间:2013-07-11 06:57:44

标签: c# wpf optimization stl

我是WPF的新手,我想知道: 有没有办法在使用大网格时优化WPF(C#)的性能? 我有一个STL文件要读(~160000三角形),我使用here中的一些指令。我的计划工作流程是:

  1. 将STL文件加载到字节数组

  2. 使用Point3D和Vector3D变量将字节数组中的所有点和法线数据读取到自定义类

  3. 使用类似于“private Model3DGroup CreateTriangleModel()”的方法

  4. 在ModelVisual3D模型中加载生成的Model3DGroup三角形

  5. this.mainViewport.Children.Add(模型);

  6. 是否有更直接的方法将点/法线/三角形/曲面加载到视口以避免某些步骤? 从我现在看到的相同数据在不同的结构中重用。一个结构将相同的数据传递给下一个。

    *最大的开销是在第3步。我担心的是,当我加载1000个三角形需要458ms时,但对于2000它需要1280ms,4000到4076ms等几何进度。所有其他步骤都在闪存中执行。

    **我认为渲染将是最大的时间尺度,但似乎它正在将数据从点加载到网格到模型到组。

    基本上我有一个stlModel,它包含一个StlTriangles数组(一个包含3个顶点3D和1个普通vector3D的类):

    Model3DGroup model3D = new Model3DGroup();
                    Material objectMaterial = new DiffuseMaterial(new SolidColorBrush(Colors.Coral));
                    GeometryModel3D triangle;
                    MeshGeometry3D mesh;
                    ModelVisual3D solidModel3D = new ModelVisual3D();
    
                    stlModel.loadTriangles();
    
                    for (int i = 0; i < stlModel.Triangles.Length; i++)
                    {
                        mesh = new MeshGeometry3D();
                        mesh.Positions.Add(stlModel.Triangles[i].Vertex1);
                        mesh.Positions.Add(stlModel.Triangles[i].Vertex2);
                        mesh.Positions.Add(stlModel.Triangles[i].Vertex3);
                        mesh.TriangleIndices.Add(0);
                        mesh.TriangleIndices.Add(1);
                        mesh.TriangleIndices.Add(2);
                        mesh.Normals.Add(stlModel.Triangles[i].Normal);
                        mesh.Normals.Add(stlModel.Triangles[i].Normal);
                        mesh.Normals.Add(stlModel.Triangles[i].Normal);
    
                        triangle = new GeometryModel3D(mesh, objectMaterial);
    
                        model3D.Children.Add(triangle);
                    }
    
                    solidModel3D.Content = model3D;
    
                    this.mainViewport.Children.Add(solidModel3D);
    

0 个答案:

没有答案