【问题标题】:Improve WPF rendering performance using Helix Toolkit使用 Helix Toolkit 提高 WPF 渲染性能
【发布时间】:2015-10-27 17:16:37
【问题描述】:

我正在渲染大量加载为 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% 的网格(但我还没有找到任何方法来知道最大可见边界......)
  • 嗨@MauroDestro,实际上我并没有太大进步。不过,您的方法似乎很有希望。也许您可以将其与视口本身的百分比进行比较。
  • 是的@Nic,但我无法找到空间可见部分的大小(例如包含整个模型可见的不可见球体的边界)来计算 %

标签: c# wpf rendering helix-3d-toolkit


【解决方案1】:

关于ModelVisual3D's remarks,它在渲染、命中测试等方面带来了很大的开销。

因此,减少视觉效果并将它们组合在一起可能会对您有所帮助:

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 });

如果您不打算更改模型,您可以简单地 freeze 将它们添加到 HelixViewport3D

meshes.Freeze();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 2012-06-14
    • 1970-01-01
    相关资源
    最近更新 更多