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、内存、显卡!

但是,前面我说过了,事实往往都让人更加伤,设备的预算……这个,大家都懂的吧。

最后,各位大大,走过路过千万不要错过,帮帮忙啊!!!

上一篇:Android开发常见错误及技巧


下一篇:哈理工2015暑假集训 zoj 2975 Kinds of Fuwas