簡體   English   中英

3D視圖中的WPF 2D動畫:性能問題

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM