WPF 3D模型 3D場景


1、首先得說明的是這並不是真正的3D,模型被導出為一系列的單個圖片,例如一個3D戶型圖,以某個視角旋轉360°,渲染出一系列連續的單個圖片文件。

2、在Image.MouseMove事件中添加相應代碼,根據move的方向(根據當前鼠標點和前一鼠標點即可判斷出),來更新Image.Source(賦值為上一張or下一張圖片)

3、如果進展順利,那么你就可以使你的3D模型流暢的旋轉起來。

然而事情的發展往往讓人很不愉快。

於是乎,展開各種網絡搜索。略去其中各種奇葩想法,例如異步加載啦、預加載啦等等亂七八糟的。

1、以空間換時間。使用List<byte[]>/List<Stream> 預先把所有的圖片都加載進內存 400張1.27M(1024*768 jpg) 理論上400*1.27=508M 但事實上內存占用達到了1300多M(我也不知道為什么會那么多)!然而空間占用了時間卻沒有換來,卡頓照常!

2、還是以空間換時間,不過這次使用List<ImageSource>來緩存所有的圖片。然而事實還是讓人悲傷!不過還好,這時候讓我發現了問題的關鍵所在,就在於Image的呈現上!如果ImageSource被呈現過之后,再次賦值給Image程序速度會加快很多!以下是本人的一些測試:

400張1.27M左右的圖片,內存占用1360多M,第一次呈現需要35ms左右,之后呈現耗時15ms左右。

400張860K左右的圖片,內存占用1300多M,呈現耗時30ms左右  之后呈現耗時15ms左右

400張620K左右的圖片,內存占用880多M,呈現耗時20ms左右,之后呈現時間為15ms左右(依次呈現所有圖片理論耗時:20*400=8000ms 實際耗時:1200+ms )

400張500K左右的圖片,內存占用700多M,呈現耗時15ms左右,第一次呈現即可以流暢的旋轉,但是圖片清晰度不夠!

注:本人使用機器:win8.0、i5 3.0Ghz、內存8G、顯卡GTX 550 Ti 

兩個關鍵性問題:

1、如何減少呈現耗時(我現在的做法是用一個動態的loading圖片遮住,用一個線程來依次呈現所有ImageSource)

2、減少內存占用 (我嘗試只保存當前Index的前、后10個ImageSource,內存占用是下來了,但是沒有了緩存效果,可能是我的線程調度有問題)

關於WPF對於控件的呈現,各種百度了一番,什么原理了結構圖了看了一堆,發現解決辦法指向了一個讓人悲哀的方向:CPU、內存、顯卡!

但是,前面我說過了,事實往往都讓人更加傷,設備的預算……這個,大家都懂的吧。

 

最后,各位大大,走過路過千萬不要錯過,幫幫忙啊!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM