使用Helix Toolkit提高WPF渲染性能

3

我正在渲染大量的网格,这些网格已经作为stl文件加载并添加到HelixViewport3D对象中。所有的网格都是静态的。

// in MainWindow.xaml
 <HelixToolkit:HelixViewport3D x:Name ="viewPort" ZoomExtentsWhenLoaded="True" Margin="250,-15,0,15">

// in MainWindow.cs Constructor
this.viewPort = new HelixViewport3D();
foreach(string path in meshPaths){
    ModelVisual3D meshModel = loadMesh(path);
    viewport.Children.Add(meshModel);
}

由于网格数量较高,渲染性能相当低(在旋转过程中会冻结,很难缩放...)。我该如何使我的场景更易于旋转和操作?


你有找到任何针对处理大量对象的性能问题的解决方案吗?我需要处理一个70MB大小的3ds文件。我试图移除那些绑定尺寸小于最大可见范围xxx%的网格(但我还没有找到任何方法来确定最大可见范围...) - Mauro Destro
嗨@MauroDestro,实际上我没有太多进展。不过你的方法似乎很有前途。也许你可以将其与视口本身的百分比进行比较。 - Nic
是的@Nic,但我无法找到可见空间的大小(例如包含整个可见模型的不可见球体的边界),以计算%。 - Mauro Destro
1个回答

1
关于ModelVisual3D的评论, 它在渲染、命中测试等方面存在巨大的开销。
因此,减少可视化元素的数量并将它们组合在一起可能会有所帮助。
this.viewPort = new HelixViewport3D();
var meshes = new Model3DGroup();
foreach (string path in meshPaths)
{
    // just take the model of the loaded 3d object
    meshes.Children.Add(loadMesh(path).Content);
}
viewport.Children.Add(new ModelVisual3D() { Content = meshes });

如果您不打算更改模型,则可以在将其添加到 HelixViewport3D 之前简单地冻结它们:
meshes.Freeze();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接