我是WPF的新手,我想知道: 有没有办法在使用大网格时优化WPF(C#)的性能? 我有一个STL文件要读(~160000三角形),我使用here中的一些指令。我的计划工作流程是:
将STL文件加载到字节数组
使用Point3D和Vector3D变量将字节数组中的所有点和法线数据读取到自定义类
使用类似于“private Model3DGroup CreateTriangleModel()”的方法
在ModelVisual3D模型中加载生成的Model3DGroup三角形
this.mainViewport.Children.Add(模型);
是否有更直接的方法将点/法线/三角形/曲面加载到视口以避免某些步骤? 从我现在看到的相同数据在不同的结构中重用。一个结构将相同的数据传递给下一个。
*最大的开销是在第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);