[英]WPF 2D in 3D view Animations : Performance issue
我在一个3D面板( Planerator )中放置了一个TextBlock
,我使用了一个Storyboard
来为它制作动画。 (作为抓取文本)
当视野为1时,一切正常,但如果我将视野设置为50以上,帧速率将急剧下降,渲染将会不稳定。
我使用了CompositionTarget.rendering
。
请看下面的图片:
我需要3D视图中的2D动画具有良好的性能。
请告诉我如何解决这个问题? 我应该离开WPF并转到DirectX吗?
更新1:
我只想在3D空间中移动一个 2Dtext,但性能很差。(渲染不顺畅,不稳定)
这是一个示例项目 。
更新2:
这是基于cokeman19的答案的示例项目更新版本。 (性能提升了~10帧,但我需要完美渲染)
更新3:
最后,在cokeman19的回答和本页内容的帮助下,我获得了可接受的表现。
我不确定它是否只是示例应用程序的副产品,但在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 };
BackMaterial
是一个围绕逻辑子的VisualBrush
包装器,它不属于可视树,因此这里的渲染似乎没有意义。 此外,逻辑子( LayoutInvalidationCatcher
类)又是可视子对象的包装器,在设置frontModel.Visual
已经呈现(使用_logicalChild
)。
删除用于创建和设置BackMaterial
的代码使FPS达到~55。
此外,如果它是一个选项,设置以下使FPS回升到60,质量没有明显降低。
RenderOptions.SetEdgeMode(_viewport3d, EdgeMode.Aliased);
更新:
我能够做的唯一其他收获是将CacheMode
设置为BitmapCache
,这可能无法满足您的需求。
frontModel.CacheMode = new BitmapCache(20) { EnableClearType = false };
即使在我最慢的机器上,这也允许最大的FPS,但是存在一些缺点。 因为缩放级别是文本元素的那么高,而且这种方法创建的画面在动画中使用(而不是动画的UIElement本身),我不得不把等级设置为20之前,它几乎成为了视觉上感觉不到的。 这当然也有记忆含义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.