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

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

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

WPF 3D模型 3D场景的更多相关文章

  1. Unity3D游戏开发初探—2.初步了解3D模型基础

    一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...

  2. WPF利用HelixToolKit后台导入3D模型

    原文:WPF利用HelixToolKit后台导入3D模型 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/de ...

  3. 3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子

    原文:3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子 3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子   所用的软件 3ds Max 9.0,Mic ...

  4. WPF绘制深度不同颜色的3D模型填充图和线框图

    原文:WPF绘制深度不同颜色的3D模型填充图和线框图 在机械测量过程中,测量的数据需要进行软件处理.通常测量一个零件之后,需要重建零件的3D模型,便于观察测量结果是否与所测工件一致. 重建的3D模型需 ...

  5. WPF程序加入3D模型

    原文:WPF程序加入3D模型 版权声明:本文为博主原创文章,转载请附上链接地址. https://blog.csdn.net/ld15102891672/article/details/8006474 ...

  6. WPF 3D 模型旋转

    原文:WPF 3D 模型旋转 WPF 是 Microsoft 在 Framework3.0 中支持的一种技术,它能作出很绚丽的界面,同时它也支持3D的操作.在3D操作主要包括平移(Translate) ...

  7. WPF 3D模型的一个扩展方法

    原文:WPF 3D模型的一个扩展方法 在WPF 3D中,我们常常需要改变一个ModelVisual3D对象的颜色. 先说说ModelVisual3D,本质上3D模型都是由一个个的三角形构成的,并且经过 ...

  8. WPF中的3D特性和常见的几个类

    原文:WPF中的3D特性和常见的几个类 WPF 3D 常用的几个类及其关系 1.  Visual 类      所有二维可视化元素的基类,为 WPF 中的呈现提供支持,其中包括命中测试.坐标转换和边界 ...

  9. 在WPF中添加3D特性

    原文:在WPF中添加3D特性 35.4  在WPF中添加3D特性 本节介绍WPF中的3D特性,其中包含了开始使用该特性的信息. 提示: WPF中的3D特性在System.Windows.Media.M ...

随机推荐

  1. collections中可命名元组和队列

    一丶可命名元组(nametuple)

  2. 0006 《SQL必知必会》笔记02-计算字段与函数

    1.从数据库中检索出的数据往往并不是最后要展示的格式,可以在数据库端或者客户端应用程序中完成转换和格式化,但一般说来,在数据库服务器中完成要快很多. 2.拼接字段:将几个值连接到一起构成单个值.Ora ...

  3. win7下硬盘安装ubuntu

    首先还是分区,在计算机上右键--管理--磁盘管理.装Ubuntu分配的硬盘大小最好是(20G以上)不要太小,这里请注意,Ubuntu和Windows文件系统完全不同,所以我们划好要给Ubuntu的分区 ...

  4. 双核CPU,跑程序会报rcu_sched_state detected stalls on CPUs/tasks 错误

    有一份SDK,之前跑在PPC405EX上没问题。最近换平台,CPU使用了PowerPC的P1020,双核。linux版本也升级到了3.0.48版本。升级之后出现了一个问题:SDK里面的程序跑一段时间之 ...

  5. oracle函数--trunc

    作用:截取 语法:trunc(date,[fmt])   TRUNC函数,ORA-01898 精度说明符过多 TRUNC(SYSDATE)即可默认当前日期(年月日),---写到这一步就好了 TRUNC ...

  6. 浅谈输入输出”重定向“——基于Linux系统

    前言 进程在启动后会自动的打开3个文件:标准输入.标准输出和标准错误输出分别对应文件描述符0.1.2.对于每个进程他们都都维护了一张文件描述符表(file descriptor table),通常fd ...

  7. 又是一周-AJAX(三)

    hi 我又食言了,但我还是厚颜无耻的回来了... 1.AJAX(三) 三.AJAX的简单的例子 3.1 简介 完成:查询员工信息,通过输入员工编号查询员工的基本信息+新建员工的信息,包含员工姓名,编号 ...

  8. UESTC 395 Dynamic Query System --Treap

    题意:让你维护一个集合,有8种操作: 1.  I x  插入一个数 2.  R x 删除x 3.  S 输出总的数个数(集合大小) 4.  L x  查询小于x的数的个数 5.  W k  查询集合中 ...

  9. [No000036]操作系统Operating Systems系统调用的实现System_Call

    实现一个whoami 系统调用 系统调用的直观实现 问题+直观想法… 用户程序调用whoami, 一个字符串"systemcall "放在操作系统中(系统引导时载入) ,取出来打印 ...

  10. luogu1003铺地毯[noip2011 提高组 Day1 T1]

    题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...