WPF中的三维空间(1)
原文:WPF中的三维空间(1)
WPF中可以创建三维几何图形,支持3D对象的应用,支持从3D Max等软件将3D文件obj导入设计中,但是目前还不支持将材质同时导入,这样需要在WPF中对3D对象重新设置颜色或贴图。
2.10.1 WPF中的三维空间
1.三维空间坐标
WPF中二维图形的坐标系原点定位在呈现区域(屏幕)的左上角,其X 轴上的正方向朝右,Y轴的正向朝下。 在WPF的三维坐标系中,原点一般位于在WPF中创建的三维对象的中心(导入的三维对象的情况就不一定了,比如从3DMax中导入的obj文件),三维坐标的X 轴正方向朝右,Y轴的正方向朝上,Z轴的正方向从原点向外朝向观察者。

图2-191
三维空间坐标
图2-191给出了WPF三维空间坐标系(X:红色,Y:绿色,Z:蓝色),两个坐标轴之间的弧线表示可以旋转,其中:
Y-Z之间的弧线(红色)表示可以围绕X轴旋转;
X-Z之间的弧线(绿色)表示可以围绕Y轴旋转;
X-Y之间的弧线(蓝色)表示可以围绕Z轴旋转。
2.照相机及典型位置
照相机是观察者观察三维对象形态和位置的工具,照相机的位置坐标及与对象的距离直接影响到三维对象的呈现。WPF中的相机有正交相机(OrthographicCamera)和透视(远景)相机(PerspectiveCamera)两类,从观察者的角度来说前者对观察对象没有透视感,远近都一样。后者的工作原理与普通照相机镜头类似,对象离照相机越远,看起来就越小,观察到的对象则有远小近大的效果。
照相机的位置坐标是可以变化的,一个典型的透视相机位置设置如图2-192所示。

图2-192
典型的透视相机位置设置
图2-192中,当相机位置靠近Z轴中心时,即Z坐标值变小,观察到的对象变大,当相机位置远离Z轴中心时,即Z坐标值变大,观察到的对象变小。
照相机的位置就是观察者的位置,相机的位置可以任意设置,这样观察到的三维对象的“形象”就会发生变化,在三维场景中正确设置相机位置很重要,图2-192是一个典型设置。
3.材料
三维对象使用的材料分三类:
漫射材料:确定三维对象在直射光(白光)照射下的颜色,其作用就如同墙面喷漆一样。
放射材料:使对象产生发光效果。光的颜色由材料的颜色决定。
反射材料:控制三维对象上高光反射区域的颜色。高光反射区域指在金属铬等光滑亮泽表面上看到的光亮区域。
4.光的分类
照射在三维对象上的光线分为4类,如图2-193所示。

图2-193
光的分类
(1)环境光:环境光将光投向各个方向,使所有对象均匀受光。如果只用环境光,则
对象可能会显得褪色,而且颜色单一。为了获得最佳效果,需要使用其他光。如图2-193左一图。
(2)投射光:投射光所投射的光如同聚光灯一般,光从发光位置发出,并在锥形区域内传播。投射光不会影响到位于锥形发光区域以外的那部分三维对象。如图2-193左二图。
(3)定向光:定向光沿着特定的方向均匀平行投射,就像太阳光一样。如图2-193左三图。
(4)点光:点光从一个点向所有方向投射光,就像普通的灯泡一样。如图2-193右图。
2.10.2 WPF三维空间的元素
1.Viewport3D控件
Expression Blend中提供了Viewport3D控件,这是三维对象元素的上层容器,是相机对象元素Camera、三维图形呈现对象元素ModelVisual3D的集合。添加obj对象到【设计面板】后就自动建立了1个Viewport3D控件,在【对象和时间线】面板中可以看到,其中包含下列属性设置:
(1) Camera:相机,可以在【属性】面板选择以下属性设置:
相机类型:远景相机、正交相机及有关参数;
Position:照相机在三维空间中的位置;
Direction:照相机在三维空间中的拍摄方向;
UP Vector:正向矢量,指定此照相机的“上方”所指的方向。
Perspective Field of
View:透视视野,仅适用于远景相机,较小的数值会减少对象因远景拍摄而变形的程度。较大的数值会像使用鱼眼镜头一样导致对象大幅变形。
Near Clipping Plane/Far Clipping Plane:近点/远点剪切平面,可控制对象与照相机之间的最近或最远距离,超出上述距离的对象将从所呈现的视图中消失。
(2)AmbientLight:环境光色彩设置,可以在上述的光类型中选择需要的光源。
(3)DirectionLight:定向光色彩设置,可以在上述的光类型中选择需要的光源。
(4)DefaultMaterial:材质设置,可以在前面介绍的材料类型中选择,可以选择图形刷资源。
2.ModelVisual3D元素
三维元素ModelVisual3D可以再包含多个ModelVisual3D子元素,比如灯光,三维造型。
3.GeometryModel3D元素
GeometryModel3D是ModelVisual3D子元素内的三维造型元素,材质是其属性,而三维图形构建又由最底层网格元素MeshGeometry3D完成。
4.MeshGeometry3D元素
这是1个若干3D点(Point3D)的集合,每3个3D点按一定环绕方向组成1个三角形,WPF采用逆时针的环绕方向,符合所谓“右手法则”,即垂直竖起右手的大拇指,弯曲其余4指,其余4指指向正是三角形的环绕方向,大拇指的指向是三角形的正面,反向是其背面,如图2-194所示,正是这些三角形构成了WPF中的三维造型世界。

