《VRML基础教程资料》由会员分享,可在线阅读,更多相关《VRML基础教程资料(56页珍藏版)》请在金锄头文库上搜索。
1、虚拟场景制作与演示虚拟场景制作与演示 第一个虚拟境界#VRML V2.0 utf8n这是VRML 文件的标志,所有2.0 版本的VRML 文件都以这行文字开头,VRML97 是由VRML2.0 版修订而成的,符合VRML97 规范的VRML 文件也以这行文字开头。其中“#”表示这是一个注释。而utf8 表示此文件采用的是utf8 编码方案,这在VRML标准中有详细说明。1第一个虚拟境界GroupGroup节点节点n加入一个Group Group 节点(组节点):nGroup Group n组节点花括号之内的所有内容视为一个整体,利用组节点可以把虚拟场景组织成条理清晰的树形分支结构。下面定义组节
2、点的children children 域(孩子域):nchildren children n在children children 后的方括号内定义Group Group 节点的所有孩子对象,第一个孩子是一个Shape Shape 节点(形态节点),它描述一个几何形状及其颜色等特征:nShape Shape n在Shape Shape 节点内定义一个几何体BoxBox(方盒节点):ngeometry Box geometry Box n注意,我们没有为Box Box 定义任何域,这意味着它的尺寸和坐标位置等特性取缺省值(单位立方体)。随后补齐每个右括号:n 2第一个虚拟境界(HelloWorl
3、d1.wrl):#VRML V2.0 utf8 Group children Shape geometry Box 3第一个虚拟境界n下面定义立方体的外观,这只需改变ShapeShape节点的appearanceappearance域(外观),appearance appearance 域是一个AppearanceAppearance节点,n此Appearance Appearance 节点的materialmaterial域(材质)定义为一个MaterialMaterial节点:4第一个虚拟境界n下面定义立方体的外观,这只需改变ShapeShape节点的appearanceappearanc
4、e域(外观),appearance appearance 域是一个AppearanceAppearance节点,n此Appearance Appearance 节点的materialmaterial域(材质)定义为一个MaterialMaterial节点:5第一个虚拟境界Shape appearance Appearance material Material geometry Box 6第一个虚拟境界diffuseColor diffuseColor 域(漫反射颜色)VRMLVRML的颜色说明采用RGB RGB 颜色模型,所以要定义红色的立方体,漫反射颜色应该是1 0 01 0 0,三个数字
5、依次表示红色、绿色和蓝色,取值范围都是0 0到1 1:material Material diffuseColor 1 0 0 7第一个虚拟境界(HelloWorld2.wrl):#VRML V2.0 utf8Group children Shape appearance Appearance material Material diffuseColor 1 0 0 geometry Box 8第一个虚拟境界(HelloWorld2.wrl):#VRML V2.0 utf8Group children Shape appearance Appearance material Material
6、diffuseColor 1 0 0 geometry Box 9第一个虚拟境界红色的立方体位于屏幕的中心,它的中心坐标为0 0 0 0 0 0 。移动位置可以外套一个TransformTransform(变换节点)来实现:Transform translation 5 0 0 children Shape appearance Appearance material Material diffuseColor 1 0 0 geometry Box 10第一个虚拟境界在VRML VRML 中,Transform Transform 节点除了可以引进平移、旋转和缩放变换以外,其作用和Group
7、Group 节点的作用一样。把Transform Transform 节点的translation translation 域(平移)设置为5 5 0 00 0,意味着Transform Transform 节点所在的坐标系相对于其上层坐标系向右平移(即x x 轴方向)5 5个单位,在其它两个方向不移动,VRML VRML 的距离单位是米,5 5 个单位相当于5 5 米11第一个虚拟境界(HelloWorld3.wrl):#VRML V2.0 utf8Group children nTransform ntranslation 5 0 0nchildren nShape nappearance
8、 Appearance nmaterial Material diffuseColor 1 0 0 nngeometry Box nnnnn12第一个虚拟境界接下来我们把方块所在的Transform 节点复制三份,并把各自包含的几何形状依次定义为方块、球体和圆锥13第一个虚拟境界(HelloWorld4.wrl):#VRML V2.0 utf8Group children Transform translation 5 0 0 children Shape geometry Box Transform translation 0 0 0 children Shape geometry Sphe
9、re Transform translation -5 0 0 children Shape geometry Cone #end of Group children 14第一个虚拟境界VRML VRML 文件中有许多括号(花括号“”和方括“”),请注意括号的配对,建议采用本教程的缩进风格。上述VRMLVRML文件中三个Transform Transform 节点的平移量是不同的,因而三个几何体的位置也就不同。另外,还可以修改三个几何体的颜色:球面Sphere Sphere 为绿色(0 1 00 1 0),圆锥为蓝色( 0 1 0 0 1 0 )。15第一个虚拟境界为了以后引用方便,分别给这三
10、个Transform 节点指定一个名称:nDEF box Transform .nDEF sphere Transform .nDEF cone Transform .16第一个虚拟境界(HelloWorld5.wrl):n#VRML V2.0 utf8nGroup nchildren nDEF box Transform ntranslation 5 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 1 0 0 nngeometry Box nnnnDEF sphere Transform n
11、translation 0 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 0 1 0 nngeometry Sphere nnnnDEF cone Transform ntranslation -5 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 0 0 1 nngeometry Cone nnnn# end of Group childrenn17增加交互能力上一节我们学习了用几何体建立虚
12、拟境界以及为几何体赋予色彩和材质的方法,这样建立的虚拟境界是静态的。这一节我们将使一个几何体(为了更具一般性,下面我们称之为对象)能够根据用户动作做出反应,即交互能力,这是VRML2.0 最突出的特征。18增加交互能力1 1、检测器n在VRML VRML 中,检测器(SensorSensor)节点是交互能力的基础。检测器节点共九种。在场景图中,检测器节点一般是以其它节点的子节点的身份而存在的,它的父节点称为可触发节点,触发条件和时机由检测器节点类型确定。19增加交互能力接触检测器(TouchSensorTouchSensor)是最常用的检测器之一最典型的应用例子是开关。其它检测器将在后续章节中
13、陆续介绍。这里我们定义一个开关节点lightSwitchlightSwitch(这是一个组节点),并定义一个接触检测器作为它的子节点:DEF lightSwitch Group nchildren n各几何造型子节点.nDEF touchSensor TouchSensor nn20增加交互能力这样开关节点lightSwitch 就是一个可触发节点。当然,检测器存在的理由是它被触发时能够引起某种变化,所以在更深入讨论开关节点之前,我们先讨论一下场景的变化。21增加交互能力2 2、视点最常见的变化是视点的变化,在我们的第一个境界中你可能已经体验到视点变化:当你拖动鼠标或按动箭头键时(按照VRML
14、VRML术语,称为航行),虚拟境界就会旋转或缩放,这实际上是在调整你的视点位置或视角。在虚拟场景的重要位置可以定义视点节点(ViewPointViewPoint), ,它们是境界作者给用户推荐的最佳观赏方位,在CosmoPlayer CosmoPlayer 浏览器中,用户就可以通过鼠标右键选择作者推荐的各个视点。这里我们定义两个视点节点:22增加交互能力这里我们定义两个视点节点:DEF view1 Viewpoint position 0 0 20 description View1DEF view2 Viewpoint position 5 0 20 description view223增
15、加交互能力我们的目的是使用户可以通过触发开关节点来切换视点。现在先研究一下这两个视点节点,其中的坐标表示视点在场景中的位置,坐标的单位是米,这在前面已经提到过,视点的名称将会在浏览器菜单中提示出来供用户选择。把上述视点说明加入helloworld5.wrl 中(放在Group 节点之前),并把其中的方块节点修改成可触发节点:24增加交互能力DEF box Transform children Shape . Box . DEF touchBox TouchSensor 把修改过的文件另存为“HelloWorld6.wrl”。25增加交互能力3、事件传递把触发(用鼠标箭头按动方块)和场景变化(视
16、点切换)这两件事情联系起来,在场景图中,除节点构成的层次体系外,还有一个“事件体系”,事件体系由相互通讯的节点组成。能够接收事件的节点都应具有事件入口(eventIneventIn),如果它要接收多种类型的事件(称为入事件),它就应该具有多个事件入口,也就是说,事件入口象节点的域一样是有类型的。同样,发送事件的节点应有事件出口(eventOuteventOut), ,事件出口也是有类型的。例如ViewPoint ViewPoint 节点就有一个事件入口set_bindset_bind,当向此事件送入一个值“TRUETRUE”(即所谓的入事件)时,该viewpoint viewpoint 节点成
17、为当前视点。又如,接触检测器TouchSensor TouchSensor 有一个事件出口isActiveisActive,当受到用户触发后它就从此出口送出一个“TRUETRUE”(即所谓的出事件),在下一个事件发送之前,此事件一直保存在事件出口中(作为记录)。26增加交互能力3、事件传递事件出口和事件入口通过路径相连,这就是VRML VRML 文件中除节点以外的另一基本组成部分:ROUTE ROUTE 语句。ROUTE ROUTE 语句把事件出口和事件入口联系在一起,从而构成事件体系。在这里,我们把接触检测器touchBox touchBox 的事件出口isActive isActive 连
18、接到视点节点view2 view2 的事件入口set_bind:set_bind:ROUTE touchBox.isActive TO view2.set_bind好了!现在我们得到的VRML 文件是(HelloWorld6.wrl):27增加交互能力n#VRML V2.0 utf8nDEF view1 Viewpoint nposition 0 0 20ndescription view1nnDEF view2 Viewpoint nposition 5 0 20ndescription view2nnGroup nchildren nDEF box Transform ntranslati
19、on 5 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 1 0 0nngeometry Box nnDEF touchBox TouchSensor nnnDEF sphere Transform ntranslation 0 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 0 1 0nngeometry Sphere nnnnDEF cone Transform ntranslation
20、-5 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 0 0 1 nngeometry Cone nnnn #end of Group childrennnROUTE touchBox.isActive TO view2.set_bind28增加交互能力把文件调入浏览器,然后把鼠标指向方块并按下左钮,可以看到视点已经变为view2view2,内部的机制我们已经很清楚:左钮按下时方块节点的接触检测器被触发,接着接触检测器从事件出口isActive isActive 送出一个事件“TRUETRUE
21、”,这个事件通过路由进入视点节点view2 view2 的事件入口set_bindset_bind,view2 view2 收到“TRUETRUE”后成为当前视点,所以在我们眼前的场景发生了变化。29增加交互能力现在松开左钮,可以看到场景恢复到原来方位,这种功能称为视点回跳,其原因是松开左钮后接触检测器向view2 发送了一个“FASLE”事件,这样view2 的当前视点地位被解除,原来的视点成为即当前视点,详细说明可参考VRML 标准中对视点节点的专门论述。如果我们不想视点回跳,就想停留在view2 视点,那该怎么办呢?这种非系统缺省功能要自己来定义。30利用脚本编写自定义行为在VRML 中
22、,利用Script 节点(脚本节点)定义用户自定义行为,所谓定义就是用脚本描述语言(Scripting Language)编写脚本的过程。VRML97 支持的脚本描述语言目前有两种:Java和EMCAScript(这是JavaScript 标准化后的名称),关于这两种语言本身,请参考相应的参考资料,VRML97 标准中定义了它们和VRML 的接口方法。应该注意的是:VRML 是基于节点的语言,所以脚本也是封装在Script 这个特殊节点中的。这里我们不能过多地讨论脚本描述语言的细节,主要讨论把脚本集成到VRML 文件中的方法。31利用脚本编写自定义行为我们曾把接触检测器touchBox 和视点
23、view2 直接通过路径连接起来,现在要定义我们指定的行为,就需要在二者之间插入一个脚本节点,也就是让路径绕个弯:ROUTE touchBox.isActive TO touchScript.touchBoxIsActiveROUTE touchScript.bindView2 TO view2.set_bind32利用脚本编写自定义行为其中的脚本节点touchScript 有一个事件人口touchBoxIsActive 和一个事件出口bind_View2,前者接收来自接触检测器touchBox 的事件,然后经自己的脚本处理后,把结果发送给视点节点view2:nDEF touchScript
24、Script neventIn SFBool touchBoxIsActiveneventOut SFBool bindView2nurljavescript:nfunction touchBoxIsActive(active) nbindView2= TRUE;nn33利用脚本编写自定义行为关于这个Script 节点,请注意以下几点:(1)它的事件入口touchBoxIsActive 和事件出口bindView2是自定义的,而其它VRML 节点的域和事件都是固定的。(2)事件入口touchBoxIsActive 和事件出口bindView2 的类型都是SFBool(单值布尔型),touchB
25、ox 的事件出口isActive 和view2 的事件入口set_bind 的类型也是相同的。(3)“url”是脚本节点的一个域,可以直接包含脚本,也可以包含一个或多个用URL 地址指示的脚本,若有多个地址,则按照先后次序获取第一个可得到的脚本。(4)脚本是以函数(function)的形式给出的,函数名touchBoxIsActive 与事件入口的名称相同,这是和ECMAScript语言的接口约定,表示相应事件入口接收到事件后应调用此函数进行处理。34事件流程下面我们整理一下事件流程:(1)用户在方块上按下鼠标左键。(2)接触检测器发出一个“TRUE”事件。(3) 此事件进入脚本节点touch
26、Script 的事件入口touchBoxIsActive.(4)调用脚本函数touchBoxIsActive(注意,脚本函数并没有判断入事件的值)。(5)函数向touchScript 的事件出口bindView2 发送一个“TRUE”事件(还可以进行其它判断或执行其它事件)。(6)view2 节点收到“TRUE”事件,成为当前视点。按照VRML 约定,“认为”上述事件是同时发生的,也就是这些事件的时间戳相同。(7)若用户松开鼠标左键,则接触检测器发出一个“FALSE”事件,此事件同样引起脚本函数调用并发送“TRUE”事件,所以view2 仍然保持为当前视点。 本节的完整代码是(HelloWor
27、ld7.wrl)35事件流程#VRML V2.0 utf8nDEF view1 Viewpoint nposition 0 0 20ndescription view1nnDEF view2 Viewpoint nposition 5 0 20ndescription view2nnGroup nchildren nDEF box Transform ntranslation 5 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 1 0 0 nngeometry Box nnDEF touchB
28、ox TouchSensor nnnDEF sphere Transform ntranslation 0 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 0 1 0nngeometry Sphere nnnnDEF cone Transform ntranslation -5 0 0nchildren nShape nappearance Appearance nmaterial Material diffuseColor 0 0 1 nngeometry Cone nnnn #end of
29、 Group childrennnDEF touchScript Script neventIn SFBool touchBoxIsActiveneventOut SFBool bindView2nurl javascript:nfunction touchBoxIsActive (active) nbindView2 = TRUE;nnnROUTE touchBox.isActive TO touchScript.touchBoxIsActivenROUTE touchScript.bindView2 TO view2.set_bind36MAYA导入VRML 37MAYA导入VRML 38
30、MAYA导入VRML 39MAYA导入VRML 40MAYA导入VRML打开VRMLPAD,打开导入的模型。41MAYA导入VRML打开VRMLPAD,打开导入的模型。手动进行调节模型42MAYA导入VRMLtranslation -50 0 0 rotation 0 0 1 1.57 1、“translation”用于位置移动,此例中我们把物体沿-x轴方向移动50个单位。2、“rotation”用于转动物体。它的前三个参数定下一点,从原点到该点形成一个转动轴,第四个参数表示沿该轴转动的弧度数。此例表示把物体沿z轴转动90度.43MAYA导入带材质VRMLFor textures, by de
31、fault, Maya use absolute path (url D:/Mes documents/maya/projects/default/Map.jpg)For the moment, Webseed only reads relative path (url ./Map.jpg).One solution to solve the problem is to edit the path in Vrml file.If Vrml and Textures are at same level, the url is : url ./Map.jpg“If Vrml is at root
32、and textures in a folder, the url is : url ./Folder/Map.jpg“If Vrml and textures are in individual folders at same level the url is : url ./Folder/Map.jpg44MAYA导入带材质VRML实例中的草地图片45Text节点Text节点用来在VRML场景中创建文本造型,通常作为Shape节点geometry域的域值使用。Text节点语法格式如下:Text string length maxExtent 0.0 fontStyle NULL46Text
33、节点(续)String域的域值使用UTF-8编码设置要创建的文本内容。每一行字符都由双引号界定,引号内的回车符。Length域的域值设置每一行字符的长度,以VRML长度单位进行度量。Length域的域值要与string域的域值一一对应,即length域的一个域值控制string域的一行字符的长度。该域值缺省为空列表,即不另外设置文本行长度,渲染时由浏览器自动设置。maxExtent域的域值设置文本造型中任意一行在主要方向上的最大范围,同样以VRML长度单位进行计量,该域值必须大于等于0.0。47Text节点(续)fontStyle域用来定义文本造型的字体特征,其域值要指定另一个FontStyl
34、e节点。通常设定FontStyle节点属性可以改变由Text节点创建的文本造型的默认特征。482.FontStyle2.FontStyle节点节点FontStyle节点只用做Text节点fontStyle域的域值属性,通过设置FontStyle节点可以改变由Text节点创建的文本造型的默认字体特征。FontStyle family “SERIF” style “PLAIN” size 1.0 spacing 1.0 horizontal TRUE leftToRight TRUE topToBottom TRUE justify “BEGIN” language “”492.FontStyle
35、2.FontStyle节点节点( (续续) )Family域的域值设置Text节点文本造型使用的字符集,字符集包括”SERIF”、”SANS”和”TYPEWRITER”三种,浏览器将在规定的字符集中选择特定的字体进行渲染。Style域的域值用来设置所创建文本的字体风格,包括”PLAIN”、”BOLD”、”ITALIC”和”BOLDITALIC”四种。Size域的域值用来设置所创建字符的大小尺寸。Spacing域的域值用来设置所创建文本字符的行间距。Horizontal域的域值决定文本行是水平生长还是垂直生长。leftToRight域的域值决定文本块或其中的字符是从左到右排列还是从右到左的排列。
36、502.FontStyle2.FontStyle节点节点( (续续) )topToBottom域的域值决定文本块或其中的字符是从上到下生长还是从下到上生长。Justify域的域值决定文本造型中字符块的对齐方式,这是相对XOZ平面或YOZ平面进行定义的。Language域的域值设置VRML所使用的语言。51Text节点(续)实例BRIDGE3.wrl52Thanks!Thanks!1、字体安装与、字体安装与设置置如果您对PPT模板中的字体风格不满意,可进行批量替换,一次性更改各页面字体。1.在“开始”选项卡中,点击“替换”按钮右侧箭头,选择“替换字体”。(如下图)2.在图“替换”下拉列表中选择要更改字体。(如下图)3.在“替换为”下拉列表中选择替换字体。4.点击“替换”按钮,完成。542、替、替换模板中的模板中的图片片模板中的图片展示页面,您可以根据需要替换这些图片,下面介绍两种替换方法。方法一:更改图片方法一:更改图片1.选中模版中的图片(有些图片与其他对象进行了组合,选择时一定要选中图片本身,而不是组合)。2.单击鼠标右键,选择“更改图片”,选择要替换的图片。(如下图)注意:注意:为防止替换图片发生变形,请使用与原图长宽比例相同的图片。54赠送精美图标