资源描述
2020/5/11,计算机图形学,1,第10章VRML环境下图形系统的设计,2020/5/11,计算机图形学,2,10.1虚拟现实简介,它通过计算机创建一种虚拟环境(VirtualEnvironment),通过视觉、听觉、触觉、味觉、嗅觉等作用,使用户产生和现实中一样的感觉,从而达到身临其境的感觉,并可实现用户与该环境直接进行交互。虚拟现实技术有3个基本特征:沉浸感,交互感,构想。,2020/5/11,计算机图形学,3,10.2VRML概述,VRML(VirtualRealityModelingLanguage)即虚拟现实建模语言。该语言就是通过创建一个虚拟场景以达到现实中的效果。VRML被广泛应用于Internet上创建虚拟三维空间,利用VRML可以随意创建任何虚拟的物体,像建筑物、城市、山脉、星体等对象。当然也可以在虚拟空间中添加声音、动画,使之更加生动,更接近现实。,2020/5/11,计算机图形学,4,10.2VRML概述,用cortvrml插件在Microsoft的IE6.0浏览器中可以浏览VRML网页。Walk的浏览方式为模拟人在虚拟三维世界中的走动和转向等Fly的浏览方式为模拟人在虚拟三维世界中的飞行和转向等Study的浏览方式为在浏览者的面前以不同的方向和不同的角度来旋转一个或多个漂浮在空间中的对象Plan的浏览方式为模拟在虚拟三维世界中的一个平面内的平移。Pan的浏览方式为模拟在三维世界中的垂直的上下或者左右的平移。,2020/5/11,计算机图形学,5,10.2VRML概述,Turn的浏览方式为改变浏览者的视角Roll的浏览方式为在虚拟三维世界中的一个垂直平面上实现顺时针或者逆时针方向的视角变化。Goto的浏览方式为走近你所要观察的对象View试点控制。Restore视点控制。,2020/5/11,计算机图形学,6,10.2VRML概述,在浏览器窗口中的任意位置单击鼠标右键便会弹出如图10.2所示的菜单,图10.2cortvrml的弹出菜单,2020/5/11,计算机图形学,7,10.3VRML基本语法,10.3.1VRML的通用语法结构VRML文件是要创建的空间的文本性描述,VRML的通用语法由VRML文件来约定。VRML文件对语法有以下几条约定:每个VRML文件都必须以#VRMLV2.0utf8作为文件头。文件中的任何节点的第一个字母都要大写节点的域都必须位于括号里面。,2020/5/11,计算机图形学,8,10.3.2VRML的基本概念,1.节点节点用来描述造型和造型的属性。2.域和域值域定义节点的属性,域值是对属性的具体描述。3.事件事件是按照指定的路由从一个节点发往另一个节点的消息。4.路由5.交互和脚本,2020/5/11,计算机图形学,9,10.3.3VRML空间计量单位,1)长度单位长度单位也叫VRML单位,简称单位,用来计量造型的尺寸和位置。2)角度单位角度单位是用来计量坐标旋转角度的大小的。在VRML中,角度单位通常使用的是弧度制。,2020/5/11,计算机图形学,10,10.3.4VRML的节点简介,1.外形节点Shape在创建一个造型时,必须使用Shape节点,它有两个域,分别为appearance域和geometry域。Appearance节点将定义造型外观的颜色和纹理。geometry域值是一个定义空间造型几何尺寸大小的造型节点,它包括Box、Cylinder、Cone、Sphere等基本的几何节点,2020/5/11,计算机图形学,11,10.3.4VRML的节点简介,2.组节点GroupGroup节点有5个域,分别是children域、bboxCenter域、bboxSize域、addChildren域和removeChildren域。Group节点是将基本造型节点组织在一起,编成一组中的多个节点将相互交迭,从而创建复杂的空间造型,编组后的节点可以作为一个单独的对象来进行各种操作,包括和其他的对象一起编成一个新的组。,2020/5/11,计算机图形学,12,10.3.5域,域有两种类型:单值类型和多值类型。单值类型的命名以“SF”开头,只包含单一的值,像一个数字、一种颜色、一个向量等。多值类型的命名以“MF”开头,包含多个值,像一组数字的列表、一组颜色的列表。例:SFFloat和MFFloat一个SFFloat域含有一个ANSIC格式的单精度浮点数。一个MFFLoat域含有零个或多个ANSIC格式的单精度浮点数。即允许空白,不赋任何值。,2020/5/11,计算机图形学,13,10.4在场景中添加几何体,10.4.1Shape节点对几何体的封装Shape节点对几何体的封装是通过geometry域来实现的。即geometry+几何体造型节点。不仅如此,Shape节点还可以实现对文本造型的封装。,2020/5/11,计算机图形学,14,10.4.2添加长方体,在场景中添加一个立方体造型要用到Box节点,Box节点是创建一个以坐标原点为中心的长方体的节点,有一个域,即size域。size域的域值类型为SFVec3f类型,size域值为长方体的长、宽、高的大小,通过改变长、宽、高的大小可以创建不同的长方体,如果长、宽、高的大小相同,则该长方体是立方体。,2020/5/11,计算机图形学,15,10.4.3添加球体,在场景中添加球体造型要用到Sphere节点,Sphere节点创建的是一个以坐标原点为中心的球体,有一个域,即radius域。域值类型为SFFloat类型,球体的半径由域radius的域值确定,radius的默认域值为1.0个单位。,2020/5/11,计算机图形学,16,10.4.4添加圆柱体,在场景中添加圆柱体造型要用到Cylinder节点,Cylinder节点创建的是一个以坐标原点为中心,由底面(bottom),顶面(top)和侧面(side)三个部分组成的圆柱体。该节点有5个域,即radius域、height域、bottom域、top域和side域。,2020/5/11,计算机图形学,17,10.4.5添加圆锥体,先看一个在三维空间场景中添加圆锥体的实例。图10.6在场景中添加的圆锥体造型,2020/5/11,计算机图形学,18,10.4.5添加圆锥体,在场景中添加圆锥体造型要用到Cone节点,Cone节点创建的是一个以空间坐标系y轴为对称轴,原点为中心的圆锥体。该圆锥体由两部分组成:底面(bottom)和锥面(side)。该节点有4个域,即bottomRadius域、height域、side域和bottom域,2020/5/11,计算机图形学,19,10.4.6添加文本,在场景中添加文本是通过使用Shape节点实现的,将Text节点作为geometry域的域值,下面看一个在场景中添加文本造型的例子。图10.7在场景中添加文本,2020/5/11,计算机图形学,20,10.5几何体的几何变换,10.5.1理解VRML空间坐标系是VRML场景创建的一个很重要的依据,这里的坐标系由x、y、z三个坐标方向构成,其方向可以用右手规则来确定。有了父坐标系的嵌套,就可以在任何地方创建自己想要的造型,这些造型通过坐标系的嵌套,组合在一起构成各种很复杂的VRML场景,从而形成多姿多彩的三维世界。,2020/5/11,计算机图形学,21,10.5.1理解VRML空间,1.平移坐标系的理解平移坐标系是通过对Transform节点的translation域的使用创建的一个新的子坐标系,每次平移通过Transform节点的translation域指定平移距离,平移距离是指新的子坐标系原点和父坐标系原点的分别在x、y、z三个坐标轴的距离(这里的距离是以VRML单位度量的)。新的子坐标系确定后,要在新坐标系创建的造型的位置也就被确定了。,2020/5/11,计算机图形学,22,10.5.1理解VRML空间,2.旋转坐标系的理解(1)确定旋转坐标系的两个因素。一是旋转轴。二是旋转角度。(2)坐标系的旋转方向。3.缩放坐标系的理解缩放坐标系是通过对Transform节点的scale和scaleOrientation域的使用而创建的新的子坐标系。,2020/5/11,计算机图形学,23,10.5.3平移几何体,几何体的平移实际上是坐标系的平移,而将几何体平移实际上就是通过使用节点Transform的translation域,相对原坐标系形成新的子坐标系,再在子坐标系中创建所要平移的几何体就达到了我们平移几何体的目的。,2020/5/11,计算机图形学,24,10.5.4旋转几何体,旋转几何体是通过使用节点Transform的rotation和center域,指定旋转轴或者旋转点、旋转角度,形成新的旋转子坐标系,再在子坐标系中创建需要的造型。1.绕轴的旋转Transform节点的rotation域设定父子坐标系原点的连线作为旋转轴,同时还设定了旋转的角度。,2020/5/11,计算机图形学,25,10.5.4旋转几何体,2.围绕中心的旋转有时候单一地围绕某个轴旋转来创建造型并不很方便,通过使用Transform节点的center域,就可以使几何体围绕某个中心点旋转,这种旋转有时会比围绕轴旋转更自然灵活。,2020/5/11,计算机图形学,26,10.5.5缩放几何体,1.在不同方向上的缩放通过对Transform节点的scale和scaleOrientation域的使用,可以沿任何方向缩放需要的造型2.围绕中心点的缩放使用Transform的center域可以指定一个缩放中心,使要创建的造型根据需要相对该点来进行缩放,像旋转中心一样,围绕点的缩放有时会对造型的创建提供比在不同方向上的缩放更大的方便。,2020/5/11,计算机图形学,27,10.6真实感场景创建,10.6.1光照在VRML中添加并控制光照是通过PointLight节点、DirectionalLight节点和SpotLight节点来实现的。VRML通过对物体表面的明暗分布的计算,使物体同环境产生明暗对比,这样,物体看起来就像是在发光。,2020/5/11,计算机图形学,28,10.6.1光照,1.PointLight节点PointLight节点生成一个点光源,即生成的光线是向四周发散的。2.DirectionalLight节点DirectionalLight节点生成一个平行光源,即生成的光线是平行向前发射的。3.SpotLight节点SpotLight节点创建了一个锥光源,即从一个光点位置呈锥状向一个特定的方向照射。,2020/5/11,计算机图形学,29,10.6.2纹理,大多数的VRML浏览器所支持的表面材质的几种图像格式为JPEG、MPEG、GIF和PNG,被称为VRML材质贴图文件的标准格式。在VRML中,用于指定材质表面贴图的节点主要有ImageTexture(图片纹理节点)、MovieTexture(影象纹理节点)、PixeTexture(像素纹理节点)。下面分别介绍这三种节点。,2020/5/11,计算机图形学,30,10.6.2纹理,1.ImageTexture节点ImageTexture是图像纹理节点,指定了纹理映射属性,通常作为Appearance节点的texture域的域值。,2020/5/11,计算机图形学,31,10.6.2纹理,例10.17,我们为正方体贴上了黄山松的图片,如图10.16所示。图10.16表面贴上纹理图的正方体,2020/5/11,计算机图形学,32,10.6.2纹理,2.MovieTexture节点PixeTexture节点是像素纹理节点,用来指定纹理映射属性。从图10.17中可以看出不同像素部分颜色的灰度程度的差别。,图10.17不同灰度纹理,2020/5/11,计算机图形学,33,10.6.3雾化,VRML允许在空间添加大气效果,通过设定大气的状态增加场景的朦胧效果。如果场景中按远近有一系列的物体,空间距离只能影响它们在浏览器中的大小而不能体现现实中因远近引起的清晰度的差异。如果在场景中添加雾化效果,这一差异就能得到体现,从而使造型显得更加逼真。,2020/5/11,计算机图形学,34,10.6.3雾化,下面给出雾化的一个例子,结果如图10.18所示。图10.18加入雾化效果的场景图,2020/5/11,计算机图形学,35,10.7一个VRML虚拟漫游系统的设计,10.7.1物体模型的设计1.Collision节点Collision组节点观测观察者和组中的造型发生碰撞。,2020/5/11,计算机图形学,36,10.7.1物体模型的设计,2.椅子的设计如下:先设计座位部分,为一Box节点设计椅子的腿和靠背都是长方体,代码和座位部分类似,就不详细列出了设计椅子的两个扶手,扶手是由三个长方体组合成的,所采用的节点为Box。,图10.19椅子的模型,2020/5/11,计算机图形学,37,10.7.1物体模型的设计,3.桌子桌面为一长方体,采用Box节点,首先是外侧的挡板,为一长方体,柜子的挡板和手柄都是简单的长方体,代码和外侧挡板类似。设计好之后就可以通过坐标的变换把右腿也构造出来,从而构造出桌子,图10.20桌子的模型,2020/5/11,计算机图形学,38,10.7.1物体模型的设计,4.显示器显示器的模型如图10.21所示。图10.21显示器的模型,2020/5/11,计算机图形学,39,10.7.2漫游场景的最终生成,要将物体模型组合起来,需要将模型的文件都包含到场景文件中,这需要用到Inline节点。漫游场景的示意图如图10.23所示。,2020/5/11,计算机图形学,40,10.7.2漫游场景的最终生成,首先要设计浏览者的视角,使得虚拟人出现在房间内的位置。为了能将整个场景都照亮,需要在房间中设置光源,这里采用点光源。生成房子的地板为一长方体,并给它贴上图片纹理。天花板也为一矩形,墙壁也为简单的矩形,不使用贴图。,2020/5/11,计算机图形学,41,10.7.2漫游场景的最终生成,窗户主要由一些长方体组成框架,然后在墙壁的外面放上一张图片模拟窗外的景色,从而不需要制造玻璃模型。长方体的框架之间主要是先计算好坐标,然后构成所需要的窗户模型,这里只给出窗外的风景画的代码。门主要由两个长方体组成,这里不详细介绍。要注意的是两个长方体之间要留有一些空隙,从而产生门的观感。,2020/5/11,计算机图形学,42,10.7.2漫游场景的最终生成,设计完房间的构架,下面就是往房间中加入前面构造的桌子、电脑等模型,这要使用Inline节点,这里主要是计算好坐标,把物体放在适当的位置。添加完所有的模型,则整个虚拟场景即构造完毕。,
展开阅读全文