我正在尝试使用WPF的Viewport3D控件可视化一个约170000个点的点云。在生成3D点坐标后,我在每个点上创建一个特定大小的三角形,并将其添加到一个Model3DGroup对象中,然后将其附加到我的Viewport之后。
我的问题是,下面的代码负责这个过程需要独自运行3秒钟。在Model3DGroup已经添加到Viewport后,UI仍会再次冻结3-5秒钟。
如何使它更快?如果Viewport3D无法处理此数量的模型,是否有人可以推荐一种替代方法来在WPF控件中显示点云?
我的问题是,下面的代码负责这个过程需要独自运行3秒钟。在Model3DGroup已经添加到Viewport后,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);