虚拟现实与VRML-第四章VRML编程.ppt

上传人:za****8 文档编号:6318558 上传时间:2020-02-22 格式:PPT 页数:170 大小:7.23MB
返回 下载 相关 举报
虚拟现实与VRML-第四章VRML编程.ppt_第1页
第1页 / 共170页
虚拟现实与VRML-第四章VRML编程.ppt_第2页
第2页 / 共170页
虚拟现实与VRML-第四章VRML编程.ppt_第3页
第3页 / 共170页
点击查看更多>>
资源描述
山东理工大学虚拟现实实验室虚拟现实与VRML 虚拟现实与VRML 第四章VRML编程 第一节概述 VRML是什么VRML的历史VRML设计理念VRML语言概念VRML文件处理过程VRML的应用软件VRML的解决问题VRML的未来VRML使用例子 一 VRML是什么 开放式标准 VRML的最新国际标准是ISO IEC 14772 1 1997 能够被ISO接受这一点就足以说明该标准所处的地位和现实意义 现在 ISO已把它作为未来标准发展的重要模型加以开发和研究 3D多媒体 在成为国际标准以前 VRML已经是CAD 动画制作以及3D建模软件等领域的数据共享和数据发布的事实上的标准 这些软件有的直接输出VRML格式的文档 有的提供实用工具或插件实现这种变换 VRML是一种用于在Internet上构筑3D多媒体和共享虚拟世界的开放式语言标准 它具有以下4个要点 共享虚拟世界 VRML最早的动机之一就是能够在一个虚拟空间中工作和交谈 这个空间就是虚拟世界 Cyberspace 通过VRML97 已经可以部分地实现这一构想 基于Internet 与以往的3D应用不同 VRML规范考虑的第一件事就是通过Internet共享3D实体和场景 实际上 VRML规范本身就是通过Internet探讨 研究和发布的 二 VRML的历史 三 VRML设计理念 平台独立性 PlatformIndependence 扩充性 Extensibility 能运作于低频宽的网络上 Abilitytoworkwelloverlowbandwidthconnections 同时 VRML在制定上与HTML有所区别 不被视为HTML的延伸 因为两者不论在资料形式或网络需求上都有所不同 规格制定时避免了将VRML视为HTML的延伸 以免限制了VRML未来的发展 四 VRML语言概念 坐标系统 VRML采用的是卡氏右手立体坐标系统 CartesianRight HandeddimensionalSystem 测量长度和距离的基本单位是公尺 而测量角度的基本单位是弧度 从最抽象化的层次来看 VRML是用节点来实现 而节点可以是立体几何图形 MIDI咨询 JPEG图像等 节点 Nodes VRML以节点为基础 每个节点都具有以下四项特性 节点种类 如Box Cone Cylinder等一共有60种节点 域 Fields 节点可以有零或多个域值 节点名称 VRML中的节点不一定要指定名称但若指定名称则必须唯一 子节点 节点与节点之间可以有阶层式的从属关系 具有子节点的节点称为 父节点 父节点可以有零或多个子节点 节点的分类形状节点 ShapeNodes 指的是几何特性 如圆锥体 立方体 球体等 包含显示ASCII字串的节点 属性节点 Propertynodes 属性节点会影响节点呈现的方式 又细分为几何属性与外观 矩阵及转换 摄影机 光源四类 群节点 GroupNodes 集合其他节点 以单一节点的形式呈現 域 Fields 所含域的数目分为两类 只含单一的 单值 与含多个值的 多值 分別以 SF 与 MF 为名称的开头 SF开头的数值只是一个单一的数或数组 而MF开头的是一个数或数组的列表 各有11个和7个种类 例 SFBool 开关值SFFloat MFFloat 浮点值SFString MFString 字符串 五 VRML文件处理过程 1 VRML浏览器的处理模型 2 用VRML浏览器要求VRML文件的过程 3 用VRML浏览器接受VRML文件的过程 P 六 VRML的应用软件 VRML浏览器目前共有四家公司开发出支援VRML2 0的工具 分別是 1 CosmoSoftware的CosmoPlayer 2 InterVistaSoftwareInc WorldView 3 PaperInc 的WebFx 后来被Netscape公司合并以后改称Live3D 4 TemlplateGraphicsSoftwareInc 的WebSpace VRML编辑器目前有较多的编辑器 其中下面的四个编辑器使用率比较高 1 CosmoSoftware的CosmoWorld 2 ParallelGraphics的InternetSpaceBuilder ISB 3 Superscape的3DWebmaster 4 Ligos的V RealmBuilder VRB 七 VRML的解决问题 首先是VRML的文件格式 目前VRML采用的是文本格式 文件都很大 而且在很多时候包含大量的空余空间和无用信息 解决办法是为VRML文件定义一种二进制文件格式 这将提供几个优点 减少文件长度 一个好的压缩软件能把VRML压缩到原来的40 一定的保密性 由于每个人都可以看到文本文件的内容 当采用二进制文件格式时 别人在没有得到允许的情况下不能拷贝VRML场景内容的 第二个问题是要解决编码时的便利性 用已存在的编辑器作出较简单的物体时比较容易 但要做比较复杂的形状的物体时不容易 有这样的情况时 一般先用3DMax等软件做完以后 转换成VRML文件 减少调用时间 VRML在第一次加载浏览器时必须被解释以使浏览器能够构造一个内部场景结构 二进制文件更容易被高效解释 因为它包含浏览器构造内部结构的最基本的数据 八 VRML的未来 VRML继续发展 增加新的节点与功能 如用于数字化地球的GeoVRML 分布式计算的DIS等 X3D 基于XML的VRML NG 已有提案与演示 MPEG4 用于数字化影视的新技术 基于VRML VRML2002 X3D与VRML溶合的产物 并希望在2002年通过ISO认证 1995年以来 到1998年中期开始流行VRML将死亡的说法 不过更多的人则开始考虑VRML NG 新一代VRML 以及VRML与其它3D技术的溶合 总的来说 VRML有以下发展趋势 山东理工大学虚拟现实实验室虚拟现实与VRML 九 VRML使用例子 基本造型的例子 1 25k 92行 加动作的例子 9 40k 369行 加触点的列子 3 39k 81行 换视点的例子 13 6k 742行 一间屋子 376k 13891行 茶叶博物馆 515k 19508行 VRML简单场景示例 VRML文件结构 VRML文件包括 文件头 描述版本和编码集 注释 节点 Nodes 描述场景内容 域 Fields 节点的属性 值 Values 属性值 等等 其中每一部分均区分大小写 VRML文件示例 VRMLV2 0utf8 ACylinderShape appearanceAppearance materialMaterial geometryCylinder height2 0radius1 5 建立一个虚拟世界 几何形状的建立颜色 纹理 光源及环境视点 导航及用户感知动画声音程序脚本 几何形状的建立 基本体素的建立 Shape节点 形状几何由几何节点描述 如Box Cone Cylinder等 几何形状的建立 续1 1 复杂形状的建立 动物 植物 地表 机械零件 等等 可借助点 线 面来构建 对于地表等 甚至有特定的节点描述 如ElevationGrid节点 几何形状的建立 续1 2 PointSetShape appearanceAppearance geometryPointSet coordCoordinate point IndexedLineSetShape appearanceAppearance geometryIndexedLineSet coordCoordinate point coordIndex 几何形状的建立 续1 3 IndexedFaceSetShape appearanceAppearance geometryIndexedFaceSet coordCoordinate coordIndex solidTRUEccwTRUEconvexTRUE ElevationGridShape appearanceAppearance geometryElevationGrid xDimension3zDimension2xSpacing1 0zSpacing1 0height 几何形状的建立 续2 1 Extrusion 条形 管形 环形 可由Extrusion节点建立 几何形状的建立 续2 2 语法Shape appearanceAppearance geometryExtrusion crossSection spine endCapTRUEbeginCapTRUEsolidTRUEccwTRUEconvexTRUEscale orientation 几何形状的建立 续3 将简单形状组合为复杂形状组合节点 Group Switch Transform Billboard Anchor Inline 颜色 纹理 光源及环境 VRMLV2 0utf8 ACylinderShape appearanceAppearance materialMaterial geometryCylinder height2 0radius1 5 颜色 纹理 光源及环境 续1 1 Appearance节点描述外观 可通过Material节点控制材料属性 如颜色 高光 透明度等 可通过纹理映射为表面增添细节 ImageTexture PixelTexture MovieTexture 颜色 纹理 光源及环境 续1 2 Material节点示例Shape appearanceAppearance materialMaterial diffuseColor0 80 80 8emissiveColor0 10 10 1transparency0 0specularColor0 710 700 56shininess0 16ambientIntensity0 4 geometry 颜色 纹理 光源及环境 续1 3 ImageTexture节点示例Shape appearanceAppearance materialMaterial textureImageTexture url wood jpg geometry 颜色 纹理 光源及环境 续1 4 ImageTexture节点示例Shape appearanceAppearance materialMaterial texturePixelTexture image213 width height bytes0 xFFFF000 xFF0000 pixel pixelvalues geometry 颜色 纹理 光源及环境 续1 5 MovieTexture节点示例Shape appearanceAppearance materialMaterial textureMovieTexture url movie mpg loopTRUEspeed1 0startTime0 0stopTime0 0 geometry 颜色 纹理 光源及环境 续2 1 纹理图象在纹理坐标系中表示 可用texCoordIndex绑定到表面上 Shape appearanceAppearance geometryIndexedFaceSet coordCoordinate coordIndex texCoordTextureCoordinate texCoordIndex 颜色 纹理 光源及环境 续2 2 纹理变换可以改变纹理在表面上的位置 方向及大小Shape appearanceAppearance materialMaterial textureImageTexture textureTransformTextureTransform translation0 00 0rotation0 0scale3 03 0 颜色 纹理 光源及环境 续3 缺省状态下 有一个光源 在观察者头部的位置 为达到更好的视觉效果 可加入多个光源 光源类型 point directional spot 共同属性 开 关 强度 颜色 Pointandspotlights 位置 半径 衰减 Directionalandspotlights 方向光源不能投射阴影 颜色 纹理 光源及环境 续4 1 背景的作用 丰富场景背景包括 天空与地面 全景包围盒利用背景的好处 与使用模型相比 生成速度快 颜色 纹理 光源及环境 续4 2 背景示例Background skyColor 0 00 20 7 0 00 51 0 1 01 01 0 skyAngle 1 309 1 571 groundColor 0 10 100 0 0 40 250 2 0 60 600 6 groundAngle 1 309 1 571 frontUrl mountns png backUrl mountns png leftUrl mountns png rightUrl mountns png notoporbottomimages 颜色 纹理 光源及环境 续4 3 雾的作用 增强真实感 减少开发时间和绘制时间 遮挡用户视线 雾有颜色 类型和可视范围示例代码Fog color1 01 01 0fogType LINEAR visibilityRange10 0 颜色 纹理 光源及环境 续4 4 雾效果示例 视点 导航及用户感知 视点 viewpoint节点 包括 position orientation fieldOfView缺省视点位置 0 0 0 0 10 0 视点可改变文件中的第一个viewpoint即是entrypoint 示例代码Viewpoint position0 00 010 0orientation0 00 01 00 0fieldOfView0 785description EntryView descriptionforviewpointmenu 视点 导航及用户感知 续1 不同的场景需要不同的导航方式 室内 地形 CAD模型 用户可指定导航方式 walk fly examine none any用户可描述观察者的大小及运动速度示例代码NavigationInfo type WALK ANY avatarSize 0 25 1 6 0 75 speed1 0headlightTRUE 视点 导航及用户感知 续2 用户感知是通过三个传感器 Sensor 节点来实现的 VisibilitySensor 观察者能否看到某一区域 ProximitySensor 观察者是否在某一区域内 Collision 观察者是否与物体碰撞主要作用 触发动画 动画 特点 随时间改变 位置 方向 颜色等 VRML中 不断改变节点的某个域的值两个基本的控制条件 何时开始 何时结束 变化速度VRML是一种解释性语言 它既无局部变量也无全局变量用于在VRML的世界间传递信息 动画 续1 VRML采用事件 Events 作为两个不同节点间传输数据的方式 VRML的节点中 有的能生成事件 eventOut 有的可接收事件 eventIn 有的既能生成也能接收 exposedField 第一个事件一般由外部影响触发 外部影响的形式不一 如时间 用户在物体上点击等 而一旦初始事件产生后 它将触发其他事件 产生多米诺效应 动画 续2 1 要设置动画 我们需要 发送事件的节点 接收事件的节点 连接上述两个节点的路由 route 动画 续2 2 输出示例 OrientationInterpolator节点的eventOut value changed输出旋转参数值 PositionInterpolator节点的eventOut value changed输出位置 平移 参数值 TimeSensor节点的eventOut time输出时间值 动画 续2 3 输入示例 Transform节点的eventIn set translation set rotation set scale Material节点的eventIn set diffuseColor set emissiveColor set transparency 动画 续2 4 路由 ROUTE 将两个节点连接起来 输出节点的名称和eventOut域的名称 输入节点的名称和eventIn域的名称示例 ROUTEMySender rotation changedTOMyReceiver set rotationROUTE和TO必须大写 动画 续3 Demo 声音 声音将使得虚拟世界更加精彩 声音可由观察者触发 如按门铃 声音也可以是连续的背景音乐声音有两个组成部分 声源 提供声音信号 由AudioClip节点指定 发射器 emitter 将信号转换成虚拟声音 主要设置一些与声音位置等有关的参数 在Sound节点中指定 声音 续 Sound节点示例Sound sourceAudioClip url myfile wav pitch1 0startTime0 0stopTime0 0loopFALSE location0 00 00 0direction0 00 01 0intensity1 0spatializeTRUEpriority0 0minFront1 0minBack1 0maxFront10 0maxBack10 0 声音 续 声音的触发Group children Shape DEFC4TouchSensor Sound sourceDEFPitchC4AudioClip url tone1 wav pitch1 0 maxFront100 0maxBack100 0 ROUTEC4 touchTimeTOPitchC4 set startTime 程序脚本 真正意义上的交互和复杂的动画是由程序脚本来实现的 程序脚本的代码可用JavaScript Java VRMLscript或其他语言来写 JavaScript易于学习 Java功能更强 VRMLscript JavaScript 创建高效的VRML世界 用户能否与VRML世界进行流畅的交互 至少取决与以下两个因素 文件的下载速度 文件大小 绘制速度 场景描述的复杂程度两个问题 如何有效地减少文件大小 如何有效地描述场景 创建高效的VRML世界 续1 减少文件大小 消除空白间隔 浮点数取整 使用压缩文件 尽可能使用基本体素 尽可能使用已有的法向量 对于反复使用的物体 可先对其命名 DEF 然后再重复使用 USE 创建高效的VRML世界 续2 有效地描述场景 用尽可能少的多边形描述物体 在可能的情况下 多利用纹理 合理地利用光源 将LOD节点和Inline节点有机结合使用 依据物体的空间位置将其合理地放置在文件中 借助脚本隐藏多余的物体或动画 有节制地使用碰撞检测 VRML200 x X3D 一致 可预测的事件模型更一般 一致的SAI支持键盘设备支持高精度数据支持NURBS 支持曲面支持与VRML内嵌的web页面的通讯 采用XML编码 X3D 以与Web紧密集成 VRML200 x X3D 续1 1999年上半年 Web3DConsortium即发布新闻表达了建立VRML200X X3D 简称X3D 的意图 其目的是与VRML2 0向下兼容 集成XML以提高其可扩充性 VRML200 x X3D 续2 XML 可扩展标记语言 描述了一类称为XML文件的数据对象 同时也部分地描述了处理这些数据对象的计算机程序的动作 XML是SGML针对特定应用领域的一个子集 或者说是SGML的一种受限形式 根据定义 XML文件是合乎规范的SGML文件 XML的设计既考虑了实现的方便性 同时也顾及了与SGML和HTML的互操作性 W3C推荐将XML用于结构信息交换 structuredinformationexchange 目前已得到较为广泛的应用 VRML200 x X3D 续3 XML设计目标 XML应该可以直接用于因特网 Internet XML应该支持大量不同的应用 XML应该与SGML兼容 处理XML文件的程序应该容易编写 XML中的可选项应无条件地保持最少 理想状况下应该为0个 XML文件应该是人可直接阅读的 应是条理清楚的 XML的设计应快速完成 XML的设计应该是形式化的 简洁的 XML文件应易于创建 XML标记的简洁性是最后考虑的目标 VRML200 x X3D 续4 采用XML编码使得VRML有一个坚实的基础 其优点主要有 坚实的国际化基础 soundbasisforinternationalization 强有力的结构化能力 structuringcapability 基于XML的语法对于实现而言是开放的 opentoimplementation 山东理工大学虚拟现实实验室虚拟现实与VRML 第二章VRML的瀏覽與編輯 瀏覽VRML的方法 該如何瀏覽VRML呢 首先當然必須擁有可以上網的電腦 並且有安裝Microsoft的InternetExplorer瀏覽器或網景的Netscape瀏覽器 還要再安裝一個可以讓瀏覽器具備瀏覽VRML功能的外掛程式 plug in 如此就可以透過一般的瀏覽器來瀏覽VRML所建立的虛擬實境 以上所述是在PC作業平台和MSWindows作業系統的架構上 當然也可以使用其它的作業平台和作業系統 下表列出了目前常見的VRML瀏覽外掛程式的名稱 可瀏覽之3D語言和作業系統與平台 安裝實例 我們來安裝一個外掛程式的實例 產品名稱 Cortona發展公司 ParallelGraphics作業系統 Windows98程式來源 網路下載 光碟片 安裝實例 1 網路下載 網址 安裝實例 2 開始安裝 第一步 找到之前下載的cortvrml exe位置或從本書所附之光碟片尋找此檔 第二步 點選此檔後開始安裝 只需要選擇 accept 接受合約後 繼續選擇 next 第三步 選擇Typical或Custom的安裝方式 建議選擇Typical 接著按下 next 第四部 選擇DirectXrenderer 再按下 next 接著選擇 Finish 則安裝完成 安裝實例 3 安裝是否成功 第一步 選擇 開始 程式集 ParallelGraphics CortonaVRMLClient Viewsceneoftheday 第二步 這樣一個VRML瀏覽器 如果有個虛擬物件在畫面中 如此就表示安裝成功 CortonaVRML瀏覽器 CortonaVRML瀏覽器的控制功能 左側和下側各有一工具列 左側工具列 左側工具列共有兩組按鈕 一組為WALK FLY STUDY 另一組為PLAN PAN TURN ROLL 這兩組只能各選取一個按鈕 絀合的功能如下 按鈕被點選後即會發亮 選定方法之後使用滑鼠的左鍵做拖曳的動作 拖曳的越遠則轉動或移動的速度越快 VRML的編輯方法 因為VRML的檔案格式是一般文字檔 所以基本上使用任何的純文字編輯器 都可以編輯VRML的檔案 在這一節中 介紹筆者所習慣使用的VRML編輯器 叫做 VrmlPad 它是由ParallelGraphics這家公司發行的 而這家公司也就是2 1節中所介紹的VRML外掛程式Cortona是同一家 所以檔案下載的方式和之前相同 也附在本書的光碟片中 VRML的編輯方法 VrmlPad目前的版本是2 0版 下載的程式和光碟中所附的程式都是試用版 圖2 6是這個VrmlPad的編輯畫面 左半部的視窗是SceneTree 可以看出這個檔案使用了哪些節點 Node 含其包含的子節點 ChildNode 也可以換成Resources和FileList等子視窗 右半部的視窗就是VRML檔案的程式碼 每當你在右邊的視窗鍵入一個新的節點 Node 左半部的視窗SceneTree就會出先一個相同的節點 Node 圖示 VRML的編輯方法 在這個編輯器中 檔案第一行 VRMLV2 0utf8 會自動地寫上 另外它還有一項強大的功能 就是程式編寫輔助視窗 例如 當你要輸入Shape這個節點時 只輸入S時 程式編寫輔助視窗會自動出現 列出所有S開頭的節點讓你選擇 如此可以節省撰寫程式時間 也可以降低指令被撰寫錯誤的機率 所以筆者建議 剛入門的讀者使用VrmlPad來撰寫VRML的程式 山东理工大学虚拟现实实验室虚拟现实与VRML 第三章VRML的檔案架構 VRML檔案的概述 VRML的檔案就和大部分程式語言的檔案相同 是個文字敘述 textualdescription 的檔案 所以可以使用任何的文字編輯器來撰寫VRML 只要存檔時 存成file wrl即可 而 wrl 通常讀成 dotworld 由副檔名可以感受到VRML的目的就是去建造一個世界 world 圖3 1 VRML檔案的概述 這個範例是一個很典型的VRML程式 包含檔案標頭 註解 節點 欄位等 透過瀏覽器我們將可以看見程式執行的結果如圖3 1 將在下列各節對這些構成VRML檔案的基本項目做更詳細的說明與介紹 VRML的檔案標頭 範例3 1的第一行 VRMLV2 0utf8這就是VRML的檔案標頭 在任何VRML程式的第一行一定要寫上這個標頭 VRML的檔案標頭對這個檔案有以下的描述 它是個VRML的檔案 它是使用VRML2 0版的規格來完成 檔案是使用國際UTF 8的字元集合 VRML的檔案標頭 在很多語言中 UTF 8字元集合是一個標準的字元集合 包含英文 它使得VRML能夠支援英文字元 例如 A到Z 只要是能在鍵盤上找到的字元 UTF 8字元集合都包含在內 所以能鍵入任何ASCII碼在一個UTF 8的VRML檔案中 UTF 8字元集合小常識 UTF的是UCSTransformFormat的所寫 而UCS是UniversalMultiple OctetCodedCharacterSet UTF8是由ISO InternationalOrganizationforStandards 的規範 ISO IEC10646 1 1993 所提出 VRML的檔案註解 我們看到範例3 1的第二行 Drawthecolumn這是一個VRML的檔案註解 註明了這個程式的目的是 畫柱子 相信有寫過程式的人都應該知道註解的目的 它可以幫助程式設計師紀錄本段程式的意義 以便日後修正 它可以幫助程式設計師除錯 debug 時 先將部分程式轉成註解 它可以幫助非此程式設計者閱讀此程式時 了解程式的目的 在VRML的程式中 註解的使用方式就是在每行程式的開頭加上 之後該行的文字便失去了程式執行的功能 變成註解 節點 Node在本書中翻譯成節點 節點 Node 是VRML檔案中最基本的單位 每個節點還包含子節點 ChildNode 和描述節點屬性的欄位 Fields 以Shape節點為例 它是一個用來形容物件幾何型狀 GeometryNode 例如 球體 長方體 圓柱體 和外觀 AppearanceNode 例如 表面的顏色 透明度 光滑度 的節點 節點 由圖3 2可以清楚地看到Shape節點包含了許多相關的節點 Node和欄位 Field 所以Shape節點是一個非常重要的節點 將會在第四章和第五章裡再詳細地說明 節點 以下是範例3 1中 所使用的一個節點 geometryCylinder radius0 5height4 0 由以上可知一個節點通常包含 1 節點的名稱 例如 Cylinder 2 一對大括號 3 欄位和欄位值 例如 radius0 5 節點 所以在日後的各節中 將會介紹很多節點 Node 的語法 Syntax 先看下面Cone節點的語法 其中欄位值 如 SFFloat SFBoo1等的意義將在3 4節中說明 節點 關於節點的分類方法 其實並沒有一定的分類方式 但依照規範的節點種類 可以分成群節點 GroupingNodes 和子節點 ChildNodes 群節點 GroupingNodes 可以將其它的節點放在這個群節點中 例如 在範例3 1中 Transform節點是一個群節點 它包含了Shape這個子節點 Transform節點可以控制在其節點內之子節點的位置 方位和尺寸 從範例3 1中可以了解 節點 而子節點 ChildNodes 又該如何定義呢 所有的節點都可以視為子節點 當然也包括群節點 哪些節點是群節點 GroupingNodes 呢 其實並不多只有八個 在第六章將會介紹所有的群節點 由圖3 3可以看出哪些是群節點 GroupingNodes 和不是群節點的子節點 ChildNodes 本書各章的分類 是依照各節點的特徵性質來區分 共分成八類 從第四章到第十一章 如表3 1所示 欄位和欄位值 在這一節中主要是介紹欄位的語法和欄位值的型態 一個節點是由欄位和欄位值所組成 它們是用來描述節點的屬性 欄位可以分成兩類 一類是欄位只包含一個單獨的值 開頭的名稱為SF Single valuefields 另一類則是包含多重的值 開頭名稱為MF Multiple valuedfields 欄位和欄位值 多重值的欄位值是有順序地寫在中括號 裡 假如欄位沒有任何值 只需列出中括號 假如只有一個值就將中括號 省略 例如 有一個欄位值型態為MFInt32的多重欄位叫做foo 但它只含一個欄位值1 有以下表示方式 foo1foo 1 foo 1 欄位和欄位值 在範例3 1中 欄位和欄位值如下geometryCylinder radius0 5height4 0 Cylinder節點的欄位有radius和height 而欄位值 FieldValue 0 5 4 0皆為浮點數 Float 欄位值的型態為SFFloat 欄位和欄位值 在一個節點的標準語法 Syntax 中 欄位值 FieldValue SFFloat和SFBool所代表的意義是什麼呢 由以下的介紹 將可以對於各種不同欄位值的型態更加了解 SFBool 它是一個布林值或邏輯值 它的值不是TRUE就是FALSE 常被使用去開啟或關閉一個節點的性質特徵 例如 Cone這個節點的side和bottom這兩個欄位 它們的欄位值就是布林值 用來決定四週或底部是否顯現 例如 fooBoolFALSEfooBool是一個值為SFBool的欄位 它定義的布林值為FALSE 一個值為SFBool的eventOut事件 它的初始布林值為FALSE SFColor和MFColor 它總共包含三個浮點值 分別介於 0 1 之間 各自所描述的長紅 綠 藍 R G B 經由三個不同值的混合可以顯現出不同的顏色 常被使用在描述一個幾何外型或光線的顏色 例如 1 00 00 0是紅色 0 750 750 75是灰色 下面有一個R G B三原色混何參考表 表3 2 fooColor 1 00 00 0 0 01 00 0 0 00 01 0 SFColor和MFColor fooColor是一個值為MFColor的欄位 它包含三組主要的顏色 分別為紅 綠 藍 一個值為SFColor的eventOut事件 它的初始值為 000 一個值為MFColor的eventOut事件 它的初始值為空的中括號 基本上 所有的色彩皆由紅 綠 藍三種顏色混合組成的 稱之為三原色 以下為一個三原色混合的參考表 SFFloatc和MFFloat 值是浮點數 它可以是正值或負值 可以有小數點 值分布在 例如 88 75 333 111等 fooFloat 3 1415926 133 5e 5 0 00006 fooFloat是一個欄位值為MFFloat的欄位 它包含三組浮點數值 若一個值為SFFloat的eventOut事件 它的初始值為0 0 一個值為MFFloat的eventOut事件 它的初始值為空的中括號 SFImage 用來描述數位圖片的一列值 可以表示一個物體外觀的表面紋路顏色 fooImage其中為整數值 是用十六進位法 hexadecimal 表示 例如 fooImage1210 xFF0 x00 SFImage fooImage是一個值為SFImage的欄位 它定義了一個1個圖素 pixel 寬和2個圖素 Pixels 高的圖片 只含一個元件圖片 底部的圖素是白 0 xFF 頂部的圖素是黑 0 x00 一個值為SFImage的eventOut事件 它的初始值為 000 SFInt32和MFInt32 值是32bit的整數值 它可以是正值或負值 不可以有小數點 例如 123 963等 值為SFInt32和MFInt32的欄位和事件 其值可以用十進位或十六進位的格式來表示 例如 fooIt32 17 0 xE20 518820 fooInt32是一個值為MFInt32的欄位 它包含了三組整數值 十進位或十六進位 值為SFInt32的eventOut事件 它的初始值是0 值為MFInt32的eventOut事件 它的初始值是空的中括號 SFNode和MFNode 值為SFNode的欄位就是一個VRML的節點 值為MFNode的欄位可以是零或多個節點 例如 fooNode Transform transltin100 DEFCUBEBOX USECUBEUSESOME OTHER NODE fooNode是一個值為MFNode的欄位 它定義了四組節點 若一個值為SFNode的eventOut事件 它的初始值為NULL 一個值為MFNode的eventOut事件 它的初始值是空的中括號 SFRotation和MFRoation 它是由四個浮點值構成的欄位值 前三個值定義出旋轉軸 根據右手定則 圖3 4 最後一個值定義出旋轉角度 單位以弧度 radian 表示 通常被使用在定義一個物體的方位 例如 fooRotation0 01 00 03 14159265fooRotation是個值為SFRotation的欄位 它表示對y軸旋轉 180度 的意思 若一個值為SFRotation的eventOut事件 它的初始值為 010 一個值為MFRotation的eventOut事件 它的初始值是空的中括號 SFString和MFString 它的一個欄位值是由在一對雙引號中的字元所構成 string 它通常被用來表示一些選項的名字或描述事物 例如 fooString One Two Three Sheisacutegirl fooString是一個值為MFString的欄位 它包含了兩組字串 若一個值為SFString的eventOut事件 它的初始值為空的雙引號 一個值為MFString的eventOut事件 它的初始值是空的中括號 SFTime和MFTime 它是一個浮點值 時間值是使用真實世界中的絕對時間 單位是用秒來表示 從某一個特別的時間 西元1970年 1月1日 子夜00 00 00GMT 開始計算 通常是被應用在動畫中 決定何時開始或停止 例如 fooTime0 0fooTime是一個值為SFTime的欄位 表示一個0 0秒的時間 一個值為SFTime的eventOut事件 它的初始值為 1 一個值為MFTime的eventOut事件 它的初始值是空的中括號 SFVec2f和MFVec2f 欄位值是一個二維的浮點數向量 由兩個浮點數構成一組欄位值 通常被使用來表示一個2 D的位置 例如 fooVec2f 9144 91 2694 fooVec2f是一個值為MFVec2f的欄位 它包含兩組向量 一個值為SFVec2f的eventOut事件 它的初始值為 00 一個值為MFVec2f的eventOut事件 它的初始值是空的中括號 SFVec3f和MFVec3f 欄位值是一個三維的浮點數向量 由三個浮點數構成一組欄位值 通常被使用來表示一個3 D的位置 例如 fooVec3f 660 530 691122 fooVec2f是一個值為MFVec2f的欄位 它包含兩組向量 一個值為SFVec3f的eventOut事件 它的初始值為 000 一個值為MFVec3f的eventOut事件 它的初始值是空的中括號 定義節點名稱 DEF 重用節點名稱 USE 將介紹如何定義一節點的名字 首先先來想想為什麼會有這個功能呢 最大的功能就是增加重用性 當我們建構一棟房子時 房子一定會用到很多的柱 樑 窗戶和門等 可以發現絕大多數的柱 樑 窗戶和門的尺寸或外觀是相同的 只是位置不同 所以一開始 要先定義一根標準柱 一根標準樑 一個標準窗 一個標準門 把柱 樑 窗戶和門都視為單一的物件 而他們的屬性 尺寸也都設定在其中 接下來在建構這房子時 只要用組合的方式 將以上定義的各種物件放置於正確的位置即可 圖3 6是一根標準柱 圖3 7是一個標準樑 而圖3 8則是由標準柱和標準樑構成的樑柱結構系統 圖3 6標準柱 圖3 7標準樑 DEFSYNTAX DEFnode namenode type 去定義一個節點來當作重用案例 要在節點之前 加上 DEF 和所要定義的節點名稱 node name 在VRML的檔案中 可以定義任意個節點名稱 但是不能重複定義相同的名稱在同一個VRML的檔案中 node name可以是任何你覺得方便的字串名稱 有大 小寫的差異 node name叫做 ERlCA 和 erica 的意義對VRML瀏覽器來說是不一樣的 字元可以是字母 數字和底線 underscore 下列是一些合法node name的例子 DEFSYNTAX node name的標頭不可以是數字 它不可以包含不能顯現的ASCII字元 像是space tabs 它也不能使用到標點符號或是運算符號 像是雙引號 各種括號 正負號等 還有一些對VRML有特別意義的名稱也不可以使用來當作node name 例如 USESYNTAX USEnode name如果你在一個檔案中定義了一個節點名稱 可以用 USE 來重用已經定義的節點名稱在相同的檔案中 原本被定義名字的節點稱作 來源節點 originalnode 每次被重用的節點則叫做 案例 instance 所有使用案例 instance 的地方 都可以具有和來源節點 originalnode 相同的屬性 如果要改變所有案例 instance 的屬性 只要變動來源節點 originalnode 的屬性就可以了 USESYNTAX USEnode name在範例3 1中 先定義了一個Appearance的節點叫做Yellow 原本是用來形容Cylinder節點的外觀顏色 在下面Yellow又被用來形容Box節點的外觀顏色 透過範例3 1讀者應該對 DEF 和 USE 的用法有更基本的認識 事件和路由 事件 Event 節點是可以透過接收事件而改變 大部分的節點有能力去處理進入事件 eventIns 靠著接收eventIns的指示 節點可以改變目前的狀態 例如 一個節點的顏色 color 可以被改變 set color 當一個節點被改變了 它會對改變的狀態有所反應 藉著送出一些發生事件 eventOuts 例如 Color changed 事件 Event 一個exposedField能夠接收事件 像是eventIn 能夠產生事件 像是eventOut 事件是短暫的 事件值是不會被寫入VRML的檔案中 exposedField就像是欄位一樣被放置在VRML檔案中 如果一個exposeField叫做zzz 那麼它的eventln事件為set zzz eventOut事件則為zzz Changed 事件 Event 下列是一些eventIns和eventOuts的規則 大部分的eventIns都是以 set 為開頭的事件 除了addChildren和removieChildren這兩個eventIns以外 大部分的eventOuts都是以 changed 為結尾的事件 除了型態為SFBool的eventOuts 布林值的eventOuts是以 is 作為標頭 例如 isBound isActive等 eventIns和eventOuts的型態為SFTime時 就不是再使用 set 和 changed 作為連接 例如 bindTime touchTime等 路由 Route Route的功能是連接一個節點所產生的事件 eventOuts 和一個節點接收的事件 eventIns Route並不是節點 它只是簡單的語法架構 告訴一個事件該如何從某個節點到達另一個節點 換句話說 Route的目的是負責建立兩個節點間的路徑 Route可以放置在VRML檔案的最頂層 在PROTO的定義中或在會出現欄位的節點內 ROUTESyntax ROUTENodeName eventOutName cnangedTONodeName set eventInName 範例說明 透過這個範例主要的目的是讓讀者了解ROUTE的功能 對一個初學的讀者應該是不懂這範例的意思 但筆者的重點是讓讀者知道ROUTE如何建立節點間的路徑 並傳送事件 這個範例的執行結果是畫面中的球體會不斷地改變尺寸 如圖3 9所示 總結 讀完這章後 讀者對於整個VRML的檔案架構應該有所認識 一個VRML的檔案架構就是在本章各節中所介紹的內容 像是檔案標頭的定義 註解的應用 節點和欄位的定義 DEF與USE的使用時機 事件與路由的結合 在本章中 對只做了文字上的描述和範例介紹 在往後的章節中 本章所提的架構會一再地出現於範例中 讀者從本章中獲得了這些基本概念後 對接下來的學習內容應該可以有所助益 山东理工大学虚拟现实实验室虚拟现实与VRML 第十四章3D圖形的新趨勢 X3D 前言 本章的內容主要是介紹目前VRML的最新規格 X3D Extensible3D 從VRML97變成了X3D就可以發現這是3D圖形規範上一個極大的變革 而最人的改變之處 就是X3D結合了XML和VRML97 XML ExtensibleMarkupLanguage 可延伸式標記語言是目前資訊界最熱門的一個話題 它最大的功用是在於電子資料交換 EDI ElectronicDataInterchange 的貢獻 前言 X3D將XML的標記式語法定為3D圖形的標準語法 並且已經完成了X3D的文件格式定義 DTD DocumnentTypeDefinition 相信在不久的將來X3D將會成為網路上撰寫3D圖形的新寵 所以才會在本書的最後一章介紹X3D 目前世界上最新的網路3D圖形標準 Extensible3D X3D X3D的定義 X3D全名是Extensible3D X3D早期的名稱叫做VRML NG VRMLNextGeneration 它是下一代具擴充性的3D圖形規範 並且延伸了VRML97的功能 X3D名稱的由來是整合了XML ExtensibleMarkupLanguage 和VRML VirtualRealityModelingLanguage Extensible3D X3D X3D的目標 1 包含VRML97的功能 仍然可以使用X3D的技術瀏覽VRML的內容 2 與XML整合 可以使用XML來展現VRML97的功能 3 元件化 封裝經量級的核心 core 技術 使其能夠輕易地加入新的功能 4 擴充性 使用元件去增加新的節點 並且符合核心技術的執行碼 X3D採用XML作為語法的目的 語法的普遍性 VRML97對除了VRML社群以外的人是陌生的 就像VRML所使用 theOpenInventor 景緻圖形語法一樣地少為人知 可是XML則是目前世界上極佔優勢和熱門的標記式語法 網頁的整合 XML對於網頁的整合 使得網站系統的維護更加簡單 以至於更多的人有能力可以去發展網頁 不管是充實網頁內容或網頁的執行 X3D採用XML作為語法的目的 全球資訊網的整合 W3C WorldWideWebConsortium 花了很多的心力去發展XML 可以預期地XML將被NetscapeCommunicator和MicroSoftIE瀏覽器所支援 所以X3D必須採用XML 使得X3D可以和下一代的網站技術更加緊密地結合 提供X3D標準的單位 Web3DConsortium下發展X3D的主要組織 http www x3d org Shout3D為發展3D圖形的商業公司 提供X3D標準的單位 這三個不同的網站 都有各自提出X3D的新標準 所以日後X3D的標準可能會依循這三個網站的標準來發展 本書主要是以Web3DConsortium為主要的參考依據 因為它不是商業公司 而是3D圖形界中的一個正式組織 X3D的架構 X3D的架構 VRML97Profile 表示位在 CoreX3D 之上 並且提供VRML97完整的一致性 X3DLevel2Extension 表示一個延伸 去提供VRML的功能 並且使用XML OperatingSystemLibraries 為一般的系統圖書庫 用來執行核心技術和增加擴張性 可延伸式標記語言 XML的英文全名是ExtensibleMarkupLanguage 中文譯名為可延伸式標記語言 它是一個由W3C WorldWideWebConsortium 所推廣的結構化資訊交換標準 並且已經廣泛地被使用 VRML採取XML作為編碼的主要原因是因為XML具備國際化的特性 結構化的格式和模組化的物件等優勢 藉由已經被明確制定落實的XML規範 X3D以XML為語法是容易被實現的 而不需要龐大的反向工程 reverseengineering XML的格式 XML文件必須符合Well Formed或是Valid這兩種格式之一 Well Formed是一種比較簡單的格式 中文可譯為 正確的格式 構成Well Fomed格式的條件如下 必須有XML的宣告標頭 即 包含資料的元素必須有起始和終止標籤 不含資料 而且只含單一標籤的元素必須以 來作結束 必須有著一個包含所有其他元素的元素 元素可以呈巢狀但不能交錯 屬性值必須放置在引號 之內 字元 僅能用在起始標籤 而 XML的格式 Valid為另一種格式 中文可譯為 有法可考 這種格式的XML除了符合Well Formed之外 還必須包含文件格式定義 DocumentTypeDefinition DTD 個別的文件以文件格式定義 DTD 為標準來比較的過程稱作valid 如果該文件能符合DTD的限制 那這份文件即可稱為Valid 反之 則稱之為Invalid 構成的條件可以歸納如下 符合Well Formed格式的條件 文件包含DTD 可以是內部DTD的宣告或外部DTD的宣告 且XML文件的資料結構必須滿足DTD中的定義 文件格式定義 DTD DTD原文是documenttypedefinition 可譯為文件格式定義 文件格式定義提供了一連串的元素 屬性 表示法和文件中的各種實體以及彼此相互間的關係 DTD詳細地定義出一組文件結構的格式 例如 DTD可能會指定一個BOOK元素只能有一個lSBN的子元素 也只能有一個TITLE的子元素 但是可以有一個或是一個以上的AUTHOR子元素和可有可無的SUBTITLE子元素 DTD以一連串對標籤的定義 來達成這特有的元素 實體 屬性及表示法 文件格式定義 DTD DTD可以被引入到所描述的文件檔案中 也可以使用外界的URL來連結 其中以外部連結的DTD還可以讓網站上各個不同的文件共享 X3D的DTD也已經被Web3DConsortium定義出來 其URL為http www vrml org TaskGroups x3d translation x3d compromise dtd 本書所附的光碟內有X3d wmpromise dtd這個檔案 X3D和YRML97的範例比較 在本節將以VRML97的語法先寫出一個簡單的範例為範例14 1 再以X3D的語法改寫成範例14 2 而範例的內容如下 執行的結果如圖14 3 最後並針對這兩個範例加以說明比較 X3D和YRML97的範例比較 X3D和YRML97的範例比較 X3D和YRML97的範例比較 X3D和YRML97的範例比較 X3D和YRML97的範例比較 X3D和YRML97的範例比較 X3D和YRML97的範例比較 X3D和YRML97的範例比較 第四章到此结束
展开阅读全文
相关资源
相关搜索

当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!