我正在尝试使用 WPF 的 Viewport3D 控件可视化约 170000 点的点云。生成 3D 点坐标后,我在每个点创建一个具有特定大小的三角形,并将其添加到 Model3DGroup 对象,然后将其附加到我的视口。
我的问题是,下面负责此操作的代码仅需要 3 秒才能运行。将 Model3DGroup 添加到视口后,UI 将再冻结 3-5 秒。
我怎样才能使这项工作更快?此外,如果 Viewport3D 无法处理此数量的模型,任何人都可以推荐一种在 WPF 控件中可视化点云的替代方法吗?
viewport.Children.Clear();
Model3DGroup triangles = new Model3DGroup();
foreach (Point3D point in workspace.PointCloud)
{
double x = point.X;
double y = point.Y;
double z = point.Z;
Point3D p1 = new Point3D(x + 0.005, y, z);
Point3D p2 = new Point3D(x, y + 0.005, z);
MeshGeometry3D mymesh = new MeshGeometry3D();
mymesh.Positions.Add(point);
mymesh.Positions.Add(p1);
mymesh.Positions.Add(p2);
mymesh.TriangleIndices.Add(0);
mymesh.TriangleIndices.Add(1);
mymesh.TriangleIndices.Add(2);
Vector3D Normal = GeometryHelper.CalculateTraingleNormal(p0, p1, p2);
mymesh.Normals.Add(Normal);
mymesh.Normals.Add(Normal);
mymesh.Normals.Add(Normal);
Material Material = new DiffuseMaterial(
new SolidColorBrush(Colors.Red) { Opacity = 0.5 });
GeometryModel3D model = new GeometryModel3D(
mymesh, Material);
triangles.Children.Add(model);
}
ModelVisual3D modelVisual = new ModelVisual3D();
modelVisual.Content = triangles;
viewport.Children.Add(modelVisual);