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、内存、显卡!
但是,前面我说过了,事实往往都让人更加伤,设备的预算……这个,大家都懂的吧。
最后,各位大大,走过路过千万不要错过,帮帮忙啊!!!
WPF 3D模型 3D场景的更多相关文章
- Unity3D游戏开发初探—2.初步了解3D模型基础
一.什么是3D模型? 1.1 3D模型概述 简而言之,3D模型就是三维的.立体的模型,D是英文Dimensions的缩写. 3D模型也可以说是用3Ds MAX建造的立体模型,包括各种建筑.人物.植被. ...
- WPF利用HelixToolKit后台导入3D模型
原文:WPF利用HelixToolKit后台导入3D模型 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/m0_37591671/article/de ...
- 3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子
原文:3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子 3ds Max建模,Blend设计,VS2008控制WPF的3D模型例子 所用的软件 3ds Max 9.0,Mic ...
- WPF绘制深度不同颜色的3D模型填充图和线框图
原文:WPF绘制深度不同颜色的3D模型填充图和线框图 在机械测量过程中,测量的数据需要进行软件处理.通常测量一个零件之后,需要重建零件的3D模型,便于观察测量结果是否与所测工件一致. 重建的3D模型需 ...
- WPF程序加入3D模型
原文:WPF程序加入3D模型 版权声明:本文为博主原创文章,转载请附上链接地址. https://blog.csdn.net/ld15102891672/article/details/8006474 ...
- WPF 3D 模型旋转
原文:WPF 3D 模型旋转 WPF 是 Microsoft 在 Framework3.0 中支持的一种技术,它能作出很绚丽的界面,同时它也支持3D的操作.在3D操作主要包括平移(Translate) ...
- WPF 3D模型的一个扩展方法
原文:WPF 3D模型的一个扩展方法 在WPF 3D中,我们常常需要改变一个ModelVisual3D对象的颜色. 先说说ModelVisual3D,本质上3D模型都是由一个个的三角形构成的,并且经过 ...
- WPF中的3D特性和常见的几个类
原文:WPF中的3D特性和常见的几个类 WPF 3D 常用的几个类及其关系 1. Visual 类 所有二维可视化元素的基类,为 WPF 中的呈现提供支持,其中包括命中测试.坐标转换和边界 ...
- 在WPF中添加3D特性
原文:在WPF中添加3D特性 35.4 在WPF中添加3D特性 本节介绍WPF中的3D特性,其中包含了开始使用该特性的信息. 提示: WPF中的3D特性在System.Windows.Media.M ...
随机推荐
- 优化SqlServer--数据压缩
数据压缩是对存储和性能优势的加强.减少数据库占用的磁盘空间量将减少整体数据文件存储空间,在一下几个方面增加吞吐量: 1.更好的I/O利用率,每个页面可以读写更多的数据. 2.更好的内存利用率,缓冲区可 ...
- request 、response和session的区别
request: 1.request.getParameter("key")接受的是来自客户登陆端的数据,接受的是post或get方式传送的value. 2.请求的默认字符集是IS ...
- RTP、RTCP协议学习-2015.04.15
最近做视频编解码部分,传输采用RTP协议.对学习做个记录 1.简介 实时传输协议(Real-time Transport Protocol或简写RTP)是一个网络传输协议,它是由IETF的多媒体传输工 ...
- BootStrap入门教程 (一)
BootStrap入门教程 (一) 2011年,twitter的"一小撮"工程师为了提高他们内部的分析和管理能力,用业余时间为他们的产品构建了一套易用.优雅.灵活.可扩展的前端 ...
- [转]输出带颜色的shell
格式: echo -e "\033[字背景颜色;字体颜色m字符串\033[0m" 例如: echo -e "\033[41;36m something here \033 ...
- date
更改时区 用系统备好的时区文件覆盖掉当前的配置文件,/etc/里装的是当前系统的配置文件 $sudo cp /usr/share/zoneinfo/Asia/Chongqing /etc/localt ...
- 001.libev安装及eclipse下添加libev库链接
libev库安装: 1.下载页面:http://dist.schmorp.de/libev/ 当前版本下载: [root@mid_server ~]# cd /usr/local/src [root ...
- Linux shell if [ -n ] 正确使用方法
if [ str1 = str2 ] 当两个串有相同内容.长度时为真 if [ str1 != str2 ] 当串str1和str2不等时为真 if [ -n str1 ] 当串的长度大于0时为真( ...
- OpenStack Austin 峰会观察:OpenStack as IaaS 已是过去,Solutions on OpenStack 才是未来
虽然搞 OpenStack 前后也有几年,但是今年在美国 Austin 举办的 OpenStack Summit 我还是第一次参加.回来之后,一直还在回味,觉得要写点东西,将我在这次峰会上的观察和思考 ...
- ARM学习篇一 点亮LED
要点亮LED,先决条件是什么,当然得有相应的硬件设施.板子的整个电路图比较大,我就直接取相关部分. 给发光二级管加上3.3v电压后,通过1k电阻,直接与S3C2440连接.至于为什么要加电阻,大家应该 ...