gpt4 book ai didi

c# - 3D View 中的 WPF 2D 动画 : Performance issue

转载 作者:太空狗 更新时间:2023-10-29 21:49:12 26 4
gpt4 key购买 nike

我在 3D 面板 ( Planerator ) 中放置了一个 TextBlock 并使用了一个 Storyboard 来制作它的动画。 (作为抓取文本)

当视野为 1 时一切正常,但如果我将视野设置为超过 50,帧速率将急剧下降并且渲染会不稳定。

我使用了CompositionTarget.rendering

请看下面的图片:

enter image description here

enter image description here

我需要在 3d View 中以良好的性能制作 2D 动画。

请告诉我如何解决这个问题?我应该离开 WPF 并转到 DirectX 吗?

更新 1:

我只想在 3D 空间中移动 ONE 2Dtext,但性能很差。(渲染不流畅,断断续续)

这是 a sample project .

更新 2:

这是 sample project根据 cokeman19 的回答更新版本。 (性能提升~10帧,但我需要完美渲染)

更新 3:

最后,在cokeman19的回答和this page的内容的帮助下,我得到了一个可以接受的表现。 .

最佳答案

我不确定它是否只是示例应用程序的副产品,但在 Planerator.CreateVisualChild() 下,似乎没有必要设置 GeometryModel3D.BackMaterial 。供引用:

VisualBrush vb = new VisualBrush(_logicalChild);
SetCachingForObject(vb); // big perf wins by caching!!
Material backMaterial = new DiffuseMaterial(vb);
...
GeometryModel3D backModel = new GeometryModel3D() { ..., BackMaterial = backMaterial };

BackMateriallogical 子级的VisualBrush 包装器,它不属于可视化树,因此渲染不在这里似乎有道理。此外,逻辑子项(LayoutInvalidationCatcher 类)又是 visual 子项的包装器,它已经呈现(使用 _logicalChild)在设置 frontModel.Visual 中。

删除用于创建和设置 BackMaterial 的代码可将 FPS 提高到约 55。

此外,如果可以的话,设置以下设置可使 FPS 恢复到 60,而质量没有明显下降。

RenderOptions.SetEdgeMode(_viewport3d, EdgeMode.Aliased);

更新:

我能够获得的唯一其他收获是将 CacheMode 设置为 BitmapCache,这可能不适用于您的需求。

frontModel.CacheMode = new BitmapCache(20) { EnableClearType = false };

即使在我最慢的机器上,这也允许最大 FPS,但也有一些缺点。因为文本元素上的缩放级别非常高,而且这种技术创建了一张图片以在动画中使用(而不是为 UIElement 本身设置动画),所以我不得不将缩放级别设置为 20,然后它变得几乎 视觉上难以察觉。这当然也对内存有影响。

关于c# - 3D View 中的 WPF 2D 动画 : Performance issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35830321/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com