Я пытаюсь визуализировать облако точек ~ 170000 точек с помощью элемента управления ViewPort WPF. После создания координат трехмерных точек я создаю треугольник с определенным размером в каждой точке и добавляю его к объекту Model3DGroup, который я добавляю к моему файлу Viewport aftwerwards.Визуализация облаков точек в WPF Viewport3D чрезвычайно медленная
Моя проблема заключается в том, что приведенный ниже код отвечает за выполнение только трех секунд. После того, как Model3DGroup добавлен в Viewport, пользовательский интерфейс заморозится еще на 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);
Даже после ваших усилий по оптимизации, я не верю, что вы увидите результаты, которые ищете. Вы можете лучше обслуживаться чистым нативным решением и D3D. Похоже на забавный проект. Удачи. – Jeff