图2-194
MeshGeometry3D图
图2-195是【对象和时间线】面板呈现的1个三维对象元素的列表,可以看出上面所说的三维元素之间的关系。

图2-195
三维对象元素
图2-195中有1个Viewport3D控件,其中有1个Camera元素,1个名为“World”的三维元素ModelVisual3D,这是多个ModelVisual3D元素的集合,“AmbientLightContainer”、“DirectionalLightContainer”和“RootGeometryContainer”均属于ModelVisual3D元素,其中“RootGeometryContainer”元素又包含多个ModelVisual3D子元素,如“Cylinder01”、“Cylinder02”等。“Cylinder01”中又包含GeometryModel3D
元素。
WPF中的三维空间(1)的更多相关文章
- WPF中的三维空间(2)
原文:WPF中的三维空间(2) 2.10.3 三维对象操作 1.在二维平面空间移动.缩放.旋转Viewport3D控件对象 图2-196 选中Viewport3D控件对象 图 ...
- WPF中对三维模型的控制
原文:WPF中对三维模型的控制 (以下选自南开大学出版社出版的<WPF和Silverlight教程>) 3Dmax中的建模模型可以导出为obj文件格式,将此文件导入WPF项目中,由WPF完 ...
- 用游戏杆控制WPF中三维模型
原文:用游戏杆控制WPF中三维模型 用游戏杆控制WPF中三维模型 今天心情比较好,不写WF的文章了,换个主题.写一个我最最最擅长的内容. 例子下载: http://files.cnblogs. ...
- 在WPF中使用依赖注入的方式创建视图
在WPF中使用依赖注入的方式创建视图 0x00 问题的产生 互联网时代桌面开发真是越来越少了,很多应用都转到了浏览器端和移动智能终端,相应的软件开发上的新技术应用到桌面开发的文章也很少.我之前主要做W ...
- MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息
MVVM模式解析和在WPF中的实现(六) 用依赖注入的方式配置ViewModel并注册消息 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二 ...
- MVVM模式解析和在WPF中的实现(五)View和ViewModel的通信
MVVM模式解析和在WPF中的实现(五) View和ViewModel的通信 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 M ...
- MVVM设计模式和WPF中的实现(四)事件绑定
MVVM设计模式和在WPF中的实现(四) 事件绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- MVVM模式解析和在WPF中的实现(三)命令绑定
MVVM模式解析和在WPF中的实现(三) 命令绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
- MVVM模式和在WPF中的实现(二)数据绑定
MVVM模式解析和在WPF中的实现(二) 数据绑定 系列目录: MVVM模式解析和在WPF中的实现(一)MVVM模式简介 MVVM模式解析和在WPF中的实现(二)数据绑定 MVVM模式解析和在WPF中 ...
随机推荐
- 李兴华JavaWeb开发笔记
李兴华JavaWeb开发笔记 1.Java语法-基础 环境变量-JAVA_HOME, PATH, ClassPath 变量名 作用 举例 JAVA_HOME 指向JDK目录 C:\Program Fi ...
- hdu4493 Tutor
Tutor Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others) Total Submiss ...
- KFC - About KFC - Quality Assurance
KFC - About KFC - Quality Assurance Restaurant Quality The main attributes for KFC restaurant excell ...
- ORACLE:plsql优化
1.登录后默认自动选中My Objects? 设置方法:Tools菜单--Brower Filters会打开Brower Filters的定单窗口,把“My Objects”设为默认即可.? 同理 ...
- Office 2016九大新功能
Office 2016将于2015年秋季正式公布,下面是九大新功能. 预測 基于数据透视表的时间分组建模 联机分析(OLAP)下的PowerView 数据透视表(PivotTable)建模的自己主动关 ...
- SVN最有效的方法打基线
笔者:张克强 在微博上:张克强-敏捷307 2014/7/6 方法一来自于我的一条微博: 组织级scm建一个名为controlled的文件夹,当项目某文档通过评审后,组织级scm从项目文件夹下找 ...
- hdu3605(最大流+状态压缩)
传送门:Escape 题意:给出每个人适合住的星球信息和该星球能住多少人 ,第一行给出n m 代表有 n 个人 m 个星球,然后接下来n行每行m个数字 1代表适合第 i 个星球 0 代表不适合第 i ...
- poj3281(最大流)
传送门:Dining 题意:一些牛,一些食物,一些饮料,每头牛都有其喜欢的几种食物和几种饮料,求最多能给多少头牛即找到食物又找到饮料~也就是有多少个 牛---食物---饮料 的匹配,而且满足一一匹配, ...
- ubuntu 经常使用软件及环境
安装完系统后,更新系统 sudo apt-get update # 更新源索引 sudo apt-get dist-upgrade # 更新系统 sudo apt-get autoremove 1安装 ...
- UVA 11080 - Place the Guards(二分图判定)
UVA 11080 - Place the Guards 题目链接 题意:一些城市.之间有道路相连,如今要安放警卫,警卫能看守到当前点周围的边,一条边仅仅能有一个警卫看守,问是否有方案,假设有最少放几 ...