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、內存、顯卡!
但是,前面我說過了,事實往往都讓人更加傷,設備的預算……這個,大家都懂的吧。
最后,各位大大,走過路過千萬不要錯過,幫幫忙啊!!!