空间信息可视化有与虚拟现实实验含代码_第1页
空间信息可视化有与虚拟现实实验含代码_第2页
空间信息可视化有与虚拟现实实验含代码_第3页
空间信息可视化有与虚拟现实实验含代码_第4页
空间信息可视化有与虚拟现实实验含代码_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

空间信息可视化有与虚拟现实

实验报告2017年5月成绩评定表目录VRML编程环境熟悉„„„„„„„„„„„„„„„„„„„4VRML绘制基本几何模型„„„„„„„„„„„„„„„„„7VRML空间变换与群节点设计„„„„„„„„„„„„„„„16VRML绘制复杂造型„„„„„„„„„„„„„„„„„„„20VRML环境设计与视点控制„„„„„„„„„„„„„„„„22VRML动画交互„„„„„„„„„„„„„„„„„„„„„28结课作业„„„„„„„„„„„„„„„„„„„„„„„37实验一VRML编程环境熟悉智能自动完成在编辑VRML文本时能够根据上下文关系及其在场景图中的位置给出一个包含合适的VRML标识文本的列表以供选择。这些VRML标识文本关键字关键字、PROTO原型定义名称、节点名称、域的名称、域类型、SFNode节点和MFNode节点的子域、标准VRML脚本对象及其属性和方法的名称。动态错误检测。场景图树的可视化显示节点的代码能够根据场景图的结构展开或收起以方便编辑,可以在结构视图中选择要编辑的节点或域。多文档同时编辑在同一个VrmlPad中同时打开多个文件以便进行文件之间的复制、剪切、粘贴的操作,或方便的查找替换文本。同一个文件也可以使用两个窗口来浏览同一文件的不同部分。根据当前打开的文件能够很容易的找到与之相关的文件(例如Inlines、Anchor、EXTERNPROTOs)并进行编辑。整合脚本调试器可以使用此整合的脚本调试器在内嵌的vrmlscript脚本中,或在用Cortona控件插入VRML的网页中查找并修复。这个调试器有这些控制脚本的执行的功能:可以暂停脚本的执行,运行至指定行,设置断点,一步步的运行脚本。监视脚本的数据状态:当前调用的堆栈;相关的前后代码中变量,数组,对象;计算包含这些数据的表达式。在调试阶段修改变量,数组,或对象的值。在调试阶段添加并测试新的脚本代码。使用QuickWatchwindow(快速监视窗口)检验或修改变化的数据。使用CodeTips(代码上的弹出提示)快速监视脚本中的变量值。VrmlPad可以提示用户语法、值类型的错误或警告。提供域值是否在适当范围中。可以校验是否有重复的节点定义,是否有不匹配的域名或路由。网络三维技术的出现最早可追朔到VRML,VRML(VirtualRealityModelingLanguage)即虚拟现实建模语言。VRML开始于20世纪90年代初期。1994年3月在日内瓦召开的第一届WWW大会上,首次正式提出了VRML这个名字。1994年10月在芝加哥召开的第二届WWW大会上公布了规范的VRML1.0草案。1996年8月在新奥尔良召开的优秀3D图形技术会议-Siggraph\'96上公布通过了规范的VRML2.0第一版。它在VRML1.0的基础上进行了很大的补充和完善。它是以SGI公司的动态境界MovingWorlds提案为基础的。1997年12月VRML作为国际标准正式发布,1998年1月正式获得国际标准化组织ISO批准简称VRML97°VRML97只是在VRML2.0基础进行上进行了少量的修正。VRML规范支持纹理映射、全景背景、雾、视频、音频、对象运动、和碰撞检测--一切用于建立虚拟世界的所具有的东西。但是VRML并没有得到预期的推广运用,不过这不是VRML的错,要知道当时14.4k的modems是普遍的。VRML是几乎没有得到压缩的脚本代码,加上庞大的纹理贴图等数据,要在当时的互连网上传输简直是场噩梦。1998年。VRML组织把自己改名为Web3D组织,同时制订了一个新的标准,Extensible3D(X3D),到了2000年春天,Web3D组织完成了VRML到X3D的转换。X3D整合正在发展的XML、JAVA、流技术等先进技术,包括了更强大、更高效的3D计算能力、渲染质量和传输速度。在此期间,一场Web3D格式的竞争正在进行着。在去年SIGGRAPH上,展示了超过30种Web3D格式。当然,只会有其中的一小部分能够脱颖而出最终生存下来。在本文后半部分将会对一些有实力且目前已经取得了一定市场的格式作介绍。最近一些厂商瞄准了一个市场,就是从二维图像生成三维物体。一般都是通过拍摄一个物体的多个方向,再由特殊的软件转化为3D网格。象viewpoint、RealVIZ、Immersiono尽管出现了如此之多的解决方案,难道让我们每个人都跳上了Web3D的列车了吗?一些困难和障碍仍然存在。首先是没有统一的标准。每种方案都使用不同的格式和方法。Flash能够在今天大行其道是因为它是唯一的,JAVA在各平台得到运用也因他是唯一的。没有标准,3D在Web上的实现过程还将继续挣扎。另外插件的问题也是一个困绕。几乎每个厂商开发的标准都需要自己插件的支持,这些插件从几百K到几兆不等,在带宽不理想的条件下必然限制了一部分人的使用热情。VRML创作工具很多是“所见即所得”式的,通过图形界面可以方便地创作虚拟境界,但VRML不仅仅是普通的三维设计,尽管这些工具很容易上手,却往往屏蔽掉了VRML标准的具体细节,因为如果想深入掌握VRML,还需要全面了解节点、域、检测器等技术细节,而达成此目的的最好方法就是用编写文本文件的方式创作VRML境界。VRML文件名全称为:***.wrl或***.wrz。可由文本编辑器或由VrmlPad编写。VRML文件可由VRML浏览器直接运行,也可装插件用IE浏览器运行。本人用的BS_ConTact_VRML-X3D_62.exe,装好后可直接运行本地文件,也可在开始菜单设置(开始--程序--BSContactVRMLX3D--MakeBSContactVRMLyourdefaultviewerinIE)即可通过IE浏览器访问网上的VRML文件了。VRML是“VirtualRealityModelingLanguage”的缩写形式,意思是“虚拟现实造型语言”。熟悉WWW的人们都知道,受HTML语言的局限性,VRML之前的网页只能是简单的平面结构,就算Java语言能够为WWW增色不少,但也仅仅停留在平面设计阶段,而且实现环境与参与者的动态交互是非常烦琐的。于是,VRML就应运而生了。第一代Web是以HTML为核心的二维浏览技术,第二代Web是以VRML为核心的三维浏览技术。第二代Web把VRML与HTML、Java、媒体信息流等技术有机地结合起来,形成一种新的三维超媒体WeboRML被称为继HTML之后的第二代Web语言,它本身是一种建模语言,也就是说,它是用来描述三维物体及其行为的,可以构建虚拟境界(VirturalWorld),可以集成文本、图像、音响、MPEG影像等多种媒体类型,还可以内嵌用Java、ECMAScript等语言编写的程序代码。VRML的基本目标是建立因特网上的交互式三维多媒体,基本特征包括分布式、三维、交互性、多媒体集成、境界逼真性等。VRML的出现使得虚拟现实象多媒体和因特网一样逐渐走进我们的生活,简单地说,以VRML为基础的第二代万维网二多媒体+虚拟现实+因特网。第一代万维网是一种访问文档的媒体,能够提供阅读的感受,使那些对Windows风格的PC环境熟悉的人们容易使用因特网,而以VRML为核心的第二代万维网将使用户如身处真实世界,在一个三维环境里随意探究因特网上无比丰富的巨大信息资源。每个人都可以从不同的路线进入虚拟世界,和虚拟物体交互,这样控制感受的就不再是计算机,而是用户自己,人们可以以习惯的自然方式访问各种场所,在虚拟社区中“直接”交谈和交往。事实上,目前采用VRML技术取得成功的案例已经很多,例如探路者到达火星后的信息就是利用VRML在因特网上即时发布的,网络用户可以以三维方式随探路者探索火星。VRML的工作原理:VRML是一种用在Internet和Web超链上的,多用户交互的,独立于计算机平台的,网络虚拟现实建模语言。虚拟世界的显示、交互及网络互连都可以用VRML来描述。VRML的设计是从在WEB上欣赏实时3D图象开始的。VRML浏览器既是插件,又是帮助应用程序,还是独立运行的应用程序,它是传统的虚拟现实中同样也使用的实时3D着色引擎。这使得VRML应用从三维建模和动画应用中分离出来,在三维建模和动画应用中可以预先对前方场景进行着色,但是没有选择方向的自由。VRML提供了6+1度的自由,用户可以沿着三个方向移动,也可以沿着三个方向旋转,同时还可以建立与其它3D空间的超链接。因此VRML是超空间的。VRML定义了一种把3D图形和多媒体集成在一起的文件格式。从语法角度看,VRML文件是显式地定义和组织起来的3D多媒体对象集合;从语义角度看,VRML文件描述的是基于时间的交互式3D多媒体信息的抽象功能行为。VRML文件描述的基于时间的3D空间称为虚拟境界(VirtualWorld),简称境界,所包含的图形对象和听觉对象可通过多种机制动态修改。VRML文件可以包含对其他标准格式文件的引用。可以把JPEG、PNG和MPEG文件用于对象纹理映射,把WAV和MIDI文件用于在境界中播放的声音。另外,还可以引用包含Java或ECMAScript代码的文件,从而实现对象的编程行为。所有这些都是由其他标准提供的,之所以在VRML中选用它们,是因为它们在Internet上的广泛应用。VRML97规范描述了它们在VRML中的用法。VRML使用场景图(SceneGraph)数据结构来建立3D实境,这种数据结构是以SGI开发的OpenInventor3D工具包为基础的一种数据格式。VRML的场景图是一种代表所有3D世界静态特征的节点等级:几何关系、质材、纹理、几何转换、光线、视点以及嵌套结构。几乎所有生产厂商,无论是CAD、建模、动画、VR,还是VRML,他们的结构核心都有场景图。境界中的对象及其属性用节点(Node)描述,节点按照一定规则构成场景图(SceneGraph),也就是说,场景图是境界的内部表示。场景图中的第一类节点用于从视觉和听觉角度表现对象,它们按照层次体系组织起来,反映了境界的空间结构。另一类节点参与事件产生和路由机制,形成路由图(RouteGraph),确定境界随时间的推移如何动态变化。VRML文件的解释、执行和呈现通过浏览器实现,这与利用浏览器显示HTML文件的机制完全相同。浏览器把场景图中的形态和声音呈现给用户,这种视听觉呈现即所谓的虚拟世界(境界)。用户通过浏览器获得的视听觉效果如同从某个特定方位体验到的,境界中的这种位置和朝向称为取景器(Viewer)。VRML的访问方式是基于客户/服务器模式的。其中服务器提供VRML文件及支持资源(图像、视频、声音等),客户端通过网络下载希望访问的文件,并通过本地平台上的VRML浏览器交互式地访问该文件描述的虚拟境界。由于浏览器是本地平台提供的,从而实现了平台无关性。下图描述了VRML的工作方式。VRML是一个开发标准,为了加强协作,避免技术重复和市场冲突,而鼓励其他技术引用VRML或成为VRML的一部分。与VRML关系密切的三项技术是Java3D、MPEG-4和Chrome。其中,Java3D和VRML都把3DWeb作为关键应用对象,前者的优势在于程序设计,后者的优势在于场景构造,二者在可编程性3DWeb应用方面密切合作。MPEG-4面向基于内容的交互式视讯应用,可以为VRML提供流技术、压缩和音响同步技术,而MPEG-4用VRML来描述3D内容。在2D页面集成方面,可以探索VRML和Microsoft的Chrome协作的可能性。VRML的应用:VRML在电子商务、教育、工程技术、建筑、娱乐、艺术等领域的广泛应用,将会促使它迅速发展,并成为构建网络虚拟现实应用系统的基础。虚拟现实作为一种全新的人机接口技术,必须研究用户和计算机之间的协调关系问题,这样一个问题只有通过大量的使用才能逐步解决,VRML以因特网作为应用平台,最有希望成为构筑虚拟现实应用的基本构架。实验二,VRML绘制基本几何模型平移几何体:几何体的平移实际上是坐标系的平移,而将几何体平移实际上就是通过使用节点Transform的translation域,相对原坐标系形成新的子坐标系,再在子坐标系中创建所要平移的几何体就达到了我们平移几何体的目的。旋转几何体:旋转几何体是通过使用节点Transform的rotation和center域,指定旋转轴或者旋转点、旋转角度,形成新的旋转子坐标系,再在子坐标系中创建需要的造型。绕轴的旋转Transform节点的rotation域设定父子坐标系原点的连线作为旋转轴,同时还设定了旋转的角度。围绕中心的旋转有时候单一地围绕某个轴旋转来创建造型并不很方便,通过使用Transform节点的center域,就可以使几何体围绕某个中心点旋转,这种旋转有时会比围绕轴旋转更自然灵活。缩放几何体:在不同方向上的缩放通过对Transform节点的scale和scaleOrientation域的使用,可以沿任何方向缩放需要的造型围绕中心点的缩放使用Transform的center域可以指定一个缩放中心,使要创建的造型根据需要相对该点来进行缩放,像旋转中心一样,围绕点的缩放有时会对造型的创建提供比在不同方向上的缩放更大的方便。VRML绘制基本几何模型,我们创建了第一个虚拟境界,涉及到如何用几何体构建境界,以及如何设定几何体的颜色与材质。尽管这个由方块、圆锥和球体组成的场景图比较简单,但已经反映了VRML的基本功能。当然,除了可用鼠标改变视点外,这还只是一个静态世界,在下一节,我们将引进VRML的动态特征。接下来我们把方块所在的Transform节点复制三份,并把各自包含的几何形状依次定义为方块、球体和圆锥:Group{children[Transform{translation500children[Shape{ geometryBox{}#立方体}]}Transform{translation000children[Shape{...geometrySphere{}#球体}]}Transform{translation-500children[Shape{...geometryCone{}#圆锥体}]#endofGroupchildren你可能已经感觉到,VRML文件中有许多括号(花括号“{}”和方括号“[]”),所以务请注意括号的配对,建议采用本教程的缩进风格。注意上面的VRML文件中三个Transform节点的平移量是不同的,因而三个几何体的位置也就不同。另外,还可以修改三个几何体的颜色:球面Sphere为绿色(010),圆锥为蓝色(010)。最后,为了以后引用方便,分别给这三个Transform节点指定一个名称:DEFboxTransform{...}DEFsphereTransform{...}DEFconeTransform{...}这个VRML场景的完整代码是:#VRMLV2.0utf8Group{children[DEFboxTransform{translation4.500children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}DEFsphereTransform{translation000children[Shape{appearanceAppearance{materialMaterial{diffuseColor010}}geometrySphere{}}]}DEFconeTransform{translation-4.500children[Shape{appearanceAppearance{materialMaterial{diffuseColor001geometryCone{}}]}]#endofGroupchildren}把此文件保存为HelloWorld4.wrl,用VRML浏览器打开这个文件,通过调整视点从多个方位浏览自己的作品。在这个场景中,红色的立方体位于屏幕的中心,它的中心坐标为{000}若想把它移动一个位置,可以通过为它外套一个Transform(变换节点)来实现:Transform{translation500#平移向右5米children[Shape{appearanceAppearance{materialMaterial{}}geometryBox{}}]}在VRML中,Transform节点除了可以引进平移、旋转和缩放变换以外,其作用和Group节点的作用一样。把Transform节点的translation域(平移)设置为500,意味着Transform节点所在的坐标系相对于其上层坐标系向右平移(即X轴方向)5个单位,在其它两个方向不移动,VRML的距离单位是米,5个单位相当于5米。我们第三个场景的完整代码是:#VRMLV2.0utf8Group{children[Transform{translation500children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}}]}]}下面定义立方体的外观,这只需改变Shape节点的appearance域(外观),appearance域是一个Appearance节点,此Appearance节点的material域(材质)定义为一个Material节点:appearanceAppearance{materialMaterial{}这样,上面的Shape节点变成了:Shape{appearanceAppearance{materialMaterial{}}geometryBox{}}这是定义几何造型的基本格式。现在立方体还是白色的,这是因为其中的Material节点采用的还是缺省值,下面修改它的diffuseColor域(漫射色)VRML的颜色说明采用的是RGB颜色模型,所以要定义红色的立方体,漫射色应该是{100},三个数字依次表示红色、绿色和蓝色,取值范围都是0到1:materialMaterial{diffuseColor100}现在我们生成了第二个场景,完整的代码是:#VRMLV2.0utf8Group{children[Shape{appearanceAppearance{materialMaterial{diffuseColor100#红色}}geometryBox{}}按照惯例,我们以〃Hello,World!〃作为我们的第一个虚拟境界,它由立方体、圆锥和球体组成,你可能已经注意到,VRML的标志正是由这三个几何形状构成的。输入的第一行文字是:#VRMLV2.0utf8这是VRML文件的标志,所有2.0版本的VRML文件都以这行文字打头,VRML97是由VRML2.0版修订而成的,符合VRML97规范的VRML文件也以这行文字打头。其中“#”表示这是一个注释。而utf8表示此文件采用的是utf8编码方案,这在标准中有详细说明。先加入一个Group节点(组节点):Group{组节点的花括号之内的所有内容视为一个整体,利用组节点可以把虚拟场景组织成条理清晰的树形分支结构。下面定义组节点的children域(孩子域):children[在children后的方括号内定义Group节点的所有孩子对象,第一个孩子是一个Shape节点(形态节点),它描述一个几何形状及其颜色等特征:Shape{在Shape节点内定义一个几何体Box(方盒节点):geometryBox{}注意我们没有为Box定义任何域,这意味着它的尺寸和坐标位置等特性取缺省值(单位立方体)。随后补齐各右括号:}]}至此,我们已经成功地制作了第一个虚拟境界,把它保存为HelloWorld.wrl,面是完整的文件:#VRMLV2.0utf8Group{children[Shape{geometryBox{}#一个立方体}]}利用Dreamweaver的InsertPlugin工具或者直接在网页的HTML源文件中插入一行<embedsrc="HelloWorld.wrl"width="600"height="400"></embed>打开浏览器,你会看到一个白色的立方体,尽管不太好看,但你还是可以通过改变视点位置从不同方位观察它,初步体验“三维交互”的感觉。如果你使用IE浏览器,却看不到下面的图形,那么请下载此软件并安装之。VRML创作工具很多是“所见即所得”式的,通过图形界面可以方便地创作虚拟境界,但VRML不仅仅是普通的三维设计,尽管这些工具很容易上手,却往往屏蔽掉了VRML标准的具体细节,因为如果想深入掌握VRML,还需要全面了解节点、域、检测器等技术细节,而达成此目的的最好方法就是用编写文本文件的方式创作VRML境界。本教程提供了六个典型例子,这些例子并不复杂,也不精彩,但涵盖了VRML的关键内容。在开始创作之前,应作好下面的准备。文本编辑器 :随便你喜欢的文本编辑器,如Win95下的NotePad,Dos下的Edit等等。VRML浏览器:若用的Web浏览器是Netscape4.0以下版本,可下载CosmoPlayer();若用的是Netscape4.0或更高版本,则已内置CosmoPlayer2.0,只是安装Netscape时请注意是否选中了相应选项;若用的是InternetExplore4.0,则有可能已经内置了VRML2.0浏览器,判断是否内置的方法很简单,就是看它能否打开VRML文件(*.wrl,*.wrz),如果不行,可以从/vrml/下载VRML浏览器插件,对于IE3.X,还需要下载一些辅助插件。当然在开始之前应基本熟悉VRML浏览器的操作方法。硬件:VRML和硬件平台无关,只要能提供VRML浏览器。在下面的教程中,我们假定硬件平台是微机,输出设备是图形窗口,输入设备为鼠标器和键盘。当然,如果有更先进的虚拟现实设备和支持它的VRML浏览软件效果会更好。对于我们将要创作的境界,微机就足够了。实验三,VRML空间变换与群节点设计appearance域> geometry域的四种简单的造型节点l.Box立方体节点>用来创建以坐标原点为中心的正方体、长方体几何造型。>格式:>节点名称 域名称域值 #域值类型Box{size2.02.02.0 #SFVce3fA}size域的域值设定了三维立方体几何造型的尺寸大小,默认值为2.02.02.0,是一个以坐标原点为中心,长、宽、高为2.0单位的立方几何造型。A举例3-1box.wrl

