尚旭明,张立成
(长安大学信息工程学院,陕西西安 710064)
基于WPF的三维仿真系统的研究与应用
尚旭明,张立成
(长安大学信息工程学院,陕西西安 710064)
为了快速开发三维模型,通过研究Windows中基于XAML技术的WPF编程方法,实现对实体的应变能力的检测以及直观显示效果。通过建立的WPF模型数据对采集数据或者直接导入3DMAX模型进行转换,然后对模型应用纹理、覆盖顶点、三角定义模型外观以及投影变换技术实现三维图像,从而确定了模型特征。对模型进行组合以及视点变化,实现模型的多视角查看,通过前帧显示,后帧绘制技术实现动态显示三维模型的流畅性,最终建立实物的三维监测系统。该方法已经成功应用于三维仿真监测系统中,基于WPF编程不仅通过仿真计算的模拟和图形显示分离的策略提高了系统的交互性,而且采用XAML技术实现开发速度快,易于实现3D模型的动态展示,具有很好的效果。
WPF;XAML;三维仿真;监测系统
随着计算机图形学技术的发展,近年来三维仿真技术成为国内外关注的热点,人们对于计算机仿真的要求也越来越高,特别是GIS、虚拟现实、增强现实、漫游视景仿真等技术,将计算机视觉模拟逐渐带入了一个更高的水平[1]。三维仿真技术简单来说就是用计算机技术模拟一个真实系统的技术,通过模拟系统来发现、解决以及优化真实系统中出现的问题。三维仿真技术被广泛应用于城市规划、地产行业、电子地图、娱乐教育、虚拟现实[2]等多个领域。在过去,三维场景的计算机呈现需要掌握图形学的基本知识,Direct3D或OpenGL编程技术,通过编写大量的代码才能实现,是一件非常复杂的事情[3]。现在使用WPF显示三维场景非常简单,甚至基于WPF中XAML[4]技术不需要写太多的代码就可以实现一个简单的三维场景,以及与三维场景进行交互。
基于三维仿真技术的需求,文中提出一种基于WPF的三维仿真监测系统的研究与实现方案,以实例的形式介绍如何使用WPF呈现一个三维场景,验证了该方法的直观性、有效性。
WPF(Windows Presentation Foundation)是微软新一代图形系统,属于.NET Framework 3.0的一部分,为用户界面、2D/3D图形、文档和媒体提供了统一的描述和操作方法[5],是一个理念先进的gui库。它提供了超丰富的.NET UI框架,3D视觉效果和强大无比的控件模型框架[6]。微软还提供了专门的界面开发语言-XAML(eXtensible Application Markup Language,可扩展应用程序标记语言)[7]。通过在XAML标记中添加可见UI元素,如按钮、文本框等,然后通过代码转换文件将UI的定义与运行时的逻辑完全分开。XAML与大多数标记语言不一样,一般标记语言是与后备类型系统没有直接关系的解释语言,而XAML语言直接以程序定义的一组特定的后备类型来表示对象的实例化。XAML可以对整个界面布局进行合理调整,而且简化用户界面的开发过程,开发人员可以通过XAML对用户界面进行定制。一般情况下,都是通过使用相关的软件来制作 XAML文件。Microsoft Expression Blend是常用生成XAML的工具。XAML所能做的也可以用代码实现[8]。使用XAML来实现WPF 3D仿真模型有以下优点:
(1)代码编写简单、易读性高;
(2)可以使用工具生成XAML文件;
(3)XAML提供了一种便于扩展和定位的语法来定义和程序逻辑分离的用户界面[9],XAML中界面表现和逻辑功能的分离使得界面开发和功能开发代码分离,有利于开发团队的合理分工,提高了开发效率。
在Windows平台上,以vs2010为开发工具进行WPF编程,可以通过直接采集数据建立实物模型,或者通过3DMAX建立模型,然后将3D模型仿真数据转换或者导入到WPF中,从而完成模型建立。接着给模型添加色彩、材质、纹理等属性,以及确定合适的视点,再对模型进行投影变换,并动态仿真监测系统中变量的变化,从而实现对实体和过程的三维仿真。系统总体结构如图1所示。
3.1 模型建立
在三维工业仿真中,要对许多复杂的模块建立3D模型。对于三维图像,可以利用WPF库提供的基本几何体进行建模。常用的三维模型数据是通过多边形来构建出实体模型的外观,而且多边形的数据信息以文件的形式存储。模型的数据主要包括四个关键的数据集合:
(1)顶点集:由实物的顶点坐标及其法向量构成的集合;
(2)朝向集:朝向是指物体相对于光源的方向,根据这些朝向来计算三维模型的明亮度,面向光源的图面比背离光源的图面表现明亮;
(3)纹理集:确定纹理绘制方式的坐标映射到网格的顶点;
(4)相关三角形列表集:实物网格都是由很多三角形构建的,所以要保存每一个三角形顶点,即构成了三角形集合。
因为通过WPF和OpenGL来创建精细实体模型相对复杂,所以文中采用3DMAX构建实物模型,然后将模型导入WPF中。OpenGL导入模型文件比较复杂,需要编写特定的程序才可以导入,因此每次导入模型都很耗时;与 OpenGL相比,WPF可以直接将3DMAX的.OBJ文件转换为XAML文件,然后表示为模型数据。
3.2 色彩、光照以及纹理的处理
对网格应用纹理、覆盖顶点以及三角形定义的模型外观,通过照相机照明及投影变换来实现三维对象。在二维中通过Brush类来设置区域的颜色、图形或渐变等功能。三维对象不仅仅是应用实体外观的颜色和图案,而且要实现三维效果,需要照明模型。实际生活中,实物的外观、形状是不同的,因此它们对光的反射以及吸收也是不同的,一些实物可以吸收光,使其显示暗淡,一些实物反射光,使其显得明亮。为了达到这样的效果,需要对三维图像应用画笔。WPF使用Materi-al[10-11]抽象类来定义模型图面的特征。Material类用来确定三维模型外观特性,它有很多继承类,每个继承子类有一些共有的属性,比如 SolidColorBrush、Tile-Brush或VisualBrush的Brush属性[12-13]。通过纹理覆盖使得网格外观更像3D实物,通过MeshGeometry3D 的Normals属性和TextureCoordinates属性设置3D模型外观纹理。
三维建模中的光与生活中的光类似,光照到的面可见。也就是说,光源的位置确定了场景中模型表现的明亮或者暗淡。WPF中的光对象包含了设置光种类和阴影效果的属性,这些属性值是根据各种光的表现创建的,从而可以看到创建的三维模型,还可以通过转换场景中放置的光源并对光源属性进行动画处理,实现三维对象的显示与交互。光源属性包括光源的位置、颜色、朝向和范围大小。
<ModelVisual3D.Content>
<AmbientLight Color="#333333"/>
</ModelVisual3D.Content>
DirectionalLight myDirLight=new DirectionalLight();
myDirLight.Color=Colors.White;
myDirLight.Direction=new Vector3D(-3,-4,-5);
modelGroup.Children.Add(myDirLight);
3.3 三维实体在二维屏幕上显示的变换过程
三维实体是在三维坐标中定义的,但是三维物体要在二维的显示器上显示,需要经过一些变换。所以将三维实体的三维坐标映射到二维屏幕上,需要经过以下步骤:
3.3.1 视点变换
视点变换是指调整视点的位置,WPF中的视点就像拍照摄像机的位置,视点对应的是三维场景。可以通过改变实体的位置,也可以通过视点变换即调整视点的位置,来改变观察物体的角度和形状。
XAML文件中的相机位置设置如下:
<Viewport3D.Camera>
<OrthographicCamera x:Name="mainCamera"Width="3.5"
FarPlaneDistance="10"
NearPlaneDistance="0.125"
LookDirection="0,0,-1"
UpDirection="0,1,0"
Position="0,0,1"/>
</Viewport3D.Camer>
还可以通过mainCamera.Position属性设置视点的位置。
3.3.2 模型变换
在WPF中,模型变换(Modeling Transformation)是指对物体位置、方向的设置,是从模型坐标系到世界坐标系的转换。模型坐标系是指模型绘制时使用的坐标系。当模型发生旋转平移等变化时,模型坐标系本身不会变化,变化的是模型在世界坐标系中的位置。世界坐标系是指以屏幕中心为原点(0,0,0),用来描述场景的坐标,这个坐标系可以用来描述物体及光源的位置。世界坐标系是不会被改变的。可以通过保持相机位置不变,将物体移动到适当位置来进行模型变换,也可以固定物体不变,移动相机位置从而实现模型变换。不管使用哪种方式,物体是在当前的绘图坐标系中构建,物体的位置由当前的绘图坐标系决定,所以模型变换归根到底就是对当前绘图坐标系位置的变换,这一变换是在世界坐标系下进行的。实体位置的变换可以通过模型的旋转、平移和缩放来实现。
WPF中与模型变换相关的类为:
RotateTransform3D myRotateTransform=new RotateTransform3D(new AxisAngleRotation3D(new Vector3D(0,1,0),90))
第一个参数为旋转中心,第二个参数为旋转角度。3.3.3 透视投影
如人眼所看,离眼睛近的物体显得大,而离眼睛远的物体显得小。透视投影通常用于反映现实的真实性,比如动画、视觉仿真等。投影包括透视投影(Perspective Projection)和正视投影(Orthographic Projection)两种[14]。WPF投影设置是通过设置摄像机类型实现。Orthographic Camera(正射摄像机)是指没有透视效果,即三维模型到二维图像的正投影,正投影的逻辑宽度在左,右,前,后,顶,底都是相等的;而Perspective Camera(透视摄像机)指实现三维模型到二位模型的透视投影,也就是看到的实体前端和后端的可视宽度不同。
3.4 实时仿真
3D仿真检测系统是指根据实际情况实时检测真实世界实体受到外界影响发生的变化。此系统中实时显示物体的应变值,是指物体在受到外界环境影响下的内部结构所表现的状态。根据传感器实时采集的数据,对3D模型的数据进行重新处理,生成当前时刻的模型数据,根据数据重新设置模型的材质,实现3D模型的实时动态显示。动态显示就涉及UI刷新问题,在Windows Form程序开发过程中,更新UI非常简单,使用application.DoEvents就可以更新。虽然WPF没有提供这样的功能,但是可以通过下面两种方式实现UI刷新:
(1)通过引入system.windows.forms.dll动态库就可以直接调用application.DoEvents。
(2)使用backgroundworker来实现异步更新UI,通过backgroundworker来执行需要消耗很长时间的工作,然后异步更新UI内容。实现原理是通过建立一个新的线程来执行消耗大量时间的工作,此线程执行完毕后,通过Dispatcher来更新UI,WPF会根据Dispatcher的优先顺序来更新UI。
在WPF的理论基础上,实现了基于WPF的3D仿真监测系统。WPF能够很好地实现三维仿真。基于WPF的3D仿真监测系统的分析有以下几点:
(1)WPF仿真计算的模拟和图形显示分离的策略便于开发人员对项目的开发,提高了系统的交互性。
(2)结果的显示在实体应变上以不同颜色呈现,形象直观,画面清晰。
(3)模型显示操作支持多种视图效果,可以全方位地预览和设计模型,同时支持上、下、左、右、前、后等运动操作,有利于实体的改进与优化。
(4)对于同样的3D模型不需要进行重新构建和导入,可以把之前导入的模型添加到模板,从而实现模型复用,有利于快速开发。
文中着重论述了在Windows环境下基于WPF的3D模型仿真的研究与实现,介绍了通过XAML技术实现界面与逻辑完全分离,可以使用少量的代码实现,开发过程简单,分析了构建3D仿真监测系统中涉及到的关键技术。该方法已应用于三维仿真监测系统中。结果表明,基于WPF的三维仿真系统的研究与实现具有很好的效果。
[1] 曲 啸.基于OpenGL的空间仿真可视化技术研究[D].西安:西安电子科技大学,2013.
[2] 彭晓军,李 焱,贺汉根.3Ds模型在虚拟现实几何建模中的应用[J].计算机仿真,2003,20(3):52-55.
[3] 郭成操.图形仿真加工系统的研究与开发[D].成都:四川大学,2003.
[4] MacVittie L A.XAML in a Nutshell[M].[s.l.]:O’Reilly Media,2006.
[5] 张景仁.WPF模拟三维消防场景的技术实现[J].武警学院学报,2009(6):87-89.
[6] Anderson C.WPF核心技术[M].朱永光,译.北京:人民邮电出版社,2009.
[7] 李 响.葵花宝典:WPF自学手册[M].北京:电子工业出版社,2010.
[8] 徐 宁,杜维刚.对 Windows Vista中新一代标记语言XAML的研究[J].电脑知识与技术,2007,1(3):774-775.
[9] Evjen B,Hanselman S,Rader D.ASP.NET 2.0高级编程特别版[M].北京:清华大学出版社,2007.
[10]Sells C,Griffiths I.Programming WPF[M].[s.l.]:O’Reilly Media,2007.
[11] Eisenberg R,Bennage C.Teach yourself WPF in 24 hours [M].American:SASM,2008.
[12] MacDonald M.Pro WPF in C#2010:windows presentation foundation in.NET 4[M].[s.l.]:Apress,2014.
[13] Andrade C,Livermore S,Meyers M,et al.Professional WPF programming:NET developmentwith the windows presentation foundation[M].[s.l.]:Wiley Publishing,2007.
[14]钟红梅,简兴祥,彭玛丽,等.三维可视化物探数据分析系统研究[J].硅谷,2014(22):41-42.
Research and Application of 3D Simulation System Based on WPF
SHANG Xu-ming,ZHANG Li-cheng
(School of Information Engineering,Chang’an University,Xi’an 710064,China)
In order to speed up the development of 3D model,the detection ability of the strain and intuitive display entity is realized by studying the WPF programming method based on XAML technology in Windows.The data of building the WPF model is transformed for acquisition data or into 3DMAX,then texture,covering vertices,triangles appearance of the model,and projection transformation technique is applied to realize 3D image for determining the model features.Multi-view model is realized by model combination,as well as viewpoint changes.Through the front frame display,the back frame drawing technology,the dynamic display fluency of three-dimensional model is realized.A kind of three-dimensional monitoring system is established finally.The method has been successfully applied in the 3D simulation and monitoring system,programming based on WPF not only improves the interactivity of the system through the strategy of separation between simulation calculation and graphics display,but also accelerates the development speed with easy realization by using XAML technology,which has a very good effect.
WPF;XAML;3D;monitoring system
TP302
A
1673-629X(2016)09-0039-04
10.3969/j.issn.1673-629X.2016.09.009
2015-12-04
2016-04-06< class="emphasis_bold">网络出版时间:
时间:2016-08-23
国家自然科学基金资助项目(51278058);中央高校基本科研业务费专项资金项目(310824151033)
尚旭明(1990-),男,助教,研究方向为数字图像处理。
http://www.cnki.net/kcms/detail/61.1450.TP.20160823.1359.050.html