[英]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.