niaErri且IShape模型节点系统层次图儿何节点App^TRfirR域AjifieHTunw外厲布点Shaptf®型肖点llranftpi£irt:n(iji,Sphere球悴节点niaErri且IShape模型节点系统层次图儿何节点App^TRfirR域AjifieHTunw外厲布点Shaptf®型肖点llranftpi£irt:n(iji,Sphere球悴节点叶1M锥并竹点存灯文本趟癡竹点crnjasiveColorambienBlnlensifyC-ylinder圆柱体节点Bx立方悴胃点ghinineAAtrxturcrransfrpmidifTu^te(2ok>rsfM>rularColortexture2.Sphere球体节点创建以坐标原点为中心的球体几何造型;格式:节点名称域名称域值 #域值类型Sphere{radius2.0#SFFloat}radius域的域值表示球体的半径,默认值为1.0单位;•举例:3-2sphere.wrl3.Cone立方体节点•创建以原点为中心,以Y轴为对称轴的圆锥体几何造型格式:节点名称域名称域值 #域值类型Cone{bottomRadius1.0#SFFloatheight2.0#SFFloatsideTRUE#SFBoolbottomTRUE#SFBool}bottomRadius设置了圆锥体底面半径尺寸height设定圆锥体的高度side是否创建圆锥体的锥面,默认值为TRUEbottom是否创建圆锥体的底面,默认值为TRUE举例:3-3cone.wrl

4.Cylinder圆柱体节点创建以坐标原点为中心,以Y轴为对称轴的圆柱体几何造型格式:节点名称域名称域值#域值类型Cylinder{radius1.0#SFFloatheight2.0#SFFloatsideTRUE#SFBoolbottomTRUE#SFBooltopTRUE#SFBool}top是否创建圆柱体的顶面,默认值为TRUE举例:3-4cylinder.wriAppearance节点语法格式:Appearance{material NULL#exposedFieldSFNodetexture NULL#exposedFieldSFNodetextureTransform NULL#exposedFieldSFNode}1.material域用于设定立体造型外观的材质属性,包括颜色、透明度、发光度、反光度等。域值包含一个Material材质节点或者取NULL空值,造型外观材质属性是通过Material材质节点来设置的。(1)该域值的默认值为空,即appearanceAppearance{}或者appearanceAppearance{materialNULL},表示几何体本身为发白光的材质,造型为纯白色,无亮度对比。(2)如果要设置为appearanceAppearance{materialMaterial{}},则表示包含一个默认材质节点,几何体采取默认材质的光照,呈现浅灰色造型,有亮度比。举例Material材质节点:设置有关材质的属性,可以创建出金属、玻璃、石头等属性。Material节点语法Material{

diffuseColor 0.80.80.8#exposedFieldSFColorVRML中创建的立体造型都是以默认坐标系的原点为中心进行的,当创建多个时,会重叠在一起,而且不可能多个模型都在空间的同一个位置,因而需要进行相关的变换。ambientIntensify0.2specularColor000emissiveColor000shininess 0.2transparency 0ambientIntensify0.2specularColor000emissiveColor000shininess 0.2transparency 0}#exposedFieldSFFlotexposedFieldSFColorexposedFieldSFColor#exposedFieldSFFlost#exposedFieldSFFlotTransform坐标变换节点用于创建一个新的坐标系,通过对坐标系的平移旋转、缩放操作,实现对立体造型位置、角度、缩放比例的改变。Transform变换节点用于创建一个或多个不同于默认(原始)坐标系的新坐标系。Transform结点的语法Transform{children参与变换的造型节点集translation新坐标系的平移值rotation新坐标系的旋转scale新坐标系的缩放系数scaleOrientationbboxCenterbboxSize#exposedFieldMFNode#exposedFieldSFVec3f#exposedFieldSFRotationchildren参与变换的造型节点集translation新坐标系的平移值rotation新坐标系的旋转scale新坐标系的缩放系数scaleOrientationbboxCenterbboxSize#exposedFieldMFNode#exposedFieldSFVec3f#exposedFieldSFRotation#exposedFieldSFVec3fcenteraddChildrenremoveChildren}children域(数组)001000-1000

-10-1#exposedField#SFVec3f#SFVec3f#exposedField#eventIn#eventInSFRotationSFVec3fMFNodeMFNode设定参与坐标变换的所有子节点;默认值为空,表示不含任何节点;translation域(三维)变换后,新坐标系的原点与原始坐标系原点在XYZ方向上的距离默认值为000,与原始坐标系重合,没有偏移。rotation域(4维)设定新坐标系与原始坐标系进行旋转的旋转轴和旋转角度。前三个值,表示在原坐标系中的一点;旋转轴为原坐标系的原点与前三个值表示的点的连线;旋转轴的方向为原坐标系的原点指向与前三个值表示的点;旋转方向,按右手法则,由第四个值的正、负来确定旋转方向旋转角度由第四个值来确定,按照弧度值来确定。03045609012013515018000.5240.7851.0471.5712.0942.3562.6183.141默认值为0.00.01.00.0,表示新坐标系以Z轴为旋转轴,但不发生旋转。scale域(三维)设定新坐标系在XYZ方向上的缩放系数。默认值为1.01.01.0,表示在XYZ方向上均无缩放。实验四,VRML绘制复杂造型造型的基本元素点八、、线面空间点:空间点是所有造型的基础Coordinate #空间点节点造型{point[ ]#MFVec3f指定空间点的坐标}Vrml复杂造型:通过以下节点作为Shape造型节点geometry域值来生成复杂造型PointSetIndexedLineSetIndexedFaceSetElevationGridExtrusion几何点造型:点造型指在VRML中生成一个像素大小的空间点PointSet{Coord#SFNodeColor#SFNode}当需要表现点点灯火、星空等有颜色的离散点时,可以用该节点进行设计几何线造型:通过连接任意两个坐标点,或多个坐标点间依次连接,构成空间连线IndexedLineSet{coord#SFNode 空间点的集合coordIndex#MFInt32#连线坐标点序列color #SFNode 颜色指的集合colorIndex#MFInt32#连线依次颜色序列(>=0)colorPerVertex#SFBool#颜色基于端点还是线}序号值从0开始进行计算在按照序号进行点的连接过程中,-1表示当前连接结束。折线不受光照影响,也不能做纹理映射几何面造型:通过连接任意多个坐标点,并首尾相连,构成封闭、着色的面区域IndexedFaceSet{coordNULL#SFNode 空间点集合coordIndex#MFInt32 #连线坐标点序列texCoordNULL#SFNode #纹理图片渲染texCoordIndexMFInt32#纹理序列colorNULL#SFNode颜色集合colorIndex#MFInt32#连线依次颜色序列colorPerVertex#SFBool #颜色基于端点还是面。IndexedFaceSet{NormalNULL#SFNode #平面或顶点的单位法向量normalIndex#MFInt32 依次法向量序号NormalPerVertex#SFBool#法向量是基于顶点或平面Ccw#SFBool#单位法向量是按右手法则还是左手法则Convex#SFBool#面是凸面还是凹面(一般不用设置)Solid#SFBool#是否构成实体,即是否背面可见。默认不可见,以减少CPU的计算负担creaseAngleSFFloat#褶皱角的域值,小于该值时平滑过渡,使之不那么尖锐ooooSet_coordIndex#eventInMFInt32。。。事件处理接口}空间挤出造型:利用2D截面在空间中沿某一路径移动而挤压形成的空间造型体,需用空间挤出造型Extrusion{Spine[]#MFVec3f空间挤出方向线crossSection[]#MFVec2f要挤压的空间轮廓Scale[]#MFVec2f在每段挤压处的缩放比例Orientation[]#MFRotation挤压平面的旋转beginCapendCap#SFBool是否有起始、终点面端oooConvex#SFBool端面是凸起还是凹下}该节点可以生成很多复杂的造型,特别是具有对称性的物体实验五,VRML环境设计与视点控制VRML环境设计:•真实感场景创建光照•在VRML中添加并控制光照是通过PointLight节点、DirectionalLight节点和SpotLight节点来实现的。VRML通过对物体表面的明暗分布的计算,使物体同环境产生明暗对比,这样,物体看起来就像是在发光.•1.PointLight节点PointLight节点生成一个点光源,即生成的光线是向四周发散的。•2.DirectionalLight节点DirectionalLight节点生成一个平行光源,即生成的光线是平行向前发射的。•3.SpotLight节点SpotLight节点创建了一个锥光源,即从一个光点位置呈锥状向一个特定的方向照射。纹理:•大多数的VRML浏览器所支持的表面材质的几种图像格式为JPEG、MPEGGIF和PNG,被称为VRML材质贴图文件的标准格式。•在VRML中,用于指定材质表面贴图的节点主要有ImageTexture(图片纹理节点)、MovieTexture(影象纹理节点)、PixeTexture(像素纹理节点)。下面分别介绍这三种节点。1.ImageTexture节点ImageTexture是图像纹理节点,指定了纹理映射属性,通常作为Appearance节点的texture域的域值。<<表面贴上纹理图的正方体>>2.MovieTexture节点PixeTexture节点是像素纹理节点,用来指定纹理映射属性从图10.17中可以看出不同像素部分颜色的灰度程度的差别。不同灰度纹理雾化:•VRML允许在空间添加大气效果,通过设定大气的状态增加场景的朦胧效果。如果场景中按远近有一系列的物体,空间距离只能影响它们在浏览器中的大小而不能体现现实中因远近引起的清晰度的差异。如果在场景中添加雾化效果,这一差异就能得到体现,从而使造型显得更加逼真。一个VRML虚拟漫游系统的设计:物体模型的设计1.Collision节点Collision组节点观测观察者和组中的造型发生碰撞。2.椅子的设计如下:先设计座位部分,为一Box节点设计椅子的腿和靠背都是长方体,代码和座位部分类似,就不详细列出了设计椅子的两个扶手,扶手是由三个长方体组合成的,所采用的节点为•椅子的模型

•椅子的模型・桌面为一长方体,采用Box节点,首先是外侧的挡板,为一长方体,柜子的挡板和手柄都是简单的长方体,代码和外侧挡板类似。・设计好之后就可以通过坐标的变换把右腿也构造出来,从而构造出桌子漫游场景的最终生成・要将物体模型组合起来,需要将模型的文件都包含到场景文件中,这需要用到Inline节点。漫游场景的示意图如图10.23所示。首先要设计浏览者的视角,使得虚拟人出现在房间内的位置。为了能将整个场景都照亮,需要在房间中设置光源,这里采用点光源。生成房子的地板为一长方体,并给它贴上图片纹理。天花板也为一矩形,墙壁也为简单的矩形,不使用贴图.窗户主要由一些长方体组成框架,然后在墙壁的外面放上一张图片模拟窗外的景色,从而不需要制造玻璃模型。长方体的框架之间主要是先计算好坐标,然后构成所需要的窗户模型,这里只给出窗外的风景画的代码。门主要由两个长方体组成,这里不详细介绍。要注意的是两个长方体之间要留有一些空隙,从而产生门的观感。设计完房间的构架,下面就是往房间中加入前面构造的桌子、电脑等模型,这要使用Inline节点,这里主要是计算好坐标,把物体放在适当的位置。添加完所有的模型,则整个虚拟场景即构造完毕。VRML视点控制:

当我们在商场或超市选购东西时,一般不是每一件物品都要看的,而是直奔有自己所感兴趣的东西的地方。在VRML虚拟世界中也一样,并不是每一个场景都是浏览者所要看的,浏览者往往只会寻找自己感兴趣的东西,但寻找有用的东西常常需要花费大量的时间和精力则是浏览者不想的,这就涉及到VRML的视点控制。VRML提供了两个用来创建视点的节点:Viewpoint节点和Navigationlnfo节点。•在VRML中的视点就是一个你所浏览的空间中预先定义的观察位置和空间朝向,在这个位置上通过这个朝向,浏览者就可以观察到虚拟世界中相应的场景。•当然,同其他节点一样,在VRML虚拟世界中可以创建多个视点,以供浏览者选择。不过浏览者在任何时候,在一个虚拟空间中只有一个空间视点可用,也就是说不允许同时使用几个视点,这与人只有一双眼睛是相符合的。视点绑定可使你控制那个可用的视点,并可从一个视点切换到另一个视点。•从一个视点切换到另一个视点有两种途径,一是跳跃型的,一是非跳跃型的。前面所说的顾客在网上虚拟超市购物,就是跳跃型视点,该类型视点一般用来说明那些在虚拟世界中重要的、有趣的和顾客感兴趣的观察地点他们提供了一种快捷方便的机制,使浏览者不必浏览每一个景点。而非跳跃型视点一般用来建立一种从一个坐标系到另一个坐标系的平滑转换,也可称是快速浏览。•导航就是在VRML虚拟世界中使用一个三维的造型作为浏览者在虚拟世界中的替身,并可使用替身在虚拟世界中行走,通过该替身来观看虚拟世界,还可以通过替身去进行交互。Viewpoint节点♦Viewpoint节点说明了一个VRML空间坐标系中的观察位置,指定了这个观察位置在VRML空间的三维坐标,空间朝向以及视野范围等参数。该节点既可作为独立的节点,也可作为其他组节点的子节点。其节点语法定义如下:♦Viewpoint{♦♦♦♦♦♦♦♦♦♦ExposedFieldExposedField♦♦♦♦♦♦♦♦♦♦ExposedFieldExposedFieldSFVec3f positionSFRotationorientationExposedFieldSFFloatFieldSFStringExposedFieldSFBoolEventIn SFBoolEventOntSFBoolEventOutSFTime}0.00.01.00.00.01.00.0fieldOfView0.785398descriptionjump TRUEset_bindisBoundbindTimeposition域的值指定了一个三维坐标,用来说明这个Viewpoint节点在VRML场景中所创建的空间视点的空间位置。该域值的缺省值为0.00.01.0,即将视点放在Z轴正方向的距离坐标原点1.0个单位长度的地点上。♦Orientation域的值指定了一个空间朝向,就是浏览者在虚拟世界中面对的方向,但不是直接给出方向,而是提供了一个视点绕其旋转的旋转轴旋转角度指定了绕此轴旋转的数值。VRML中初始化的视点与Z轴负方向对齐,X轴正方向指向右,Y轴正方向指向正上方。Orientation域给出的域值是相对初始化的空间朝向的旋转角度。该域值的前三个值说明了一个三维矢量,即X,Y和Z分量,最后一个值为弧度度量,说明了旋转角度的正负。该域值的缺省值为0.00.01.00.0,即没有发生旋转。FieldOfView域的值指定了视点中视角的大小,其是以弧度为单位的。大的角度产生类似广角镜头的效果,而小的角度产生类似远焦镜头的效果。该域值在0.0和3.142之间设定,即0度和180度之间。其缺省值为0.785398,即45度角,这和现实中人们的视野范围接近。Description域的域值指定了一个用于描述视点的字符串,也可以说是该视点的名字。通过该域值,人们可以很方便地找到自己感兴趣的视点,这些字符串会出现在空间视点列表中,以供人们选择。该域值的缺省值为空字符串。Jump域的值指定了视点是跳跃型还是非跳跃型的,该域值为布尔型数值,TRUE表示跳跃型的空间视点,FALSE表示非跳跃型的空间视点。该域值的缺省值为TRUE,即为跳跃型的。事件入口set_bind、事件出口isBound和事件出口bindTime主要用于空间视点之间相互转换的时候。10.2.2NavigationInfo节点NavigationInfo节点用来提供有关浏览者替身的信息和该替身如何使用当前的视点导航。其节点语法定义如下:NavigationInfo{EventInSFBoolset_bindExposedFieldMFFloatavatarSize[0.25,1.6,0.75]ExposedFieldSFBoolheadlightTRUEExposedFieldSFFloatspeed 1.0ExposedFieldMFStringtype[“WALK”,”ANY”]ExposedFieldSFFloatvisilibityLimit0.0EventOutSFBool isBound}speed域的值指定了浏览者在场景中行进的速度,它是以m/s为单位的。大多数浏览器都可以通过浏览器本身的设置来改变漫游速度,漫游的速度也会受到浏览器的设置的影响。当采用EXAMINE导航方式时,speed域不会影响观察旋转的速度。如果type域设置的是none,漫游速度将变为0,浏览者的位置将被固定,但浏览者改变视角将不受影响。Type域的值指定了浏览者的漫游类型,该域值可以在ANY、WALK、FLY、EXAMINE、NONE这5种类型中进行转换。其中WALK表示行走方式,替身会受到重力的影响。FLY表示飞行方式,替身可飞来飞去,不受重力和地形的影响。EXAMINE方式表示替身不能移动,为改变替身与物体之间的距离,只能移动物体。NONE表示不提供导航方法,浏览者只能使用所创建的活动特性来移动。ANY表示浏览器支持以上4种浏览方式。该域值的缺省值为WALK。VisibilityLimit域的值指定了用户能够观察到的最大距离。该域值的缺省值为0.0,表示最远可以观察到无穷远处,visibilityLimit域值必须大于0。如果观察者在最大观察距离之内没有观察到任何对象则显示背景图。在构造一个大的3D场景时,有必要修改visibilityLimit,因为一个大的3D场景运算量是很大的,比如虚拟城市,当远景看不到或可忽略时,就可以利用visibilityLimit域来定义用户能够观察到的最大距离。AvatarSize域的值指定了三维空间中浏览者替身的尺寸。在运行VRML程序时,可以假设三维空间中一个不可见的浏览者替身,通过利用该替身来进行碰撞检测。AvatarSize域有三个参数,第一个参数用于指定替身与其他几何体发生碰撞的最小距离,第二个参数用于定义替身距地面的高度第三个参数用于指定替身能够跨越的最大高度。AvatarSize定义了一个圆柱体如图10.2.2所示:实验六,VRML动画交互1) 构思场景设计一个fly.wrl,让它呈现扁平形状,构思完成后准备好要使用的素材。设计另外一个fiyl'.wrl,让它呈现尖尖的形状,构思完成后准备好要使用的素材。设计一个huntl.wrl,让上面两个素材旋转飞行。2) 设计飞碟外观1、 设计好飞碟的大小,以便能够在所需的空间里飞行。2、 fly的半径大一点为1,形状为scale2.30.02.3。fly1的半径小点为0.5, scale2.35.02.3。3、 fly的背景颜色为skyColor[0.20.50.6],fly1的背景颜色为skyColor[0.51.00.0]。4、 飞碟flyl的具体造型细节为:Transform{translation0.00.00.0scale2.35.02.3children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.40.30.0ambientIntensity0.4specularColor0.80.80.6shininess0.20}}geometrySphere{radius0.5}}]}飞碟fly的具体造型细节为:Transform{translation0.00.00.0scale2.30.02.3children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.30.20.0ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius1.0}}]}3)整体设计1、把fly.wrl、fly1.wrl放在同一个文件夹里以便把fly、fly1演示效果放在同一个空间里。2、创建一个hunt1.wrl同样放在与fly.wrl、fly1.wrl相同的文件夹里以便能得到想要的的效果。3、设置交互时的背景颜色为skyColor0.20.30.6。4、交互的内容为fly、fly1两个画面的重合与分开的过程。5、具体设计细节为:DEFTimeTimeSensor{cycleInterval8.0loopTRUE}DEFflyinter1PositionInterpolator{key[0.0,0.2,0.4,0.6,0.8,1.0]keyValue[000,00-20,80-20,80-20,80-20,000]}DEFflyinter2PositionInterpolator{key[0.0,0.2,0.4,0.6,0.8,1.0]keyValue[000,00-20,-80-20,-80-20,-80-20,000]}ROUTEcoll_fa.collideTimeTOTime.set_startTimeROUTETime.fraction_changedTOflyinter1.set_fractionROUTETime.fraction_changedTOflyinter2.set_fractionROUTEflyinter1.value_changedTOfly.set_translationROUTEflyinter2.value_changedTOairship.set_translation4)整体代码为:Fly代码:Background{skyColor[0.20.50.6]}Transform{translation0.00.00.0scale2.30.02.3children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.30.20.0ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius1.0}}]}Transform{translation0.00.00.0scale4.01.04.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.30.20.0ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius1.0}}]}Fly1代码:Background{skyColor[0.51.00.0]}Transform{translation0.00.00.0scale2.35.02.3children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.40.30.0ambientIntensity0.4specularColor0.80.80.6shininess0.20}}geometrySphere{radius0.5}}]}Transform{translation0.00.00.0scale4.01.04.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.40.30.0ambientIntensity0.4specularColor0.80.80.6shininess0.20}}geometrySphere{radius0.5}}]}交互代码:Group{children[Background{skyColor0.20.30.6}DEFcoll_faCollision{collideTRUEchildren[DEFflyTransform{

translation-2.00.00.0childrenInline{url"fly.wrl"}}DEFairshipTransform{translation2.00.00.0rotation0.01.0rotation0.01.00.06.282childrenInline{url"fly1.wrl"}childrenInline{url"fly1.wrl"}DEFTimeTimeSensorcycleIntervalDEFTimeTimeSensorcycleInterval8.0loopTRUE}DEFflyinter1PositionInterpolator{key[0.0,0.2,0.4,0.6,0.8,1.0]keyValue[000,00-20,80-20,80-20,80-20,000]}DEFflyinter2PositionInterpolator{key[0.0,0.2,0.4,0.6,0.8,1.0]keyValue[000,00-20,-80-20,-80-20,-80-20,000]}ROUTEcoll_fa.collideTimeTOTime.set_startTimeROUTETime.fraction_changedTOflyinter1.set_fractionROUTETime.fraction_changedTOflyinter2.set_fractionROUTEflyinter1.value_changedTOfly.set_translationROUTEflyinter2.value_changedTOairship.set_translation四、试验截图:

Bitmanaqement总Bitmanaqement总I:\12\flyl.wrl p6五、小结(包括收获、心得体会、存在的问题及解决问题的方法、建议等)注:内容一律使用宋体五号字,单倍行间距。本次实验内容比前两次要复杂,难度较大,但是,与前两次实验相比,此次实验做的更加顺利,这是建立在完成前两次实验的基础上的。通过对基本造型的准确把握,掌握了基本造型的做法,并且熟练掌握了通过对基本造型的重组来制作复杂型体方法。通过本次实验收获很大,例如,设计造型更加熟练,对坐标的调整更加快速、准确,对各造型节点的各个域的意义掌握的更准确、全面。以后,多加练习,理论与实践相结合。结课作业1,宇宙源代码:#VRMLV2.0utf8Background{#skyColor[#0.00.00.6#}DEFoTransform{translation00-15children[DEFaGroup{children[Transform{translation0.00.00.0scale2.31.62.3children[Shape{appearanceAppearance{materialMaterial{diffuseColor.54.05.25ambientIntensity.87specularColor.71.77.75shininess.53}}geometrySphere{radius1.0}}]}Transform{translation0.00.00.0scale4.01.04.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.20.20.2ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius1.0}}]}Transform{translation0.01.70.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.10.20.2ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius0.8}}Transform{translation0.0-1.70.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.10.20.2ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius0.8}}]}]}]}DEFShap1Shape{appearanceAppearance{materialMaterial{diffuseColor0.80.20.2ambientIntensity0.1specularColor0.80.80.8shininess0.15}}geometrySphere{radius0.5}}DEFShap2Shape{appearanceAppearance{materialMaterial{diffuseColor0.80.20.2ambientIntensity0.1specularColor0.80.80.8shininess0.15}}geometrySphere{radius1.5}}Transform{translation020childrenUSEShap1}Transform{translation0-20childrenUSEShap1}Transform{translation1020childrenUSEShap2}Transform{translation0.08.00.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.10.20.2ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius0.8}}Transform{translation7.08.00.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.10.60.2ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius0.4}}]}Transform{translation-8.01.70.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.50.20.7ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius2.0}}]}Transform{translation-10.0-8-10.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.30.70.2ambientIntensity0.4specularColor0.70.70.6shininess0.20}textureImageTexture{1〃1・・・〃url"diqiu.jpg"}}geometrySphere{radius3.8}}]}Transform{translation-18.0-8-10.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.30.70.2ambientIntensity0.4specularColor0.70.70.6shininess0.20}textureImageTexture{1〃・・〃url"yueqiu.jpg"}}geometrySphere{radius1.8}}]}Transform{translation-20.015.70.0children[Shape{appearanceAppearance{materialMaterial{diffuseColor0.10.50.3ambientIntensity0.4specularColor0.70.70.6shininess0.20}}geometrySphere{radius0.8}}]}Transform{translation18.0-50children[Shape{appearanceAppearance{materialMaterial{diffuseColor10.05.05.0ambientIntensity0.4specularColor0.70.70.6shininess0.20}textureImageTexture{url"taiyang.jpg"}}geometrySphere{radius8.0}}]}PointLight{location15.0-4.70.0ambientIntensity10.0attenuation100color1.00.00.0radius8.0onTRUE}Transform{translation20120rotation0101.571children[Sound{sourceDEFmovieMovieTexture{url"HW.MPG"loopTRUErepeatSFALSErepeatTFALSE}location0.00.00.0direction001spatializeFALSEmaxFront1000maxBack100minBack10}]}DEFcTransform{translation-35-30-10children[USEa]}DEFdTransform{translation-25-10-10children[USEa]}DEFTimeTimeSensor{cycleInterval10.0loopTRUE}DEFrunPositionInterpolator{key[0.0,0.2,

0.4,0.6,0.8,1.0,]keyValue[-28-15-20,-20-13-20,-16-12-30,-14-10-20,-12-9-30,-10-8-10,]}DEFrun1PositionInterpolator{key[0.0,0.2,0.4,0.6,0.8,1.0,]keyValue[-70-30-10,-60-28-20,-50-26-30,-40-24-40,-30-20-50,-20-18-60,]}DEFrun3PositionInterpolator{key[0.0,0.2,0.4,0.6,0.8,1.0,]keyValue[111,,,,,000,]}DEFrun4PositionInterpolator{key[0.0,0.2,0.4,0.6,0.8,1.0,]keyValue[00-10,-2-7-20,-3-6-30,-4-4-40,-5-4-60,-10-8-80,]}ROUTETime.fraction_changedTOrun.set_fractionROUTErun.value_changedTOc.tra

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论