WPF 3D-дисплей очень медленно - PullRequest
0 голосов
/ 09 апреля 2020

У меня проблема с ожиданием ваших предложений о производительности WPF 3D. Он работает довольно хорошо с небольшой шириной и длиной, но с шириной и длиной около 949x825. При измерении с помощью секундомера вся реализация в коде c# занимает всего около 0,6 секунд, но для его отображения требуется около 6 секунд. 3D-изображения на экране и при использовании мыши для увеличения или поворота 3D-изображения это очень медленно. Есть ли способ повысить производительность?

Код в C#:

        // **Test with width = 949 and length = 825. It's very slow**
        // Make a mesh to hold the surface.
        MeshGeometry3D mesh = new MeshGeometry3D();
        Int32Collection triangleIndices = new Int32Collection();
        Point3DCollection positions = new Point3DCollection();

        //defining point and triangles
        int ind1 = 0;
        int ind2 = 0;

        for (var z = 0; z < length; z++)
        {
            for (var x = 0; x < width; x++)
            {
                var point = new Point3D(x, map[z, x] * ImageConstants.YScale, z);
                positions.Add(point);

                if (z < length - 1 &&
                    x < width - 1)
                {
                    ind1 = x + z * width;
                    ind2 = ind1 + width;

                    //first triangle
                    triangleIndices.Add(ind1);
                    triangleIndices.Add(ind2);
                    triangleIndices.Add(ind2 + 1);

                    //second triangle
                    triangleIndices.Add(ind1);
                    triangleIndices.Add(ind2 + 1);
                    triangleIndices.Add(ind1 + 1);
                }
            }
        }

        mesh.Positions = positions;
        mesh.TriangleIndices = triangleIndices;

В Xaml:

<Grid Name="mainGrid" Background="Black" MouseWheel="OnMouseWheel" MouseDown="OnMouseDown">
        <Viewport3D Name="MainViewport3D">
            <Viewport3D.Camera>
                <PerspectiveCamera x:Name="MainPerspectiveCamera" FieldOfView="35" />
            </Viewport3D.Camera>
            <ModelVisual3D>
                <ModelVisual3D.Content>
                    <Model3DGroup x:Name="MainModel3DGroup">
                    </Model3DGroup>
                </ModelVisual3D.Content>
            </ModelVisual3D>
        </Viewport3D>
    </Grid>

Большое спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...