基于VRML的居住环境仿真课程设计正文
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VRML的居住环境仿真
摘要
VRML(Virtual Reality Modeling Language)是一种用于三维造型和渲染的图形描述语言。
它将二维、三维图形和动画、音频和视频等多种效果融合在一起,使信息能够在一个具有空间感和实时感的三维空间展示。
同时它提供灵活有效的人机交互功能,使虚拟场景的真实性和交互性得到充分体现。
VRML是一种基于节点的图形建模语言,节点是它最基本也是最核心的组成部分,单个节点可以描述造型、颜色、光照、视点和传感器。
而事件和路由用于完成其交互功能。
VrmlPad编辑器用于编辑VRML源代码,它使得代码编辑变得简单而又层次分明,条理清楚。
浏览VRML虚拟空间需要使用浏览器插件,它用于接收VRML文件信息,在虚拟空间创建3D造型,并提供实时渲染的自动显示。
在本次课设中我设计了一个简单的居住环境,整个场景由草坪、房屋、树木、路径、亭子等部分构成。
基本形体的构建源于VRML中节点的变形和组装,交互功能的实现源于VRML中的传感器节点。
关键词:VRML,节点,交互,传感器
目录
1开发平台 (2)
2VRML中相关节点介绍 (3)
3三维造型的构建 (4)
3.1树木造型和道路造型 (5)
3.2直升机造型 (6)
3.3货车造型 (8)
3.4足球、球门及人物造型 (9)
3.5亭子造型 (10)
3.6房子造型 (11)
3.6.1魔方和桌椅 (12)
3.6.2沙发和茶几 (13)
3.6.3床和电视 (14)
4动画和交互的实现 (15)
5心得体会 (16)
6参考文献 (17)
1开发平台
操作系统:Windows 7旗舰版(X86)
处理器:Inter(R) Core(TM) i3-2330M CPU@ 2.20GHz 安装内存(RAM): 2.00 GB
系统类型: 32位操作系统
计算机名:wo-PC
工作组:WORKGROUP
编译软件:VrmlPad 2.0
使用程序语言:Vrml语言
浏览器:IE浏览器
浏览器插件:BS_Contact_VRML-X3D_62
录屏软件:屏幕录像专家V2013
论文编辑软件:Word 2003
公式编辑器:MathType 6.0
2VRML中相关节点介绍
VRML的基本几何造型节点有4个,分别是Box(长方体)节点、Cone(圆锥体)节点、Cylinder(圆柱体)节点和Sphere(球体)。
它们都是geometry域的节点型域值。
此外由于形体构建的节点还有点、线、面和拓展体节点等。
Box(长方体)节点、Cone(圆锥体)节点、Cylinder(圆柱体)节点和Sphere (球体)这四个基本节点都有一个Apperance(外观节点)的子节点,这个节点用于定义形体的颜色、光学特性、材质效果等外观效果。
Transform节点用于对基本造型进行平移、缩放和旋转三种空间变换。
DEF和USE节点用于实现形体定义和代码重用,Inline(内联)节点用于内联外部VRML 文件,实现场景的导入。
Text(文本造型)节点用于创建文本造型,它是一个没有厚度的平面造型,但也可以设置不同的外观和材料属性。
纹理节点用于定义造型表面图案,分图像纹理、像素纹理和电影纹理三种。
光源节点用于定义光照效果,VRML中提供点光源、平行光源和锥光源。
Background(背景)节点用于定义天空和地面背景,Viewpoint(视点)节点用于定义浏览者的观察位置和视野。
VRML还提供了各种传感器节点、插补器节点和Java脚本节点用于实现人机交互、动画和复杂的函数功能。
常用的传感器节点有:时间传感器节点、平面传感器节点、圆柱体传感器节点和接触传感器节点;常用的插补器节点有:位置插补器、旋转和朝向插补器、参数插补器等。
而Java脚本节点则用于引入Java程序,实现更复杂和强大的编码能力。
3三维造型的构建
在本次课程设计中我运用VRML语言对居住环境进行简单仿真,构建了道路、亭子、树木、直升机、货车、房屋及其内部设施等三维构型。
局部构型由单个VRML 文件编码完成,在单独的VRML文件中构型和进行渲染,从而降低编码的复杂度。
复杂场景的搭建则由这些局部构型通过内联,并经过适当的平移、缩放、旋转使整个场景具有清晰地层次和协调的比例。
下图1即为整个场景的一个远视图。
背景通过Background(背景)节点来定义,将天空设置成蓝色,将地面设置成绿色,所有局部构型放置于一个Box(长方体)节点之上,以便于实现替身行走时的重力检测。
图 1 全景俯视图
下面对场景中的各个局部造型作详细的说明和展示,并且简单说明造型的编码过程和运用到的VRML节点。
3.1树木造型和道路造型
图 2 树图 3 道路
如图2所示,树木的造型比较简单,用到的是三个经过不同程度放缩的Cone (圆锥)节点和Cylinder(圆柱体)节点,它们自上而下堆砌从而构成一棵树的构型。
位置的设定和尺寸放缩借助于Transform节点中的translation、scale和rotation三个域值设定。
在综合的场景中的树木由这个基本单元的内联组合和多次平移构成。
道路的构型如图3所示,它是用VRML中的拓展体(挤出造型)节点制作的,在挤出造型的基础上,运用Transform节点对其进行旋转平移最终完成在图1中整个道路的铺设。
3.2直升机造型
图 4 直升机
直升机的虚拟空间构型如图4所示,螺旋桨基本构型由三个变形的Sphere (球)节点和一个Cylinder(圆柱体)节点组合构成。
具体地,三片桨叶由Sphere (球)节点沿VRML坐标的X轴方向拉长,并且依次旋转120度角构成,再在其下方设置一个Cylinder(圆柱体)节点。
机身也是一个变形的Sphere(球)节点(沿VRML坐标的X轴方向拉长),尾翼同样也是两个Sphere(球)节点的组合,这是具体的放缩系数不同,旋转轴的定义也区别于螺旋桨。
最后是起落架的设计,它分为左右两支,相互对称。
这里用到的是Box(长方体)节点:长条的横着的Box(长方体)节点以及立着的相对短的连接机身的部分,位置的设定和尺寸放缩借助Transform节点完成。
3.3货车造型
图 5 货车
货车的空间构型如图5所示,其中旋转的车轮由一个单独的VRML文件完成,然后内联到货车形体的VRML文件中。
车轮基本构型由一个绕VRML坐标X轴旋转90度后的Cylinder(圆柱体)节点组合构成(车轮的图案采用了贴图的办法),其余三个车轮是第一个的平移和复制。
车头也是一个Cylinder(圆柱体)节点,它的另一半被嵌入到车厢中隐藏,车厢是一个简单的Box(长方体)节点,车厢和车头的材质通过在Appearance(外观)节点的Material(材质)节点中设置颜色、透明度、反射率等属性完成渲染的。
3.4足球、球门及人物造型
图 6 足球场
如图6所示,其中足球直接用Sphere(球)节点构造,再用Transform节点控制其位置。
球门为白色圆柱体的组合,很显然是Cylinder(圆柱体)节点的拼接,球门设置的难点在于每个Cylinder(圆柱体)节点的空间位置的调节,这是一个细致而费时的过程。
下面看一下两个运动的人物的构型,头部是一个大的黄色球体,眼睛是一对小的黑色球体,鼻子是一个小圆锥体,嘴巴是一个压扁的红球,脖子是一个圆柱,手臂、躯干、双腿均由圆柱构成。
其中躯干上的圆柱被沿VRML坐标的X轴方向拉宽。
所有这些形体均由Sphere(球)节点、Cylinder(圆柱体)节点和Cone (圆锥)节点结合Transform节点组装而成。
3.5亭子造型
图 7 亭子
如图7所示,即为亭子的单位构型,大场景中的亭子均由此造型内联得到。
亭子主体由两个左右对称的部分和在一起搭建的,那么只需说明其中一部分的构成即可。
首先底座用的是Box(长方体)节点,其次顶棚用的是Box(长方体)节点和Cone(圆锥)节点的镶嵌构型,立柱用Cylinder(圆柱体)节点制作。
其余的石桌和石凳均由不同的Cylinder(圆柱体)节点构成,并用Transform 节点设定位置。
3.6房子造型
图 8 房子
如图8所示,房子的构型分为墙体、门、栏杆、楼梯、国旗和内部布置家具。
墙体用的是挤出造型节点,首先定义截面图形然后向上挤出构成墙体。
门是一个Box(长方体)节点,材质纹理用到贴图实现,楼梯为Box(长方体)节点的堆叠。
栏杆的基本构型为两个Cylinder(圆柱体)节点组合的“T”字形,然后通过平移和旋转构造整个栏杆。
国旗旗杆用一个Cylinder(圆柱体)节点定义,旗面用Box(长方体)节点配合国旗贴图构造。
楼上设置了一张桌子、三张凳子和桌上的一个魔方,房子里面也有相应的家具,具体的介绍在下面的章节中仔细说明。
3.6.1魔方和桌椅
图 9 桌椅
如图9所示,为房子内部和屋顶放置的桌子和凳子。
首先看桌子的造型,桌面由一个半径大高度小的Cylinder(圆柱体)节点定义。
而桌腿用挤出造型节点制作,具体的,首先定义一个在VRML坐标的XZ平面的截面图形,然后定义用一串三维坐标点作为挤出路径从而完成桌腿的构造。
凳子的造型相对简单,就是不同Box(长方体)节点的拼接和组合。
最后就是一个333
⨯⨯的立方体魔方,魔方的基本单元是六个Box(长方体)节点构造的一个小立方体,然后通过平移、旋转、最终由27个这样的小立方体合成一个大的魔方构型。
魔方的每个面的颜色和透明度均不同,并且可以随时时间发生周期性变化,具体的实现方法在后面会提到。
3.6.2沙发和茶几
图 10 沙发图 11 茶几
如图10和图11所示,分别为沙发和茶几的构型。
沙发是一个比较概念性的造型设计,只用到了一个Box(长方体)节点和一个Cylinder(圆柱体)节点。
其中圆柱沿VRML坐标的X轴方向被拉成了椭圆柱,两个节点均经过了旋转变换,Box(长方体)节点还使用了平移变换使其与椭圆柱的相对位置恰当合理并且美观。
茶几分为三个部分:底座、茶几体、茶几面,均由Box(长方体)节点定义。
沙发和茶几的材质效果均由参数设定,沙发选择了相对比较亮的紫色,而茶几则选用了深的咖啡色,整体感觉还比较逼真。
3.6.3床和电视
图 12 床图 13 电视
如图12和图13所示,即为床和电视的构型。
首先床的造型由三个Box(长方体)节点和一个Cylinder(圆柱体)节点构成。
其中圆柱沿VRML坐标的X轴方向被拉成了椭圆柱,放置于床头作为一个枕头的造型。
靠背和床面用大红色渲染,床体设置为白色。
下面介绍电视的造型,电视的主体是一个面节点贴上电影纹理构造的;电视的下方的有两个绿色的按钮,方形为开始按钮,圆形为关闭按钮,分别用Box(长方体)节点和Cylinder(圆柱体)节点定义。
这两个按钮用于实现电视的开关,应用了接触传感器,具体介绍放到下一章节。
4动画和交互的实现
整个三维场景中有不少地方设置了动画和交互效果,在这里统一作说明。
比如图13中控制电视播放的电视下方的两个绿色按钮,与之造型关联分别定义了两个TouchSensor(接触传感器)节点用于接收鼠标对其的点击操作,当鼠标移动到这两个形体上时,鼠标变成手掌形状。
鼠标点击后,程序文件通过代码里设置的路由将这一事件传递到视频纹理节点从而激发视频的播放和停止。
又比如图4中直升机的造型,直升机上有两个动画效果:第一个是螺旋桨的旋转,第二个是直升机整体的飞行。
螺旋桨的旋转使用了TimeSensor(时间传感器)节点和OrientationInterpolator(转向插补器)节点,当时间变化时,时间传感器将转向插补器里设置的坐标变化(旋转)传递到直升机的螺旋桨上从而实现螺旋桨的旋转。
整个机体的运动使用的是TimeSensor(时间传感器)节点、PositionInterpolator (位置插补器)节点、TouchSensor(接触传感器)节点和OrientationInterpolator(转向插补器)节点,接触传感器接收鼠标的操作进而通过路由触发时间传感器,接着也是通过路由时间传感器将位置插补器和转向插补器里坐标变化和旋转变化传递到直升机上,从而实现直升机的飞行。
图5中车轮和货车整体的运动与直升机类似,这里就不赘述了。
图6中的足球的运动用TimeSensor(时间传感器)节点和PositionInterpolator(位置插补器)节点实现,人物的运动涉及整体、胳膊和腿部,动画分别定义,原理与直升机一致。
图8中门的造型是可以滑动的,它运用的是PlaneSensor(平面传感器)节点,它可以将鼠标的运动传递到门上,从而实现门的滑动。
图9中桌子上魔方的旋转与图4中的螺旋桨的旋转的实现方法,只是每个面的颜色和透明度的变化运用了ColorInterpolator(颜色插补器)节点、ScalarInterpolator (数值插补器)节点。
5心得体会
本次课程设计是一次相对自由的创作,也是对所学知识的一次检验和加强。
万丈高楼平地起,整体仿真效果的实现必须从每一个细节做起。
课程设计的初期就是局部场景的构造,每一个节点的设置,甚至是每一个参数的设置都学要反复调整,这是一项反复而繁杂的工程足以考验一个人的耐心。
做到瓶颈之处总是焦头烂额,这时急是徒劳的,倒不如出去散个步稍微放松一下,换一个思路,调整好后重整旗鼓往往能顺利解决一些难题。
我认为,在这学期的课程设计中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。
更重要的是,掌握了很多学习的方法。
而这也是最实用的,真的是受益匪浅。
要面对社会的挑战,只有不断的学习、实践,再学习、再实践。
这对于我们的将来也有很大的帮助。
以后,不管有多苦,我想我们都能变苦为乐,找寻有趣的事情,发现其中珍贵的事情。
就像很多其他的事情一样,课程设计使人变得更加成熟,做事更加细致。
回顾起此课程设计,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说得是乐在其中,但是可以学到很多很多的东西。
不仅巩固了以前所学过的知识,而且学到了很多在书本上所没有学到过的知识。
通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。
在设计的过程中遇到问题,可以说得是困难重重,但可喜的是最终都得到了解决。
此次设计也让我明白了思路即出路,有什么不懂不明白的地方要及时请教或上网查询,只要认真钻研,动脑思考,动手实践,就没有弄不懂的知识,收获颇丰。
6参考文献
[1] 申蔚(第一版).虚拟现实技术[M].北京:清华大学出版社,2009.
[2] 张杰(第一版).VRML2.0交互式三维图形编程[M].广东:汕头大学出版社,1999.
[3] 张金钊(第二版). VRML编程实训教程.北京:北方交通大学出版社, 2008.
[4] 陆昌辉(第一版).VRML入门与提高.北京:北京大学出版社,2003.
[5] 吴小华. VRML 与Java 编程. 北京:国防工业出版社,2002.。