




已阅读5页,还剩84页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
X3D中文简单教程一、X3D-Edit安装配置二、文本的显示三、X3D的2D图形的构造四、基本3D图形的创建方法五、立体造型的几何变换六、视点和导航的设置七、场景的光照效果八、纹理映射九、X3D场景的多媒体效果十、X3D的动画效果十一、X3D的交互技术十二、X3D的嵌入脚本编程技术十三、X3D的嵌入脚本Java编程技术 十四、小结互联网的出现为3D图形技术的发展注入了活力,在X3D(Extensible 3D)之前市场上出现了为数众多的互联网3D图形软件,这些图形软件遵循各自的技术规格,让用户感到无所适从和难以忍受。Web3D联盟发布的新一代国际标准X3D有望结束这种混乱的局面,X3D所具有的高度可扩展性可使开发人员根据自己的需求来扩展其功能,同时X3D整合了Java 3D、流媒体、XML等先进技术使其具备了技术优势,可以断言X3D必将为互联网3D图形的发展提供一个广阔的发展前景。 “Web3D”一词出自Web3D联盟(Web3D Consortium (W3DC),其前身是VRML联盟。该组织先后提出了VRML1.0(1994.10) ,VRML2.0(1996.8)和VRML97(1998.1) 规范。VRML规范支持纹理映射、全景背景、雾、视频、音频、对象运动和碰撞检测。但由于网络瓶颈、用户需求以及本身技术等原因,VRML技术的进展远没有达到预期。 1998年VRML联盟改名为Web3D联盟,年底提出新的标准X3D(Extensible 3D),又称为VRML200x 规范。2000年春,Web3D 联盟完成了VRML到X3D的转换。X3D整合正在发展的可扩展标记语言(Extensible Markup Language ,简称XML )、JAVA、流技术等先进技术,包括了更强大、更高效的3D计算能力、渲染质量和传输速度。 所谓X3D标准就是XML标准与3D标准的有机结合,X3D被定义为可交互操作,可扩展,跨平台的网络3D内容标准。 X3D 是 VRML的继承。VRML(Virtual Reality Modeling Language - 虚拟现实建模语言)是原来的网络3D图形的ISO标准(ISO/IEC 14772)。X3D 相对VRML改进,提供了以下的新特性: 1、3D 图形 - 多边形化几何体、参数化几何体、变换层级、光照、材质、多通道/多进程纹理帖图 2、2D 图形 - 在3D变换层级中显示文本、2D矢量、平面图形 3、动画 - 计时器和插值器驱动的连续动画;人性化动画和变形 4、空间化的音频和视频 - 在场景几何体上映射视听源 5、用户交互 - 基于鼠标的选取和拖曳;键盘输入 6、导航 - 摄像机;用户在3D场景中的移动;碰撞、接近和可见性检测 7、用户定义对象 - 通过创建用户定义的数据类型,可以扩展浏览器的功能 8、脚本 - 通过程序或脚本语言,可以动态的改变场景 9、网络 - 可以用网络上的资源组成一个单一的X3D场景;可以通过超链接对象连接到其他场景或网络上的其他资源 10、物理模拟 - 人性化动画;地理化数据集;分布交互模拟(Distributed Interactive Simulation - DIS)协议整合 在2002年3月份 X3D 第一版发布以来,已经有基于Java的源码开放的网络3D软件问世。因此,Web3D联盟在制定标准时成立了Java 语言翻译工作小组以便允许Java 程序能够与新的3D标准程序相协调。这也最终结束与Sun的网络3D技术Java3D technology 之间的冲突。 缩写X3D 就是为了突出新规范中VRML与XML的集成 。X3D 采用XML编码,以软构件技术为指导,定义了一个小型运行内核、一组API 和多个扩展集,具有小型化、可扩展、与Web上的多种标准互操作和与多种媒体紧密集成等特性。 X3D整体结构包括四个部分:内核(核心特性集),VRML97 特性集,应用程序接口和扩展集。特性集是VRML元素的一个子集,是满足特定用户需求的一组功能的集合。 内核(核心特性集):定义了VRML 中最关键的特性,形成核心构件,并将其封装为一个小型的、可扩展的内核。规范规定内核实现的大小应在Flash和RealPlayer之间,可被用户快速下载,运行时占用很少的系统资源。当前的核心特性集已确定只实现VRML97 的54 个节点中的23个节点。 VRML97 特性集:实现内核以外的VRML97 元素。VRML97 的节点被设计为可插拔的构件,通过扩展内核,完整的实现了VRML97 规范定义的功能,从而确保了X3D与已有的VRML 应用兼容。 应用程序接口:X3D 是描述几何体和行为的一种文件格式,由于使用XML 编码,文档对象模型(DocumentObject Model ,简称DOM )4自动为X3D 提供了一组API ,外部应用程序可以通过DOM 访问X3D 文件;作为另一个选择,场景创作接口(Scene Authoring Interface ,简称SAI )是来自VRML 自身的场景图像接口,它将外部创作接口(External Authoring Interface ,简称EAI )和VRML97 规范中的脚本接口(Script )融合,为外部或内部编程提供了一个单一的编程接口。最新的SAI 草案正努力提出一个将DOM 和SAI 合并的统一接口5。 扩展集:通过在内核之上进行特性集扩展,实现复杂的或是用户自定义的功能。用户可以在内核之上建立一个完整的VRML97 特性集。也可以添加其它的扩展,如NURBS 扩展,二进制文件格式扩展等。通过扩展还可以利用VRML97 规范中未定义的新的硬件渲染技术。构件化的设计为X3D 的内核提供了一种插件机制,允许扩展功能被实时的加入运行内核。 X3D标准由XML、X3D文件格式和一个3D引擎组成。X3D沿袭了VRML97的节点、域、域值的结构,并且将兼容VRML97标准,除此以外X3D还兼容MPEG-4格式。3D引擎基于Java Applet,无论是文字、图片还是声音都可以方便地与3D内容结合,而无需安装专用的插件就可以在浏览器中观看。 一个X3D文件包括header(头部说明)、scene graph(场景图)、prototypes(模型)和event routing(事件路由)等功能组件,通过X3D浏览器表达成真实的3D场景。 X3D/VRML文件格式有: l .x3d X3D XML 编码 l .x3dz gzip 压缩的 X3D XML 编码 l .x3dv X3D VRML classic 编码 l .x3dvz gzip 压缩的 X3D VRML classic 编码 l .wrl 非压缩或 gzip 压缩 VRML97 格式 X3D的关键技术有:XML编码、构件模型。 2004年8月,X3D已被国际标准组织ISO批准通过为国际标准ISO/IEC 19775(/index.html)。 二、文本的显示介绍如何创建具有文字的场景效果,在创建过程中还将详细介绍如何设置光源以及文字风格等方法。一、 创建一个新的X3D文件操作如下:1 运行X3D-Edit,出现如图所示的界面。说明:X3D-Edit程序界面分为五个区,即:用户命令区、节点区、节点属性区、程序编辑区及消息区。用户命令区是位于顶层,包括菜单命令和工具条命令。节点区位于界面的左侧,包括X3D目前所支持的所有特性节点,它是标签操作方式,单击相应的标签将在下方显示出相应的节点,凡是不可添加的节点均以灰色显示。节点区的下方是节点属性区,属性区所在的窗口中包括当前节点的大部分属性,在这里我们可以更改或设置相应的属性值。界面的最下方是消息区,用来显示当前操作或编译情况。程序编辑区用来显示和编辑我们所设计的X3D程序,它是多文档窗口形式。2 X3D-Edit运行后会调用默认的newScene.x3d,当然,我们也可单击File | New菜单重新创建。3 单击File | Save as ,将默认的newScene.x3d保存为另一个文件1.x3d,并指定到自己的文件夹中。如d:X3d示例。注意:系统一开始使用默认的保存文件名Untitled-0.x3d。4 单击工具栏最右边的Process XSL按钮,弹出如图所示的对话框。根据安装需要修改其中的文件路径设置。三、X3D的2D图形的构造介绍如何进行点、线及其基本2D图形的创建和构造,简单地介绍X3D的坐标系。一、 点及点的坐标在X3D的场景中设置物体需要有明确的坐标。在同一个场景中,有一个统一的坐标系。这个坐标系是一个右手坐标系,在初始时(即观察者没有移动位置和改变视角),该坐标系的X轴为沿屏幕水平向右,Y轴为沿屏幕垂直向上,Z轴为从屏幕指向用户。在X3D中,点的坐标是(x, y, z),坐标的单位是逻辑单位,即是X3D的VRML单位,由于它所显示的图形是按比例进行的,因此你可以把单位当成mm。在指定坐标量各坐标分量值可以用空格分开也可以用逗号分隔。下面的示例是显示四个点,其代码如下:(见3.x3d,3.wrl)说明:(1) X3D支持点的节点是PointSet,它可以包含Color 和Coordinate节点。Color节点是用来构造颜色值的索引表用于指定对应点或对象的颜色,Coordinate节点是用来构造坐标的列表。(2) 在Coordinate节点属性窗口中,单击point属性内容,弹出一对话框,添加如下图的坐标点。上述代码的结果如下图所示。若要指定单个点的不同颜色,可删除Appearance节点,并在PointSet节点添加Color子节点,并指定其color属性值,如下图所示:这样上述场景代码就变成:(见4.x3d,4.wrl)运行结果如下:二、 绘制直线在X3D中,绘制直线是采用IndexedLineSet节点,它可以包含Color 和Coordinate子节点。IndexedLineSet节点属性中,coordIndex属性用来指定直线端点在Coordinate子节点的索引号(0表示第一个点),每条直线索引值由3个数组成,前两个是点的索引号,第三个是-1。例如,在上述代码中再添加一个Shape节点,构成如下的代码。(见5.x3d,5.wrl)其中,Coordinate子节点中的point内容同上。IndexedLineSet节点的coordIndex属性内容如下所示:运行结果如下:若想设置每条直线的颜色,可将上述代码改为下列结果:(见6.x3d,6.wrl)说明:IndexedLineSet节点的colorindex属性值由3个数组成,前两个用于指定起始点和终止点颜色在Color节点定义中的索引,最后一个是-1。例如,颜色索引号0是指在Color节点定义的第一个颜色值(1 1 0)。上述代码中的Color节点内容同前。运行结果如下:三、 给制矩形在X3D中,Rectangle2D 几何节点用来指定一个平面矩形。使用时比较容易,只要指定其size属性内容就可改变其大小。Rectangle2D默认的size大小是2, 2。如下列代码:(见13.x3d,13.x3dv,13.wrl)结果如下图所示。四、 给制2D弧线X3D中的Arc2D、ArcClose2D、Circle2D和Disk2D节点分别用来绘制圆弧、封闭圆弧、圆和环。如下面的示例:(见14.x3d,14.x3dv,14.wrl)结果为:类似的有:(15.x3d,15.x3dv,15.wrl) (见16.x3d,16.x3dv,16.wrl) (见17.x3d,17.x3dv,17.wrl)四、基本3D图形的创建方法X3D提供了立方体(Box)、圆柱(Cylinder)、圆锥(Cone)、球体(Sphere)等基本3D造型节点。我们先简单地介绍这些节点的使用,然后再介绍节点的编组和节点的重复使用方法。一、 立方体Box构造的代码如下:(见7.x3d,7.wrl)说明:Box节点的主要属性是size,用来确定长度(x方向)、高度(y方向)和宽度(z)方向的大小。这里是定义一个长为2,宽和高均为1的立方体。结果如下图所示。二、 圆柱体Cylinder代码如下:(见8.x3d,8.wrl)说明:Cylinder节点的主要属性有height(高度)、radius(半径)以及是否包含顶面(top)、侧面(side)和底面(bottom)等。这里定义的是一个高为2,半径为1的圆柱体,该圆柱体含有各个面。结果如下图所示。三、 圆锥体Cone代码如下:(见9.x3d,9.wrl)说明:Cone节点的主要属性有height(高度)、bottomRadius(底面半径)以及是否包含侧面(side)和底面(bottom)等。这里定义的是一个高为3,半径为1的圆锥体,该圆锥体含有各个面。结果如下图所示。四、 球体Sphere构造的代码如下:(见10.x3d,10.wrl)说明:Sphere节点的主要属性是radius,用来确定球体的半径。结果如下图所示。五、 节点编组节点编组是使用X3D的Group节点进行的,通过多个节点构成一组以便构造出更复杂的几何造型。如下面的代码(见11.x3d,11.wrl)说明:该例使用Group 节点将两个Shape 节点组织在一体,构造一个组合造型。结果如下图所示。六、 节点的复用在X3D场景中往往有多个相同属性的节点出现,为了不重复添加节点属性,X3D中的节点属性窗口中提供了DEF 和 USE两个属性可以实现节点属性的复用。DEF用来为节点定义一个节点名称以便后面的使用。该节点名称是大小写敏感(区分大小写),其取名规则基本上与C语言相似。USE是用来引用前面相同节点的属性。如下面的代码:(见12.x3d,12.wrl)说明:在第一个出现的Appearance节点中,我们将其定义一个名称Color3D,而在后面出现的Appearance节点,我们使用了USE来调用第一个节点的属性。这样,两个立体的外观就一样了。从上面可以看出,在X3D中构造基本3D立体是非常简单方便的,但是由于每一个立体的属性被最大化优化过,因此要想改立体的位置和旋转角度还需要另外一些方法。五、立体造型的几何变换在X3D场景空间中,每一个造型都有其空间坐标,通过修改空间坐标系就可以使该造型在场景空间中移动、旋转和缩放等。X3D提供Transform节点来进行造型的几何变换,该节点的主要属性如下表所示:属性含义默认值使用说明translation平移0 0 0将几何体平移到指定的空间点位置rotation旋转0 0 1 0前3个值是空间坐标点,该点和原点相连的线为旋转轴,第4个值为旋转角度(以弧度为单位)center操作基点0 0 0 指定一个空间点作为几何变换的基点scale比例1 1 1指定在X、Y、Z方向的比例系数以便进行缩放scaleOrientation预旋转比例0 0 1 0缩放前子节点局部坐标系统的预旋转(允许沿着子节点任意方向缩放),其数值含义同rotation属性bboxCenter边界盒的中心0 0 0指定几何体自身原点的位置bboxSize边界盒的大小-1 -1 -1默认情况下是自动计算的,为了优化场景,也可以强制指定。下面就来介绍上述属性的使用方法。一、 平移示例代码如下:(见18.x3d,18.x3dv,18.wrl)说明:上面例子中,我们构造了两个球。为了使另一个球在(3,0,0)位置上显示,我们使用了Transform节点,该节点是一个组节点,Shape等节点需要作为它的子节点才能进行几何造型的变换。结果如下图所示。二、 旋转代码如下:(见19.x3d,19.x3dv,19.wrl)说明:立方体先平移到(3,0,0)点,然后按自身原点沿Z轴旋转45度(弧度值约为0.785),结果如下图所示。若将立方体自身原点移至最右侧面的中点,则上述代码可修改成:(见20.x3d,20.x3dv,20.wrl)其结果如下:请仔细比较这两次结果的不同。三、 缩放代码如下:(见21.x3d,21.x3dv,21.wrl)说明:上述代码中将第二个球沿X、Y、Z方向分别设置比例系数1、3和0.5,其结果如下图所示。四、 综合实例通过几何变换可以构造更多更复杂的几何造型,下面的示例代码就是用来构造一个三维坐标轴。(见22.x3d,22.x3dv,22.wrl)说明:上述代码中,先用圆柱和圆锥构造Y轴,并将其合并成组Axis。然后对组Axis进行旋转变换,结果如下图所示。上述显示的场景是用鼠标改变其视角的结果。当然,视角的改变还可直接通过节点进行设置。 5 单击确定按钮,将会把X3D格式转换为VRML97格式并在IE显示wrl文件场景。若此时鼠标指针为一个十字加上E,那么说明可以正常使用了。6.在X3D-Edit中导入VRML文件,转换成X3D文件并输出:在菜单栏中的“File”文件菜单中点击“Import”导入命令,在子菜单中选择确定“VRML97(.wrl)”命令;在弹出的“Import”导入对话框中对要导入的VRML文件的位置进行确认;点击“Import”按钮确定后,在弹出的对话框中选定为“Import into a new document”(导入并新建一个文档),点击“OK”按钮确定;这时就完成了VRML文件的导入,并在一瞬间自动转换成了未定标题的X3D文件untitled-1.x3d,通过X3D-Edit程序X3D文件的结构显示,可以清晰地看到X3D文件遵守XML编码规范。相对于VRML源代码来说,可读性有了显著的提高,不过源代码的尺寸大小也明显增加了。在X3D-Edit程序中,可以通过点击X3D文件的结构显示树,则在对应的属性设置对话框中进行更改设置。转换后需修改红色提示部分内容,如加入概貌profile(没有也可以),属性值如field中accessType由eventOut改为outputOnly,type:Vector3Float改为SFVec3f等,完成X3D文件后,即可保存输出。7. X3D-Edit3.0提供了更为丰富的处理功能,选择第一个Process XSL按钮,根据安装需要修改弹出对话框中的文件路径设置,单击确定按钮,将会在IE显示x3dv文件场景。新版本Flux Player V1.2 可支持完整的X3D immersive 概貌,并提供了一个高度优化的引擎以对X3D内容渲染,一组API以进行第三方开发,一次单击就可安装在Web页面中浏览X3D内容的媒体播放器插件,性能更稳定、操纵得到改进。二、 修改head节点下的内容head 是 X3D的第一个节点,放在场景节点的开头。它对应于HTML中的标记。该节点下的内容可以是component (组件)、metadata(元数据)或自定义内容。下面来修改:1 单击 ,将会在节点属性窗口中显示其属性,如下图所示。说明:meta (metadata) 元数据为场景提供一些信息,它使用和HTML的meta 标签一样的定义。每个元数据包括名称(name)和内容(content)。2 单击属性窗口中的content属性右侧的Value单元,弹出如下图所示的窗口。3 将内容改为1.x3d后,单击OK按钮。4 按同样的方法将head节点下的内容修改成下图所示。提示:删除某条节点内容,只需选定它后按delete键,或者右击节点,从弹出的快捷菜单中选择Delete。另外,有些浏览器不支持中文元数据,最好全部使用英文。三、 添加几何节点(Shape)在X3D 程序(文档)中,Scene 是X3D场景图的根节点,所有的场景节点都应添加到该节点下,并且在每个文件里只允许有一个Scene 根节点。操作如下:1 保留Scene下的NavigationInfo节点内容,删除 。2 单击Scene节点。然后在节点区中,单击 Allowed Nodes 标签。3 从节点列表中,找到Shape,并右击Shape,从弹出的快捷菜单中选择Insert As Child。编辑器会自动定位到添加的Shape节点。说明:Shape(几何)节点用于几何体、文本和外观特性的父节点。四、 添加文本节点(Text)Text 是一个用于文本显示的几何节点,在添加之前一定要添加场景外观节点(Appearance)。Appearance 指定几何对象的视觉效果,它可以有Material、Texture 和TextureTransform 节点。1 从节点列表中,找到Appearance(外观),右击后从弹出的菜单中选择Insert As Child。2 在刚才添加的Appearance节点下添加Material节点。说明:Material 指定相关几何节点的表面材质属性。用于光源的属性如下表所示:属性含义默认值值的范围diffuseColor反射光0.8 0.8 0.8RGB颜色分量值为01emissiveColor自身发出的光0 0 0同上specularColor*高光0 0 0同上shininess*光强0.2 01ambientIntensity*环境光0.201transparency*透明度001注意:打*号的属性可能不起作用。3在Material节点属性窗口中将diffuseColor的属性改为0 1 0,颜色为绿色。注意:在输入这些数值后一定要按Enter结束。说明:RGB颜色分量的含义是,R表示红色,G表示绿色,B表示蓝色。各颜色分量的值均在0到1之间,每个值用空格隔开。4 单击Appearance节点,从节点列表中,找到Text,然后右击Text,选择Insert After添加Text节点。5 在Text节点属性窗口中,将String属性内容设为Hello, X3D! 2004-1-2 ,结果如下所示。说明: 你好, X3D 和 2004-1-2文本之间有空格且两个文本上有双引号,之所以这么做是希望将其显示成两行文本。6 编译预览,结果如下图所示。(1.x3d,1.wrl)五、 设置文本风格字体风格的设置是由FontStyle节点指定的,它的属性如下表所示:属性含义默认值可以选择的值family字体名SERIF SERIF, SANS, TYPEWRITER:前两个是可变宽度的字体,最后一个是等宽字体style字体风格PLAIN PLAIN(常规), BOLD(粗体), ITALIC(斜体), BOLDITALIC(粗斜体)justify位置调整BEGINFIRST(首字符对齐), BEGIN(左对齐), MIDDLE(居中), END(右对齐)size字体大小1 实数值spacing 行间距1 实数值horizontal 是否水平方向TrueTrue(水平方向), False(垂直方向)leftToRight字符是否从左到右TrueTrue(从左到右), False(从右到左)topToBottom字符是否从上到下TrueTrue(从上到下), False(从下到上)下列就来将上述两行文本居中斜体显示,且行距设为2倍。1 在Text节点下添加一个子节点FontStyle。2 在FontStyle节点属性窗口中,将style属性内容选择为ITALIC。3 在justify属性栏内输入 BEGIN MIDDLE,然后按回车。4 在spacing属性栏内输入2.0,然后按回车。这样代码就变成:5 编译预览,结果如下图所示。(2.x3d,2.wrl)但是,BS Contact 6.1好像对文本支持得不够好,justify属性看不出效果,这是因为BS Contact自动将场景进行最大化居中缩放处理。六、视点和导航的设置在X3D场景空间中,为了能够让浏览者方便地控制自己的观察位置和角度,X3D提供了视点节点Viewpoint。同时为了能以不同方式来浏览,X3D提供了NavigationInfo导航节点。下面就来介绍这两个节点的使用。一、Viewpoint节点Viewpoint节点指明了一个X3D场景空间中的观察位置和视角方向,其主要属性如下表如下:属性含义默认值使用说明description 视点的文字描述 - 指定的视点描述文字将出现在其快捷菜单上position 视点位置 0 0 10指定观察者所在的空间位置orientation 视点方向0 0 1 0前3个值是空间坐标点,该点和原点相连的线为方向轴,第4个值为旋转角度(以弧度为单位)fieldOfView变焦角度 0.785398单位是弧度,取值范围03.14159,小的角度相当于长镜头, 大的角度相当于广角镜头。jump 是否为跳转True 立刻转换到这个镜头设置 (jump值为True), 或平滑的动态转换到这个镜头(jump值为False)。该属性可能不起作用centerOfRotation旋转中心位置0 0 0 当导航为EXAMINE方式时,该点为转动中心简单的示例代码如下:(见23.x3d,23.x3dv,23.wrl)说明:上面代码是用来以不同方位观看圆柱体。代码中,最难理解的就是视点的位置和视角。默认时,我们的人眼是处在+Z方向,当视点位置处在圆柱体后面时,即Back视点,我们人眼观察方向仍然是向里的方向,必需由里向外观察才能看到圆柱体,因此我们将视角绕Y轴旋转180度。同理可以理解Top和Left视点的设置。结果如下图所示。在场景中右击鼠标后,弹出如图的快捷菜单,上述节点定义的视点名称出现该菜单中,如下图所示。选择Back后,场景自动动态变换,结果如下图所示:类似的,Top结果如下图所示。若将Back视点的fieldOfView属性将原来默认的0.785398改为0.2,即:则结果如下图所示,注意与前面的比较。(见24.x3d,24.x3dv,24.wrl)二、 导航X3D提供NavigationInfo节点用来指定场景的观看方式和替身的物理特征。所谓替身就是当我们在场景快捷菜单中选择显示替身则会在场景中出现一个人物造型,如下图所示。不同的VRML浏览器插件所提供的替身造型是有所不同的。NavigationInfo节点属性如下:说明:type用来设置在虚拟世界中导航类型和初始航行类型。type类型中共有ANY、WALK、EXAMINE、FLY和NONE五种选项供选择设定。ANY - 任意模式。用来表示由浏览器自动选择对内容最合适的浏览航行方式,并可提供用户动态更换航行类型的用户界面。WALK - 行走模式。用来指定用户以步行的方式浏览VRML构建的虚拟世界,或者用放置在地面上或悬浮在地面上的交通工具来在虚拟世界探索航行。FLY - 飞行模式。功能与WALK差不多,只是可以不用或者忽略重力或者随地形而更换运行方向。EXAMINE - 检查模式。用来从各个角度观察个别物体的查看方式。NONE - 无模式用来强制用户使用场景中提供的浏览机制进行浏览,可以去掉某些用不到的导航模式。另外,BS Contact还提供平移漫游、游戏等模式。speed用来指定用户在虚拟世界中浏览场景的运行速度。speed速度的数值应为非负值,当设为0时表示用户在虚拟现实中浏览时的位置是固定的,但不影响用户在方向上和视野上的变化。speed属性的设置在type类型为NONE时无效。headlight用来指定浏览器是否需要打开一个总是指向用户注视方向的定向灯光,就像矿工头上的灯在黑暗中行走的效果一样。headlight属性有两个值,TURE为设置有效,FALSE为设置无效。avatarSize指定用户在VRML浏览场景时在虚拟世界中的物理尺寸,可用于碰撞检验和地形随动。默认值为1.25,1.6,0.75,其中第一个数值1.25指定发生collision碰撞时用户与发生碰撞物体之间的允许距离;第二个数值1.6指定用户在虚拟世界中浏览作品时距离地面的Height高度;第三个数值0.75指定用户在虚拟世界中浏览时Step跨越的高度,以便我们能够尽可能模拟真实的人在现实世界中的攀登行为动作。visibilityLimit能见度限制属性用来设置用户在虚拟世界中浏览时能够看见的最远距离。数值为0时表示能看见无限远,visibilityLimit必须大于或者等于0。由于上述属性均可通过属性窗口的修改进行,因此这里不在给出相应的代码。值得一提的是,我们也可在场景快捷菜单中通过选择移动子菜单中的命令项进行上述导航操作,其移动子菜单内容如下:七、场景的光照效果在X3D场景空间中,可以使用点光源节点(PointLight)、平行光源节点(DirectionalLight)和聚光性光源节点(SpotLight)来处理造型物体的光照明亮程度。下面介绍这三个节点的属性及其使用方法。一、 点光源节点(PointLight)PointLight 是一个点光源,它向所有的方向发射光线。光线照亮所有的几何对象,也不会被几何形体遮挡而形成阴影。其主要属性如下表所示:属性含义默认值使用说明on 光源是否开关True为True时打开光源,为False时关闭光源color光的颜色1 1 1指定光的颜色,它会影响对象的实际颜色显示效果location光源所在的位置0 0 0 光源的位置影响光的强弱intensity 灯光的亮度1 取值范围为01ambientIntensity对环境光影响程度0 取值范围为01,它的值越大,对环境光影响也越大radius 光源影响半径100以光源为中心的灯光效果的最大半径attenuation光线衰减参数1 0 0由三个值构成:第1个值控制光源在照明球体中亮度的一致程度,第2个值控制随着距离的增加,光线的线性衰减程度,最后1个值是控制随着距离的增加,光线的线性平方衰减程度。简单的示例代码如下:(见25.x3d,25.x3dv,25.wrl)说明:我们先在点光源位置处构造一个与光源颜色相同的小球,然后在(3,0,0)处构造一个圆柱体。结果如下图所示,注意圆柱体的颜色。若在光源和圆柱体之间在加一个相同圆柱体,试比较这两上圆柱体的效果。代码如下:(见26.x3d,26.x3dv,26.wrl)结果如下图所示:二、聚光性光源节点(SpotLight)SpotLight 是一个聚光性光源节点。它只照亮指定圆锥范围内的几何体。它的主要属性如下:其中大部分属性与PointLight节点含义相同,所不同的有:direction -灯光方向,默认值为0 0 -1intensity - 灯光亮度,默认值为1,取值范围为01beamWidth - 内部立体角(弧度) ,默认值为1.570796(180度),如果beamWidth cutOffAngle, beamWidth 会重新设为和 cutOffAngle相等。cutOffAngle -外部立体角(弧度),默认值为0.785398(90度)。上述参数含义和关系可以用下图来表示:示例代码如下:(见27.x3d,27.x3dv,27.wrl)结果如下图所示:三、 平行光源节点(DirectionalLight)DirectionalLight 创建了一个平行光线来来照亮几何体。由于光线从无限远处平行照射,所以不需要考虑光源的位置。DirectionalLight 节点的光不随距离变化而衰减,其主要属性如下表所示:属性含义默认值使用说明on 光源是否开关True 为True时打开光源,为False时关闭光源color 光的颜色1 1 1指定光的颜色,它会影响对象的实际颜色显示效果intensity灯光的亮度1 取值范围为01ambientIntensity 对环境光影响程度0 取值范围为01,它的值越大,对环境光影响也越大示例如下:(见28.x3d,28.x3dv,28.wrl)结果如下图所示:八、纹理映射在前面,我们是通过Material节点来改变物体的外观特性。这些特性仅仅是一致性的宏观效果,对于物体的某些细节我们还没有涉及到。通过纹理映射和处理可以为物体的表面细节增强表现力。这一节分三个部分来讨论:一是X3D基本纹理节点的使用,二是使用纹理的坐标系统,三是纹理的变换。一、 X3D基本纹理节点的使用X3D中,提供了PixelTexture(像素纹理)、ImageTexture(贴图纹理)和MovieTexture(影像纹理)三个节点。对于MovieTexture(影像纹理)节点,我们将在后面的多媒体效果中再做详细讨论,这里仅讨论前面两个基本纹理节点。1、 PixelTexture(像素纹理)节点PixelTexture 节点是用一个包含像素值的数组创建一个二维纹理帖图,其主要属性有:image - 用一个数组来定义一个二维图像。该数组分为两个部分,前三个是其特征值,后面的数值为实际的像素值。前三个特征值的含义是:第一、二个数用来表示宽度方向和高度方向的像素个数,第三个值是表示后面实际像素字节的组成。具体如下:当为1时,像素值为单字节,即取值范围为0x000xFF,表示明亮程度(灰度);当为2时,像素值为双字节,第1个字节表示明亮程度,第2字节表示alpha值(即透明度)。当为3时,像素值为三字节,分别用来表示RGB各颜色分量。当为4时,像素值为四字节,前三个字节用来表示RGB各颜色分量,第四个字节表示alpha值。repeatS - 表示是否沿S轴水平重复纹理。默认值为True 。repeatT - 表示是否沿T轴垂直重复纹理。默认值为True 。repeatT repeatT: initializeOnly type SFBool (true|false) true下面来看一个简单的示例代码:(见29.x3d,29.x3dv,29.wrl)其中,PixelTexture 节点的image值为2 2 3 0xff0000 0x00ff00 0x0000ff 0xffffff。也就是说,像素值使用三字节,分别表示RGB各颜色分量。由于宽度和高度均指定2个数量,因此需要22=4个像素值。结果如下图所示,注意立方体的颜色分布(不同的浏览器插件其结果可能不一样)。从上图可以发现像素纹理处理的规律:默认时,自动将水平和垂直按指定宽度方向和高度方向的像素字节数进行平均分割,每一个分割区域的中点为像素纹理点,然后向四周进行过渡。参见下列示意图:若要指定透明度,可参照下列示例:(见30.x3d,30.x3dv,30.wrl)其中,PixelTexture 节点的image值为2 2 4 0xff000000 0x00ff0040 0x0000ff80 0xffffffff。结果如下图所示:上述代码中,黄色球和像素纹理的立方体同在一个原点,由于设置了透明度,因此看起来很炫丽。你能看出alpha值的大小和透明度关系吗?答案是:alpha值为0时完全透明,为0x00小0xff时不透明。2、 ImageTexture(贴图纹理)节点ImageTexture 是用来指定一个图像映射到一个几何形体的表面上。它与PixelTexture 节点的属性基本相同,只不过image属性被换成了url属性。ImageTexture节点的url属性用来指定图像的文件名和位置。例如下列代码:(见31.x3d,31.x3dv,31.wrl)结果如下图所示:上述x3d.gif图片文件是放在与示例代码文件相同的文件夹中。需要说明的是:对于基本几何体,默认处理时各个面均会贴图。二、 使用纹理的坐标系统我们知道,图像和被映射的形体表面之间有一个映射关系。默认时,BS Contact是将图像全部放大到对应的形体表面上。若改变此默认的映射比例,则可使用X3D的TextureCoordinate节点。TextureCoordinate用来描述纹理帖图自身所在的坐标点,该坐标点是二维的,分别表示对应图像上的原点的相对水平和垂直距离。若坐标点取值在0到1之间,则这些坐标点落在图像内部,否则落在图像外部。TextureCoordinate节点的坐标点属性point通常用在IndexedFaceSet和ElevationGrid节点的texCoordindex属性中。例如下面的代码:(见32.x3d,32.x3dv,32.wrl)说明:(1) IndexedFaceset节点用来将一组顶点来构造的一个3D平面形体。各形体表面是在coordIndex属性中通过来指定构造平面点(由Coordinate节点指定)的索引值来指定。当索引值为-1时,表明当前表面已经结束,下一个表面将要开始。(2) 上述代码中,IndexedFaceset节点仅构造了一个面,如下面的示意图所示,图中的粗体数字表示该点在Coordinate节点的point属性中的索引号。注意:在计算机图形学中,每一个面都有方向,并满足右手定则:右手四指的方向是指定的点的次序方向,大拇指方向为该平面的法向方向。若构成立体的各个表面的法向方向都是从由立体内部指向外部,则围成的是一个封闭的实体。结果如下图所示:在上述代码中再添加代码,并修改IndexedFaceSet节点的texCoordindex属性,如下所示:(见33.x3d,33.x3dv,33.wrl)结果如下:分析:(1) TextureCoordinate节点指定的坐标点如下所示的示意图。由于在映射时,由IndexedFaceSet节点的texCoordindex属性指定的平面多边形图像应和coordIndex属性指定的平面多边形相映射。即图像0点和平面0点相对应,所以贴图看起来是上图的样子。(2) 若指定ImageTexture的repeatS和repeatT的属性为True。则还会在面上沿水平方向和垂直方向重复贴图。(见34.x3d,34.x3dv,34.wrl)上述代码仅仅是构造一个面,若构造一个体也可同样进行。如下面的代码:(见35.x3d,35.x3dv,35.wrl)结果如下图所示:三、 纹理的变换X3D的节点TextureTransform 是用来改变帖图的二维纹理坐标的位置、方向和比例, 因为帖图先进行变换然后再贴到几何体上,所以视觉效果是相反的。如下面的代码:(见36.x3d,36.x3dv,36.wrl)结果如下图所示:注意:(1) TextureTransform的值和显示在形体上的结果刚好相反。(2) 旋转只要指定相应的旋转角度(弧度值)即可。(3) 坐标是图像的相对坐标。即取值在0到1之间,则这些坐标点落在图像内部,否则落在图像外部。(4) 水平和垂直方向的比例值可以不同。需要说明的是:对于X3D的多重纹理的使用,由于BS插件支持的不是很好,故这里暂不讨论。九、X3D场景的多媒体效果X3D对多媒体的支持是通过这三个节点来实现的:AudioClip(音频数据节点)、Sound(音频播放节点)以及MovieTexture(影像纹理节点)。在本节中,我们先来简单地介绍这三个节点的属性,然后举一些例子分别说明这些节点的使用及音频和视频的播放。一、 音频和视频节点1、 AudioClip(音频数据)节点AudioClip 一般作为Sound的子节点,分其提供音频数据,其主要属性有:description - 此节点显示的提示文本。url - 声音文件的位置。该文件通常是 .wav 格式或 .midi 格式,其它格式不一定支持。loop - 是否循环播放。当loop=True时循环,当loop=False只运行一次。默认值为False。pitch-加快或减慢播放声音的相乘因子(例如:2.0意味着以两倍的速度播放),只有正值是有效的。默认值为1。startTime - 声音开始播放的时间(秒数)。默认值为0。stopTime - 结束播放声音的时间(秒数)。默认值为0。需要说明的是:如果loop设为True,声音一直循环播放直到stopTime停止;如果loop设为False,声音一次播放到文件末尾或者达到stopTime。2、 Sound(音频播放)节点Sound 节点
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 璀璨的香港课件
- 餐厅经营场所租赁合同:涵盖餐饮人才招聘及培训服务
- 环保产业员工离职竞业限制及环保技术保密合同
- 工业互联网时代工厂厂长聘用与技术支持合同
- 智能制造公司股权转让与产业升级协议
- 离婚后子女户口迁移及财产分割协议书
- 《离婚协议中的共同生活费用补偿与子女赡养》
- 婚姻终止及共同债务清偿离婚上诉合同范本
- 《电子商务合同法修订与电子签名法律效力合同》
- 下交叉综合征的治疗方案
- 高校援建人才管理办法
- 企业创新激励机制与绩效评价体系研究
- 《老年人能力评估实务》健康养老服务专业全套教学课件
- 橡胶环境损伤机理与寿命预测模型构建研究
- 腹腔镜子宫肌瘤护理查房
- 2025年卫生类事业单位招聘考试护理学专业知识外科护理试卷
- 个人养老金微课课件
- 肿瘤患者心理抑郁护理
- 2025-2030年中国工程承包行业市场深度调研及竞争格局与投资前景研究报告
- 十个严禁考试题目及答案
- 吉林:用水定额(DB22-T 389-2019)
评论
0/150
提交评论