虛擬現(xiàn)實(shí)與VRML-第四章VRML編程.ppt
《虛擬現(xiàn)實(shí)與VRML-第四章VRML編程.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《虛擬現(xiàn)實(shí)與VRML-第四章VRML編程.ppt(170頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
山東理工大學(xué)虛擬現(xiàn)實(shí)實(shí)驗(yàn)室虛擬現(xiàn)實(shí)與VRML 虛擬現(xiàn)實(shí)與VRML 第四章VRML編程 第一節(jié)概述 VRML是什么VRML的歷史VRML設(shè)計(jì)理念VRML語(yǔ)言概念VRML文件處理過(guò)程VRML的應(yīng)用軟件VRML的解決問(wèn)題VRML的未來(lái)VRML使用例子 一 VRML是什么 開(kāi)放式標(biāo)準(zhǔn) VRML的最新國(guó)際標(biāo)準(zhǔn)是ISO IEC 14772 1 1997 能夠被ISO接受這一點(diǎn)就足以說(shuō)明該標(biāo)準(zhǔn)所處的地位和現(xiàn)實(shí)意義 現(xiàn)在 ISO已把它作為未來(lái)標(biāo)準(zhǔn)發(fā)展的重要模型加以開(kāi)發(fā)和研究 3D多媒體 在成為國(guó)際標(biāo)準(zhǔn)以前 VRML已經(jīng)是CAD 動(dòng)畫(huà)制作以及3D建模軟件等領(lǐng)域的數(shù)據(jù)共享和數(shù)據(jù)發(fā)布的事實(shí)上的標(biāo)準(zhǔn) 這些軟件有的直接輸出VRML格式的文檔 有的提供實(shí)用工具或插件實(shí)現(xiàn)這種變換 VRML是一種用于在Internet上構(gòu)筑3D多媒體和共享虛擬世界的開(kāi)放式語(yǔ)言標(biāo)準(zhǔn) 它具有以下4個(gè)要點(diǎn) 共享虛擬世界 VRML最早的動(dòng)機(jī)之一就是能夠在一個(gè)虛擬空間中工作和交談 這個(gè)空間就是虛擬世界 Cyberspace 通過(guò)VRML97 已經(jīng)可以部分地實(shí)現(xiàn)這一構(gòu)想 基于Internet 與以往的3D應(yīng)用不同 VRML規(guī)范考慮的第一件事就是通過(guò)Internet共享3D實(shí)體和場(chǎng)景 實(shí)際上 VRML規(guī)范本身就是通過(guò)Internet探討 研究和發(fā)布的 二 VRML的歷史 三 VRML設(shè)計(jì)理念 平臺(tái)獨(dú)立性 PlatformIndependence 擴(kuò)充性 Extensibility 能運(yùn)作于低頻寬的網(wǎng)絡(luò)上 Abilitytoworkwelloverlowbandwidthconnections 同時(shí) VRML在制定上與HTML有所區(qū)別 不被視為HTML的延伸 因?yàn)閮烧卟徽撛谫Y料形式或網(wǎng)絡(luò)需求上都有所不同 規(guī)格制定時(shí)避免了將VRML視為HTML的延伸 以免限制了VRML未來(lái)的發(fā)展 四 VRML語(yǔ)言概念 坐標(biāo)系統(tǒng) VRML采用的是卡氏右手立體坐標(biāo)系統(tǒng) CartesianRight HandeddimensionalSystem 測(cè)量長(zhǎng)度和距離的基本單位是公尺 而測(cè)量角度的基本單位是弧度 從最抽象化的層次來(lái)看 VRML是用節(jié)點(diǎn)來(lái)實(shí)現(xiàn) 而節(jié)點(diǎn)可以是立體幾何圖形 MIDI咨詢(xún) JPEG圖像等 節(jié)點(diǎn) Nodes VRML以節(jié)點(diǎn)為基礎(chǔ) 每個(gè)節(jié)點(diǎn)都具有以下四項(xiàng)特性 節(jié)點(diǎn)種類(lèi) 如Box Cone Cylinder等一共有60種節(jié)點(diǎn) 域 Fields 節(jié)點(diǎn)可以有零或多個(gè)域值 節(jié)點(diǎn)名稱(chēng) VRML中的節(jié)點(diǎn)不一定要指定名稱(chēng)但若指定名稱(chēng)則必須唯一 子節(jié)點(diǎn) 節(jié)點(diǎn)與節(jié)點(diǎn)之間可以有階層式的從屬關(guān)系 具有子節(jié)點(diǎn)的節(jié)點(diǎn)稱(chēng)為 父節(jié)點(diǎn) 父節(jié)點(diǎn)可以有零或多個(gè)子節(jié)點(diǎn) 節(jié)點(diǎn)的分類(lèi)形狀節(jié)點(diǎn) ShapeNodes 指的是幾何特性 如圓錐體 立方體 球體等 包含顯示ASCII字串的節(jié)點(diǎn) 屬性節(jié)點(diǎn) Propertynodes 屬性節(jié)點(diǎn)會(huì)影響節(jié)點(diǎn)呈現(xiàn)的方式 又細(xì)分為幾何屬性與外觀 矩陣及轉(zhuǎn)換 攝影機(jī) 光源四類(lèi) 群節(jié)點(diǎn) GroupNodes 集合其他節(jié)點(diǎn) 以單一節(jié)點(diǎn)的形式呈現(xiàn) 域 Fields 所含域的數(shù)目分為兩類(lèi) 只含單一的 單值 與含多個(gè)值的 多值 分別以 SF 與 MF 為名稱(chēng)的開(kāi)頭 SF開(kāi)頭的數(shù)值只是一個(gè)單一的數(shù)或數(shù)組 而MF開(kāi)頭的是一個(gè)數(shù)或數(shù)組的列表 各有11個(gè)和7個(gè)種類(lèi) 例 SFBool 開(kāi)關(guān)值SFFloat MFFloat 浮點(diǎn)值SFString MFString 字符串 五 VRML文件處理過(guò)程 1 VRML瀏覽器的處理模型 2 用VRML瀏覽器要求VRML文件的過(guò)程 3 用VRML瀏覽器接受VRML文件的過(guò)程 P 六 VRML的應(yīng)用軟件 VRML瀏覽器目前共有四家公司開(kāi)發(fā)出支援VRML2 0的工具 分別是 1 CosmoSoftware的CosmoPlayer 2 InterVistaSoftwareInc WorldView 3 PaperInc 的WebFx 后來(lái)被Netscape公司合并以后改稱(chēng)Live3D 4 TemlplateGraphicsSoftwareInc 的WebSpace VRML編輯器目前有較多的編輯器 其中下面的四個(gè)編輯器使用率比較高 1 CosmoSoftware的CosmoWorld 2 ParallelGraphics的InternetSpaceBuilder ISB 3 Superscape的3DWebmaster 4 Ligos的V RealmBuilder VRB 七 VRML的解決問(wèn)題 首先是VRML的文件格式 目前VRML采用的是文本格式 文件都很大 而且在很多時(shí)候包含大量的空余空間和無(wú)用信息 解決辦法是為VRML文件定義一種二進(jìn)制文件格式 這將提供幾個(gè)優(yōu)點(diǎn) 減少文件長(zhǎng)度 一個(gè)好的壓縮軟件能把VRML壓縮到原來(lái)的40 一定的保密性 由于每個(gè)人都可以看到文本文件的內(nèi)容 當(dāng)采用二進(jìn)制文件格式時(shí) 別人在沒(méi)有得到允許的情況下不能拷貝VRML場(chǎng)景內(nèi)容的 第二個(gè)問(wèn)題是要解決編碼時(shí)的便利性 用已存在的編輯器作出較簡(jiǎn)單的物體時(shí)比較容易 但要做比較復(fù)雜的形狀的物體時(shí)不容易 有這樣的情況時(shí) 一般先用3DMax等軟件做完以后 轉(zhuǎn)換成VRML文件 減少調(diào)用時(shí)間 VRML在第一次加載瀏覽器時(shí)必須被解釋以使瀏覽器能夠構(gòu)造一個(gè)內(nèi)部場(chǎng)景結(jié)構(gòu) 二進(jìn)制文件更容易被高效解釋 因?yàn)樗瑸g覽器構(gòu)造內(nèi)部結(jié)構(gòu)的最基本的數(shù)據(jù) 八 VRML的未來(lái) VRML繼續(xù)發(fā)展 增加新的節(jié)點(diǎn)與功能 如用于數(shù)字化地球的GeoVRML 分布式計(jì)算的DIS等 X3D 基于XML的VRML NG 已有提案與演示 MPEG4 用于數(shù)字化影視的新技術(shù) 基于VRML VRML2002 X3D與VRML溶合的產(chǎn)物 并希望在2002年通過(guò)ISO認(rèn)證 1995年以來(lái) 到1998年中期開(kāi)始流行VRML將死亡的說(shuō)法 不過(guò)更多的人則開(kāi)始考慮VRML NG 新一代VRML 以及VRML與其它3D技術(shù)的溶合 總的來(lái)說(shuō) VRML有以下發(fā)展趨勢(shì) 山東理工大學(xué)虛擬現(xiàn)實(shí)實(shí)驗(yàn)室虛擬現(xiàn)實(shí)與VRML 九 VRML使用例子 基本造型的例子 1 25k 92行 加動(dòng)作的例子 9 40k 369行 加觸點(diǎn)的列子 3 39k 81行 換視點(diǎn)的例子 13 6k 742行 一間屋子 376k 13891行 茶葉博物館 515k 19508行 VRML簡(jiǎn)單場(chǎng)景示例 VRML文件結(jié)構(gòu) VRML文件包括 文件頭 描述版本和編碼集 注釋 節(jié)點(diǎn) Nodes 描述場(chǎng)景內(nèi)容 域 Fields 節(jié)點(diǎn)的屬性 值 Values 屬性值 等等 其中每一部分均區(qū)分大小寫(xiě) VRML文件示例 VRMLV2 0utf8 ACylinderShape appearanceAppearance materialMaterial geometryCylinder height2 0radius1 5 建立一個(gè)虛擬世界 幾何形狀的建立顏色 紋理 光源及環(huán)境視點(diǎn) 導(dǎo)航及用戶(hù)感知?jiǎng)赢?huà)聲音程序腳本 幾何形狀的建立 基本體素的建立 Shape節(jié)點(diǎn) 形狀幾何由幾何節(jié)點(diǎn)描述 如Box Cone Cylinder等 幾何形狀的建立 續(xù)1 1 復(fù)雜形狀的建立 動(dòng)物 植物 地表 機(jī)械零件 等等 可借助點(diǎn) 線 面來(lái)構(gòu)建 對(duì)于地表等 甚至有特定的節(jié)點(diǎn)描述 如ElevationGrid節(jié)點(diǎn) 幾何形狀的建立 續(xù)1 2 PointSetShape appearanceAppearance geometryPointSet coordCoordinate point IndexedLineSetShape appearanceAppearance geometryIndexedLineSet coordCoordinate point coordIndex 幾何形狀的建立 續(xù)1 3 IndexedFaceSetShape appearanceAppearance geometryIndexedFaceSet coordCoordinate coordIndex solidTRUEccwTRUEconvexTRUE ElevationGridShape appearanceAppearance geometryElevationGrid xDimension3zDimension2xSpacing1 0zSpacing1 0height 幾何形狀的建立 續(xù)2 1 Extrusion 條形 管形 環(huán)形 可由Extrusion節(jié)點(diǎn)建立 幾何形狀的建立 續(xù)2 2 語(yǔ)法Shape appearanceAppearance geometryExtrusion crossSection spine endCapTRUEbeginCapTRUEsolidTRUEccwTRUEconvexTRUEscale orientation 幾何形狀的建立 續(xù)3 將簡(jiǎn)單形狀組合為復(fù)雜形狀組合節(jié)點(diǎn) Group Switch Transform Billboard Anchor Inline 顏色 紋理 光源及環(huán)境 VRMLV2 0utf8 ACylinderShape appearanceAppearance materialMaterial geometryCylinder height2 0radius1 5 顏色 紋理 光源及環(huán)境 續(xù)1 1 Appearance節(jié)點(diǎn)描述外觀 可通過(guò)Material節(jié)點(diǎn)控制材料屬性 如顏色 高光 透明度等 可通過(guò)紋理映射為表面增添細(xì)節(jié) ImageTexture PixelTexture MovieTexture 顏色 紋理 光源及環(huán)境 續(xù)1 2 Material節(jié)點(diǎn)示例Shape appearanceAppearance materialMaterial diffuseColor0 80 80 8emissiveColor0 10 10 1transparency0 0specularColor0 710 700 56shininess0 16ambientIntensity0 4 geometry 顏色 紋理 光源及環(huán)境 續(xù)1 3 ImageTexture節(jié)點(diǎn)示例Shape appearanceAppearance materialMaterial textureImageTexture url wood jpg geometry 顏色 紋理 光源及環(huán)境 續(xù)1 4 ImageTexture節(jié)點(diǎn)示例Shape appearanceAppearance materialMaterial texturePixelTexture image213 width height bytes0 xFFFF000 xFF0000 pixel pixelvalues geometry 顏色 紋理 光源及環(huán)境 續(xù)1 5 MovieTexture節(jié)點(diǎn)示例Shape appearanceAppearance materialMaterial textureMovieTexture url movie mpg loopTRUEspeed1 0startTime0 0stopTime0 0 geometry 顏色 紋理 光源及環(huán)境 續(xù)2 1 紋理圖象在紋理坐標(biāo)系中表示 可用texCoordIndex綁定到表面上 Shape appearanceAppearance geometryIndexedFaceSet coordCoordinate coordIndex texCoordTextureCoordinate texCoordIndex 顏色 紋理 光源及環(huán)境 續(xù)2 2 紋理變換可以改變紋理在表面上的位置 方向及大小Shape appearanceAppearance materialMaterial textureImageTexture textureTransformTextureTransform translation0 00 0rotation0 0scale3 03 0 顏色 紋理 光源及環(huán)境 續(xù)3 缺省狀態(tài)下 有一個(gè)光源 在觀察者頭部的位置 為達(dá)到更好的視覺(jué)效果 可加入多個(gè)光源 光源類(lèi)型 point directional spot 共同屬性 開(kāi) 關(guān) 強(qiáng)度 顏色 Pointandspotlights 位置 半徑 衰減 Directionalandspotlights 方向光源不能投射陰影 顏色 紋理 光源及環(huán)境 續(xù)4 1 背景的作用 豐富場(chǎng)景背景包括 天空與地面 全景包圍盒利用背景的好處 與使用模型相比 生成速度快 顏色 紋理 光源及環(huán)境 續(xù)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 顏色 紋理 光源及環(huán)境 續(xù)4 3 霧的作用 增強(qiáng)真實(shí)感 減少開(kāi)發(fā)時(shí)間和繪制時(shí)間 遮擋用戶(hù)視線 霧有顏色 類(lèi)型和可視范圍示例代碼Fog color1 01 01 0fogType LINEAR visibilityRange10 0 顏色 紋理 光源及環(huán)境 續(xù)4 4 霧效果示例 視點(diǎn) 導(dǎo)航及用戶(hù)感知 視點(diǎn) viewpoint節(jié)點(diǎn) 包括 position orientation fieldOfView缺省視點(diǎn)位置 0 0 0 0 10 0 視點(diǎn)可改變文件中的第一個(gè)viewpoint即是entrypoint 示例代碼Viewpoint position0 00 010 0orientation0 00 01 00 0fieldOfView0 785description EntryView descriptionforviewpointmenu 視點(diǎn) 導(dǎo)航及用戶(hù)感知 續(xù)1 不同的場(chǎng)景需要不同的導(dǎo)航方式 室內(nèi) 地形 CAD模型 用戶(hù)可指定導(dǎo)航方式 walk fly examine none any用戶(hù)可描述觀察者的大小及運(yùn)動(dòng)速度示例代碼NavigationInfo type WALK ANY avatarSize 0 25 1 6 0 75 speed1 0headlightTRUE 視點(diǎn) 導(dǎo)航及用戶(hù)感知 續(xù)2 用戶(hù)感知是通過(guò)三個(gè)傳感器 Sensor 節(jié)點(diǎn)來(lái)實(shí)現(xiàn)的 VisibilitySensor 觀察者能否看到某一區(qū)域 ProximitySensor 觀察者是否在某一區(qū)域內(nèi) Collision 觀察者是否與物體碰撞主要作用 觸發(fā)動(dòng)畫(huà) 動(dòng)畫(huà) 特點(diǎn) 隨時(shí)間改變 位置 方向 顏色等 VRML中 不斷改變節(jié)點(diǎn)的某個(gè)域的值兩個(gè)基本的控制條件 何時(shí)開(kāi)始 何時(shí)結(jié)束 變化速度VRML是一種解釋性語(yǔ)言 它既無(wú)局部變量也無(wú)全局變量用于在VRML的世界間傳遞信息 動(dòng)畫(huà) 續(xù)1 VRML采用事件 Events 作為兩個(gè)不同節(jié)點(diǎn)間傳輸數(shù)據(jù)的方式 VRML的節(jié)點(diǎn)中 有的能生成事件 eventOut 有的可接收事件 eventIn 有的既能生成也能接收 exposedField 第一個(gè)事件一般由外部影響觸發(fā) 外部影響的形式不一 如時(shí)間 用戶(hù)在物體上點(diǎn)擊等 而一旦初始事件產(chǎn)生后 它將觸發(fā)其他事件 產(chǎn)生多米諾效應(yīng) 動(dòng)畫(huà) 續(xù)2 1 要設(shè)置動(dòng)畫(huà) 我們需要 發(fā)送事件的節(jié)點(diǎn) 接收事件的節(jié)點(diǎn) 連接上述兩個(gè)節(jié)點(diǎn)的路由 route 動(dòng)畫(huà) 續(xù)2 2 輸出示例 OrientationInterpolator節(jié)點(diǎn)的eventOut value changed輸出旋轉(zhuǎn)參數(shù)值 PositionInterpolator節(jié)點(diǎn)的eventOut value changed輸出位置 平移 參數(shù)值 TimeSensor節(jié)點(diǎn)的eventOut time輸出時(shí)間值 動(dòng)畫(huà) 續(xù)2 3 輸入示例 Transform節(jié)點(diǎn)的eventIn set translation set rotation set scale Material節(jié)點(diǎn)的eventIn set diffuseColor set emissiveColor set transparency 動(dòng)畫(huà) 續(xù)2 4 路由 ROUTE 將兩個(gè)節(jié)點(diǎn)連接起來(lái) 輸出節(jié)點(diǎn)的名稱(chēng)和eventOut域的名稱(chēng) 輸入節(jié)點(diǎn)的名稱(chēng)和eventIn域的名稱(chēng)示例 ROUTEMySender rotation changedTOMyReceiver set rotationROUTE和TO必須大寫(xiě) 動(dòng)畫(huà) 續(xù)3 Demo 聲音 聲音將使得虛擬世界更加精彩 聲音可由觀察者觸發(fā) 如按門(mén)鈴 聲音也可以是連續(xù)的背景音樂(lè)聲音有兩個(gè)組成部分 聲源 提供聲音信號(hào) 由AudioClip節(jié)點(diǎn)指定 發(fā)射器 emitter 將信號(hào)轉(zhuǎn)換成虛擬聲音 主要設(shè)置一些與聲音位置等有關(guān)的參數(shù) 在Sound節(jié)點(diǎn)中指定 聲音 續(xù) Sound節(jié)點(diǎn)示例Sound sourceAudioClip url myfile wav pitch1 0startTime0 0stopTime0 0loopFALSE location0 00 00 0direction0 00 01 0intensity1 0spatializeTRUEpriority0 0minFront1 0minBack1 0maxFront10 0maxBack10 0 聲音 續(xù) 聲音的觸發(fā)Group children Shape DEFC4TouchSensor Sound sourceDEFPitchC4AudioClip url tone1 wav pitch1 0 maxFront100 0maxBack100 0 ROUTEC4 touchTimeTOPitchC4 set startTime 程序腳本 真正意義上的交互和復(fù)雜的動(dòng)畫(huà)是由程序腳本來(lái)實(shí)現(xiàn)的 程序腳本的代碼可用JavaScript Java VRMLscript或其他語(yǔ)言來(lái)寫(xiě) JavaScript易于學(xué)習(xí) Java功能更強(qiáng) VRMLscript JavaScript 創(chuàng)建高效的VRML世界 用戶(hù)能否與VRML世界進(jìn)行流暢的交互 至少取決與以下兩個(gè)因素 文件的下載速度 文件大小 繪制速度 場(chǎng)景描述的復(fù)雜程度兩個(gè)問(wèn)題 如何有效地減少文件大小 如何有效地描述場(chǎng)景 創(chuàng)建高效的VRML世界 續(xù)1 減少文件大小 消除空白間隔 浮點(diǎn)數(shù)取整 使用壓縮文件 盡可能使用基本體素 盡可能使用已有的法向量 對(duì)于反復(fù)使用的物體 可先對(duì)其命名 DEF 然后再重復(fù)使用 USE 創(chuàng)建高效的VRML世界 續(xù)2 有效地描述場(chǎng)景 用盡可能少的多邊形描述物體 在可能的情況下 多利用紋理 合理地利用光源 將LOD節(jié)點(diǎn)和Inline節(jié)點(diǎn)有機(jī)結(jié)合使用 依據(jù)物體的空間位置將其合理地放置在文件中 借助腳本隱藏多余的物體或動(dòng)畫(huà) 有節(jié)制地使用碰撞檢測(cè) VRML200 x X3D 一致 可預(yù)測(cè)的事件模型更一般 一致的SAI支持鍵盤(pán)設(shè)備支持高精度數(shù)據(jù)支持NURBS 支持曲面支持與VRML內(nèi)嵌的web頁(yè)面的通訊 采用XML編碼 X3D 以與Web緊密集成 VRML200 x X3D 續(xù)1 1999年上半年 Web3DConsortium即發(fā)布新聞表達(dá)了建立VRML200X X3D 簡(jiǎn)稱(chēng)X3D 的意圖 其目的是與VRML2 0向下兼容 集成XML以提高其可擴(kuò)充性 VRML200 x X3D 續(xù)2 XML 可擴(kuò)展標(biāo)記語(yǔ)言 描述了一類(lèi)稱(chēng)為XML文件的數(shù)據(jù)對(duì)象 同時(shí)也部分地描述了處理這些數(shù)據(jù)對(duì)象的計(jì)算機(jī)程序的動(dòng)作 XML是SGML針對(duì)特定應(yīng)用領(lǐng)域的一個(gè)子集 或者說(shuō)是SGML的一種受限形式 根據(jù)定義 XML文件是合乎規(guī)范的SGML文件 XML的設(shè)計(jì)既考慮了實(shí)現(xiàn)的方便性 同時(shí)也顧及了與SGML和HTML的互操作性 W3C推薦將XML用于結(jié)構(gòu)信息交換 structuredinformationexchange 目前已得到較為廣泛的應(yīng)用 VRML200 x X3D 續(xù)3 XML設(shè)計(jì)目標(biāo) XML應(yīng)該可以直接用于因特網(wǎng) Internet XML應(yīng)該支持大量不同的應(yīng)用 XML應(yīng)該與SGML兼容 處理XML文件的程序應(yīng)該容易編寫(xiě) XML中的可選項(xiàng)應(yīng)無(wú)條件地保持最少 理想狀況下應(yīng)該為0個(gè) XML文件應(yīng)該是人可直接閱讀的 應(yīng)是條理清楚的 XML的設(shè)計(jì)應(yīng)快速完成 XML的設(shè)計(jì)應(yīng)該是形式化的 簡(jiǎn)潔的 XML文件應(yīng)易于創(chuàng)建 XML標(biāo)記的簡(jiǎn)潔性是最后考慮的目標(biāo) VRML200 x X3D 續(xù)4 采用XML編碼使得VRML有一個(gè)堅(jiān)實(shí)的基礎(chǔ) 其優(yōu)點(diǎn)主要有 堅(jiān)實(shí)的國(guó)際化基礎(chǔ) soundbasisforinternationalization 強(qiáng)有力的結(jié)構(gòu)化能力 structuringcapability 基于XML的語(yǔ)法對(duì)于實(shí)現(xiàn)而言是開(kāi)放的 opentoimplementation 山東理工大學(xué)虛擬現(xiàn)實(shí)實(shí)驗(yàn)室虛擬現(xiàn)實(shí)與VRML 第二章VRML的瀏覽與編輯 瀏覽VRML的方法 該如何瀏覽VRML呢 首先當(dāng)然必須擁有可以上網(wǎng)的電腦 並且有安裝Microsoft的InternetExplorer瀏覽器或網(wǎng)景的Netscape瀏覽器 還要再安裝一個(gè)可以讓瀏覽器具備瀏覽VRML功能的外掛程式 plug in 如此就可以透過(guò)一般的瀏覽器來(lái)瀏覽VRML所建立的虛擬實(shí)境 以上所述是在PC作業(yè)平臺(tái)和MSWindows作業(yè)系統(tǒng)的架構(gòu)上 當(dāng)然也可以使用其它的作業(yè)平臺(tái)和作業(yè)系統(tǒng) 下表列出了目前常見(jiàn)的VRML瀏覽外掛程式的名稱(chēng) 可瀏覽之3D語(yǔ)言和作業(yè)系統(tǒng)與平臺(tái) 安裝實(shí)例 我們來(lái)安裝一個(gè)外掛程式的實(shí)例 產(chǎn)品名稱(chēng) Cortona發(fā)展公司 ParallelGraphics作業(yè)系統(tǒng) Windows98程式來(lái)源 網(wǎng)路下載 光碟片 安裝實(shí)例 1 網(wǎng)路下載 網(wǎng)址 安裝實(shí)例 2 開(kāi)始安裝 第一步 找到之前下載的cortvrml exe位置或從本書(shū)所附之光碟片尋找此檔 第二步 點(diǎn)選此檔後開(kāi)始安裝 只需要選擇 accept 接受合約後 繼續(xù)選擇 next 第三步 選擇Typical或Custom的安裝方式 建議選擇Typical 接著按下 next 第四部 選擇DirectXrenderer 再按下 next 接著選擇 Finish 則安裝完成 安裝實(shí)例 3 安裝是否成功 第一步 選擇 開(kāi)始 程式集 ParallelGraphics CortonaVRMLClient Viewsceneoftheday 第二步 這樣一個(gè)VRML瀏覽器 如果有個(gè)虛擬物件在畫(huà)面中 如此就表示安裝成功 CortonaVRML瀏覽器 CortonaVRML瀏覽器的控制功能 左側(cè)和下側(cè)各有一工具列 左側(cè)工具列 左側(cè)工具列共有兩組按鈕 一組為WALK FLY STUDY 另一組為PLAN PAN TURN ROLL 這兩組只能各選取一個(gè)按鈕 絀合的功能如下 按鈕被點(diǎn)選後即會(huì)發(fā)亮 選定方法之後使用滑鼠的左鍵做拖曳的動(dòng)作 拖曳的越遠(yuǎn)則轉(zhuǎn)動(dòng)或移動(dòng)的速度越快 VRML的編輯方法 因?yàn)閂RML的檔案格式是一般文字檔 所以基本上使用任何的純文字編輯器 都可以編輯VRML的檔案 在這一節(jié)中 介紹筆者所習(xí)慣使用的VRML編輯器 叫做 VrmlPad 它是由ParallelGraphics這家公司發(fā)行的 而這家公司也就是2 1節(jié)中所介紹的VRML外掛程式Cortona是同一家 所以檔案下載的方式和之前相同 也附在本書(shū)的光碟片中 VRML的編輯方法 VrmlPad目前的版本是2 0版 下載的程式和光碟中所附的程式都是試用版 圖2 6是這個(gè)VrmlPad的編輯畫(huà)面 左半部的視窗是SceneTree 可以看出這個(gè)檔案使用了哪些節(jié)點(diǎn) Node 含其包含的子節(jié)點(diǎn) ChildNode 也可以換成Resources和FileList等子視窗 右半部的視窗就是VRML檔案的程式碼 每當(dāng)你在右邊的視窗鍵入一個(gè)新的節(jié)點(diǎn) Node 左半部的視窗SceneTree就會(huì)出先一個(gè)相同的節(jié)點(diǎn) Node 圖示 VRML的編輯方法 在這個(gè)編輯器中 檔案第一行 VRMLV2 0utf8 會(huì)自動(dòng)地寫(xiě)上 另外它還有一項(xiàng)強(qiáng)大的功能 就是程式編寫(xiě)輔助視窗 例如 當(dāng)你要輸入Shape這個(gè)節(jié)點(diǎn)時(shí) 只輸入S時(shí) 程式編寫(xiě)輔助視窗會(huì)自動(dòng)出現(xiàn) 列出所有S開(kāi)頭的節(jié)點(diǎn)讓你選擇 如此可以節(jié)省撰寫(xiě)程式時(shí)間 也可以降低指令被撰寫(xiě)錯(cuò)誤的機(jī)率 所以筆者建議 剛?cè)腴T(mén)的讀者使用VrmlPad來(lái)撰寫(xiě)VRML的程式 山東理工大學(xué)虛擬現(xiàn)實(shí)實(shí)驗(yàn)室虛擬現(xiàn)實(shí)與VRML 第三章VRML的檔案架構(gòu) VRML檔案的概述 VRML的檔案就和大部分程式語(yǔ)言的檔案相同 是個(gè)文字?jǐn)⑹?textualdescription 的檔案 所以可以使用任何的文字編輯器來(lái)撰寫(xiě)VRML 只要存檔時(shí) 存成file wrl即可 而 wrl 通常讀成 dotworld 由副檔名可以感受到VRML的目的就是去建造一個(gè)世界 world 圖3 1 VRML檔案的概述 這個(gè)範(fàn)例是一個(gè)很典型的VRML程式 包含檔案標(biāo)頭 註解 節(jié)點(diǎn) 欄位等 透過(guò)瀏覽器我們將可以看見(jiàn)程式執(zhí)行的結(jié)果如圖3 1 將在下列各節(jié)對(duì)這些構(gòu)成VRML檔案的基本項(xiàng)目做更詳細(xì)的說(shuō)明與介紹 VRML的檔案標(biāo)頭 範(fàn)例3 1的第一行 VRMLV2 0utf8這就是VRML的檔案標(biāo)頭 在任何VRML程式的第一行一定要寫(xiě)上這個(gè)標(biāo)頭 VRML的檔案標(biāo)頭對(duì)這個(gè)檔案有以下的描述 它是個(gè)VRML的檔案 它是使用VRML2 0版的規(guī)格來(lái)完成 檔案是使用國(guó)際UTF 8的字元集合 VRML的檔案標(biāo)頭 在很多語(yǔ)言中 UTF 8字元集合是一個(gè)標(biāo)準(zhǔn)的字元集合 包含英文 它使得VRML能夠支援英文字元 例如 A到Z 只要是能在鍵盤(pán)上找到的字元 UTF 8字元集合都包含在內(nèi) 所以能鍵入任何ASCII碼在一個(gè)UTF 8的VRML檔案中 UTF 8字元集合小常識(shí) UTF的是UCSTransformFormat的所寫(xiě) 而UCS是UniversalMultiple OctetCodedCharacterSet UTF8是由ISO InternationalOrganizationforStandards 的規(guī)範(fàn) ISO IEC10646 1 1993 所提出 VRML的檔案註解 我們看到範(fàn)例3 1的第二行 Drawthecolumn這是一個(gè)VRML的檔案註解 註明了這個(gè)程式的目的是 畫(huà)柱子 相信有寫(xiě)過(guò)程式的人都應(yīng)該知道註解的目的 它可以幫助程式設(shè)計(jì)師紀(jì)錄本段程式的意義 以便日後修正 它可以幫助程式設(shè)計(jì)師除錯(cuò) debug 時(shí) 先將部分程式轉(zhuǎn)成註解 它可以幫助非此程式設(shè)計(jì)者閱讀此程式時(shí) 了解程式的目的 在VRML的程式中 註解的使用方式就是在每行程式的開(kāi)頭加上 之後該行的文字便失去了程式執(zhí)行的功能 變成註解 節(jié)點(diǎn) Node在本書(shū)中翻譯成節(jié)點(diǎn) 節(jié)點(diǎn) Node 是VRML檔案中最基本的單位 每個(gè)節(jié)點(diǎn)還包含子節(jié)點(diǎn) ChildNode 和描述節(jié)點(diǎn)屬性的欄位 Fields 以Shape節(jié)點(diǎn)為例 它是一個(gè)用來(lái)形容物件幾何型狀 GeometryNode 例如 球體 長(zhǎng)方體 圓柱體 和外觀 AppearanceNode 例如 表面的顏色 透明度 光滑度 的節(jié)點(diǎn) 節(jié)點(diǎn) 由圖3 2可以清楚地看到Shape節(jié)點(diǎn)包含了許多相關(guān)的節(jié)點(diǎn) Node和欄位 Field 所以Shape節(jié)點(diǎn)是一個(gè)非常重要的節(jié)點(diǎn) 將會(huì)在第四章和第五章裡再詳細(xì)地說(shuō)明 節(jié)點(diǎn) 以下是範(fàn)例3 1中 所使用的一個(gè)節(jié)點(diǎn) geometryCylinder radius0 5height4 0 由以上可知一個(gè)節(jié)點(diǎn)通常包含 1 節(jié)點(diǎn)的名稱(chēng) 例如 Cylinder 2 一對(duì)大括號(hào) 3 欄位和欄位值 例如 radius0 5 節(jié)點(diǎn) 所以在日後的各節(jié)中 將會(huì)介紹很多節(jié)點(diǎn) Node 的語(yǔ)法 Syntax 先看下面Cone節(jié)點(diǎn)的語(yǔ)法 其中欄位值 如 SFFloat SFBoo1等的意義將在3 4節(jié)中說(shuō)明 節(jié)點(diǎn) 關(guān)於節(jié)點(diǎn)的分類(lèi)方法 其實(shí)並沒(méi)有一定的分類(lèi)方式 但依照規(guī)範(fàn)的節(jié)點(diǎn)種類(lèi) 可以分成群節(jié)點(diǎn) GroupingNodes 和子節(jié)點(diǎn) ChildNodes 群節(jié)點(diǎn) GroupingNodes 可以將其它的節(jié)點(diǎn)放在這個(gè)群節(jié)點(diǎn)中 例如 在範(fàn)例3 1中 Transform節(jié)點(diǎn)是一個(gè)群節(jié)點(diǎn) 它包含了Shape這個(gè)子節(jié)點(diǎn) Transform節(jié)點(diǎn)可以控制在其節(jié)點(diǎn)內(nèi)之子節(jié)點(diǎn)的位置 方位和尺寸 從範(fàn)例3 1中可以了解 節(jié)點(diǎn) 而子節(jié)點(diǎn) ChildNodes 又該如何定義呢 所有的節(jié)點(diǎn)都可以視為子節(jié)點(diǎn) 當(dāng)然也包括群節(jié)點(diǎn) 哪些節(jié)點(diǎn)是群節(jié)點(diǎn) GroupingNodes 呢 其實(shí)並不多只有八個(gè) 在第六章將會(huì)介紹所有的群節(jié)點(diǎn) 由圖3 3可以看出哪些是群節(jié)點(diǎn) GroupingNodes 和不是群節(jié)點(diǎn)的子節(jié)點(diǎn) ChildNodes 本書(shū)各章的分類(lèi) 是依照各節(jié)點(diǎn)的特徵性質(zhì)來(lái)區(qū)分 共分成八類(lèi) 從第四章到第十一章 如表3 1所示 欄位和欄位值 在這一節(jié)中主要是介紹欄位的語(yǔ)法和欄位值的型態(tài) 一個(gè)節(jié)點(diǎn)是由欄位和欄位值所組成 它們是用來(lái)描述節(jié)點(diǎn)的屬性 欄位可以分成兩類(lèi) 一類(lèi)是欄位只包含一個(gè)單獨(dú)的值 開(kāi)頭的名稱(chēng)為SF Single valuefields 另一類(lèi)則是包含多重的值 開(kāi)頭名稱(chēng)為MF Multiple valuedfields 欄位和欄位值 多重值的欄位值是有順序地寫(xiě)在中括號(hào) 裡 假如欄位沒(méi)有任何值 只需列出中括號(hào) 假如只有一個(gè)值就將中括號(hào) 省略 例如 有一個(gè)欄位值型態(tài)為MFInt32的多重欄位叫做foo 但它只含一個(gè)欄位值1 有以下表示方式 foo1foo 1 foo 1 欄位和欄位值 在範(fàn)例3 1中 欄位和欄位值如下geometryCylinder radius0 5height4 0 Cylinder節(jié)點(diǎn)的欄位有radius和height 而欄位值 FieldValue 0 5 4 0皆為浮點(diǎn)數(shù) Float 欄位值的型態(tài)為SFFloat 欄位和欄位值 在一個(gè)節(jié)點(diǎn)的標(biāo)準(zhǔn)語(yǔ)法 Syntax 中 欄位值 FieldValue SFFloat和SFBool所代表的意義是什麼呢 由以下的介紹 將可以對(duì)於各種不同欄位值的型態(tài)更加了解 SFBool 它是一個(gè)布林值或邏輯值 它的值不是TRUE就是FALSE 常被使用去開(kāi)啟或關(guān)閉一個(gè)節(jié)點(diǎn)的性質(zhì)特徵 例如 Cone這個(gè)節(jié)點(diǎn)的side和bottom這兩個(gè)欄位 它們的欄位值就是布林值 用來(lái)決定四週或底部是否顯現(xiàn) 例如 fooBoolFALSEfooBool是一個(gè)值為SFBool的欄位 它定義的布林值為FALSE 一個(gè)值為SFBool的eventOut事件 它的初始布林值為FALSE SFColor和MFColor 它總共包含三個(gè)浮點(diǎn)值 分別介於 0 1 之間 各自所描述的長(zhǎng)紅 綠 藍(lán) R G B 經(jīng)由三個(gè)不同值的混合可以顯現(xiàn)出不同的顏色 常被使用在描述一個(gè)幾何外型或光線的顏色 例如 1 00 00 0是紅色 0 750 750 75是灰色 下面有一個(gè)R G B三原色混何參考表 表3 2 fooColor 1 00 00 0 0 01 00 0 0 00 01 0 SFColor和MFColor fooColor是一個(gè)值為MFColor的欄位 它包含三組主要的顏色 分別為紅 綠 藍(lán) 一個(gè)值為SFColor的eventOut事件 它的初始值為 000 一個(gè)值為MFColor的eventOut事件 它的初始值為空的中括號(hào) 基本上 所有的色彩皆由紅 綠 藍(lán)三種顏色混合組成的 稱(chēng)之為三原色 以下為一個(gè)三原色混合的參考表 SFFloatc和MFFloat 值是浮點(diǎn)數(shù) 它可以是正值或負(fù)值 可以有小數(shù)點(diǎn) 值分布在 例如 88 75 333 111等 fooFloat 3 1415926 133 5e 5 0 00006 fooFloat是一個(gè)欄位值為MFFloat的欄位 它包含三組浮點(diǎn)數(shù)值 若一個(gè)值為SFFloat的eventOut事件 它的初始值為0 0 一個(gè)值為MFFloat的eventOut事件 它的初始值為空的中括號(hào) SFImage 用來(lái)描述數(shù)位圖片的一列值 可以表示一個(gè)物體外觀的表面紋路顏色 fooImage其中為整數(shù)值 是用十六進(jìn)位法 hexadecimal 表示 例如 fooImage1210 xFF0 x00 SFImage fooImage是一個(gè)值為SFImage的欄位 它定義了一個(gè)1個(gè)圖素 pixel 寬和2個(gè)圖素 Pixels 高的圖片 只含一個(gè)元件圖片 底部的圖素是白 0 xFF 頂部的圖素是黑 0 x00 一個(gè)值為SFImage的eventOut事件 它的初始值為 000 SFInt32和MFInt32 值是32bit的整數(shù)值 它可以是正值或負(fù)值 不可以有小數(shù)點(diǎn) 例如 123 963等 值為SFInt32和MFInt32的欄位和事件 其值可以用十進(jìn)位或十六進(jìn)位的格式來(lái)表示 例如 fooIt32 17 0 xE20 518820 fooInt32是一個(gè)值為MFInt32的欄位 它包含了三組整數(shù)值 十進(jìn)位或十六進(jìn)位 值為SFInt32的eventOut事件 它的初始值是0 值為MFInt32的eventOut事件 它的初始值是空的中括號(hào) SFNode和MFNode 值為SFNode的欄位就是一個(gè)VRML的節(jié)點(diǎn) 值為MFNode的欄位可以是零或多個(gè)節(jié)點(diǎn) 例如 fooNode Transform transltin100 DEFCUBEBOX USECUBEUSESOME OTHER NODE fooNode是一個(gè)值為MFNode的欄位 它定義了四組節(jié)點(diǎn) 若一個(gè)值為SFNode的eventOut事件 它的初始值為NULL 一個(gè)值為MFNode的eventOut事件 它的初始值是空的中括號(hào) SFRotation和MFRoation 它是由四個(gè)浮點(diǎn)值構(gòu)成的欄位值 前三個(gè)值定義出旋轉(zhuǎn)軸 根據(jù)右手定則 圖3 4 最後一個(gè)值定義出旋轉(zhuǎn)角度 單位以弧度 radian 表示 通常被使用在定義一個(gè)物體的方位 例如 fooRotation0 01 00 03 14159265fooRotation是個(gè)值為SFRotation的欄位 它表示對(duì)y軸旋轉(zhuǎn) 180度 的意思 若一個(gè)值為SFRotation的eventOut事件 它的初始值為 010 一個(gè)值為MFRotation的eventOut事件 它的初始值是空的中括號(hào) SFString和MFString 它的一個(gè)欄位值是由在一對(duì)雙引號(hào)中的字元所構(gòu)成 string 它通常被用來(lái)表示一些選項(xiàng)的名字或描述事物 例如 fooString One Two Three Sheisacutegirl fooString是一個(gè)值為MFString的欄位 它包含了兩組字串 若一個(gè)值為SFString的eventOut事件 它的初始值為空的雙引號(hào) 一個(gè)值為MFString的eventOut事件 它的初始值是空的中括號(hào) SFTime和MFTime 它是一個(gè)浮點(diǎn)值 時(shí)間值是使用真實(shí)世界中的絕對(duì)時(shí)間 單位是用秒來(lái)表示 從某一個(gè)特別的時(shí)間 西元1970年 1月1日 子夜00 00 00GMT 開(kāi)始計(jì)算 通常是被應(yīng)用在動(dòng)畫(huà)中 決定何時(shí)開(kāi)始或停止 例如 fooTime0 0fooTime是一個(gè)值為SFTime的欄位 表示一個(gè)0 0秒的時(shí)間 一個(gè)值為SFTime的eventOut事件 它的初始值為 1 一個(gè)值為MFTime的eventOut事件 它的初始值是空的中括號(hào) SFVec2f和MFVec2f 欄位值是一個(gè)二維的浮點(diǎn)數(shù)向量 由兩個(gè)浮點(diǎn)數(shù)構(gòu)成一組欄位值 通常被使用來(lái)表示一個(gè)2 D的位置 例如 fooVec2f 9144 91 2694 fooVec2f是一個(gè)值為MFVec2f的欄位 它包含兩組向量 一個(gè)值為SFVec2f的eventOut事件 它的初始值為 00 一個(gè)值為MFVec2f的eventOut事件 它的初始值是空的中括號(hào) SFVec3f和MFVec3f 欄位值是一個(gè)三維的浮點(diǎn)數(shù)向量 由三個(gè)浮點(diǎn)數(shù)構(gòu)成一組欄位值 通常被使用來(lái)表示一個(gè)3 D的位置 例如 fooVec3f 660 530 691122 fooVec2f是一個(gè)值為MFVec2f的欄位 它包含兩組向量 一個(gè)值為SFVec3f的eventOut事件 它的初始值為 000 一個(gè)值為MFVec3f的eventOut事件 它的初始值是空的中括號(hào) 定義節(jié)點(diǎn)名稱(chēng) DEF 重用節(jié)點(diǎn)名稱(chēng) USE 將介紹如何定義一節(jié)點(diǎn)的名字 首先先來(lái)想想為什麼會(huì)有這個(gè)功能呢 最大的功能就是增加重用性 當(dāng)我們建構(gòu)一棟房子時(shí) 房子一定會(huì)用到很多的柱 樑 窗戶(hù)和門(mén)等 可以發(fā)現(xiàn)絕大多數(shù)的柱 樑 窗戶(hù)和門(mén)的尺寸或外觀是相同的 只是位置不同 所以一開(kāi)始 要先定義一根標(biāo)準(zhǔn)柱 一根標(biāo)準(zhǔn)樑 一個(gè)標(biāo)準(zhǔn)窗 一個(gè)標(biāo)準(zhǔn)門(mén) 把柱 樑 窗戶(hù)和門(mén)都視為單一的物件 而他們的屬性 尺寸也都設(shè)定在其中 接下來(lái)在建構(gòu)這房子時(shí) 只要用組合的方式 將以上定義的各種物件放置於正確的位置即可 圖3 6是一根標(biāo)準(zhǔn)柱 圖3 7是一個(gè)標(biāo)準(zhǔn)樑 而圖3 8則是由標(biāo)準(zhǔn)柱和標(biāo)準(zhǔn)樑構(gòu)成的樑柱結(jié)構(gòu)系統(tǒng) 圖3 6標(biāo)準(zhǔn)柱 圖3 7標(biāo)準(zhǔn)樑 DEFSYNTAX DEFnode namenode type 去定義一個(gè)節(jié)點(diǎn)來(lái)當(dāng)作重用案例 要在節(jié)點(diǎn)之前 加上 DEF 和所要定義的節(jié)點(diǎn)名稱(chēng) node name 在VRML的檔案中 可以定義任意個(gè)節(jié)點(diǎn)名稱(chēng) 但是不能重複定義相同的名稱(chēng)在同一個(gè)VRML的檔案中 node name可以是任何你覺(jué)得方便的字串名稱(chēng) 有大 小寫(xiě)的差異 node name叫做 ERlCA 和 erica 的意義對(duì)VRML瀏覽器來(lái)說(shuō)是不一樣的 字元可以是字母 數(shù)字和底線 underscore 下列是一些合法node name的例子 DEFSYNTAX node name的標(biāo)頭不可以是數(shù)字 它不可以包含不能顯現(xiàn)的ASCII字元 像是space tabs 它也不能使用到標(biāo)點(diǎn)符號(hào)或是運(yùn)算符號(hào) 像是雙引號(hào) 各種括號(hào) 正負(fù)號(hào)等 還有一些對(duì)VRML有特別意義的名稱(chēng)也不可以使用來(lái)當(dāng)作node name 例如 USESYNTAX USEnode name如果你在一個(gè)檔案中定義了一個(gè)節(jié)點(diǎn)名稱(chēng) 可以用 USE 來(lái)重用已經(jīng)定義的節(jié)點(diǎn)名稱(chēng)在相同的檔案中 原本被定義名字的節(jié)點(diǎn)稱(chēng)作 來(lái)源節(jié)點(diǎn) originalnode 每次被重用的節(jié)點(diǎn)則叫做 案例 instance 所有使用案例 instance 的地方 都可以具有和來(lái)源節(jié)點(diǎn) originalnode 相同的屬性 如果要改變所有案例 instance 的屬性 只要變動(dòng)來(lái)源節(jié)點(diǎn) originalnode 的屬性就可以了 USESYNTAX USEnode name在範(fàn)例3 1中 先定義了一個(gè)Appearance的節(jié)點(diǎn)叫做Yellow 原本是用來(lái)形容Cylinder節(jié)點(diǎn)的外觀顏色 在下面Yellow又被用來(lái)形容Box節(jié)點(diǎn)的外觀顏色 透過(guò)範(fàn)例3 1讀者應(yīng)該對(duì) DEF 和 USE 的用法有更基本的認(rèn)識(shí) 事件和路由 事件 Event 節(jié)點(diǎn)是可以透過(guò)接收事件而改變 大部分的節(jié)點(diǎn)有能力去處理進(jìn)入事件 eventIns 靠著接收eventIns的指示 節(jié)點(diǎn)可以改變目前的狀態(tài) 例如 一個(gè)節(jié)點(diǎn)的顏色 color 可以被改變 set color 當(dāng)一個(gè)節(jié)點(diǎn)被改變了 它會(huì)對(duì)改變的狀態(tài)有所反應(yīng) 藉著送出一些發(fā)生事件 eventOuts 例如 Color changed 事件 Event 一個(gè)exposedField能夠接收事件 像是eventIn 能夠產(chǎn)生事件 像是eventOut 事件是短暫的 事件值是不會(huì)被寫(xiě)入VRML的檔案中 exposedField就像是欄位一樣被放置在VRML檔案中 如果一個(gè)exposeField叫做zzz 那麼它的eventln事件為set zzz eventOut事件則為zzz Changed 事件 Event 下列是一些eventIns和eventOuts的規(guī)則 大部分的eventIns都是以 set 為開(kāi)頭的事件 除了addChildren和removieChildren這兩個(gè)eventIns以外 大部分的eventOuts都是以 changed 為結(jié)尾的事件 除了型態(tài)為SFBool的eventOuts 布林值的eventOuts是以 is 作為標(biāo)頭 例如 isBound isActive等 eventIns和eventOuts的型態(tài)為SFTime時(shí) 就不是再使用 set 和 changed 作為連接 例如 bindTime touchTime等 路由 Route Route的功能是連接一個(gè)節(jié)點(diǎn)所產(chǎn)生的事件 eventOuts 和一個(gè)節(jié)點(diǎn)接收的事件 eventIns Route並不是節(jié)點(diǎn) 它只是簡(jiǎn)單的語(yǔ)法架構(gòu) 告訴一個(gè)事件該如何從某個(gè)節(jié)點(diǎn)到達(dá)另一個(gè)節(jié)點(diǎn) 換句話說(shuō) Route的目的是負(fù)責(zé)建立兩個(gè)節(jié)點(diǎn)間的路徑 Route可以放置在VRML檔案的最頂層 在PROTO的定義中或在會(huì)出現(xiàn)欄位的節(jié)點(diǎn)內(nèi) ROUTESyntax ROUTENodeName eventOutName cnangedTONodeName set eventInName 範(fàn)例說(shuō)明 透過(guò)這個(gè)範(fàn)例主要的目的是讓讀者了解ROUTE的功能 對(duì)一個(gè)初學(xué)的讀者應(yīng)該是不懂這範(fàn)例的意思 但筆者的重點(diǎn)是讓讀者知道ROUTE如何建立節(jié)點(diǎn)間的路徑 並傳送事件 這個(gè)範(fàn)例的執(zhí)行結(jié)果是畫(huà)面中的球體會(huì)不斷地改變尺寸 如圖3 9所示 總結(jié) 讀完這章後 讀者對(duì)於整個(gè)VRML的檔案架構(gòu)應(yīng)該有所認(rèn)識(shí) 一個(gè)VRML的檔案架構(gòu)就是在本章各節(jié)中所介紹的內(nèi)容 像是檔案標(biāo)頭的定義 註解的應(yīng)用 節(jié)點(diǎn)和欄位的定義 DEF與USE的使用時(shí)機(jī) 事件與路由的結(jié)合 在本章中 對(duì)只做了文字上的描述和範(fàn)例介紹 在往後的章節(jié)中 本章所提的架構(gòu)會(huì)一再地出現(xiàn)於範(fàn)例中 讀者從本章中獲得了這些基本概念後 對(duì)接下來(lái)的學(xué)習(xí)內(nèi)容應(yīng)該可以有所助益 山東理工大學(xué)虛擬現(xiàn)實(shí)實(shí)驗(yàn)室虛擬現(xiàn)實(shí)與VRML 第十四章3D圖形的新趨勢(shì) X3D 前言 本章的內(nèi)容主要是介紹目前VRML的最新規(guī)格 X3D Extensible3D 從VRML97變成了X3D就可以發(fā)現(xiàn)這是3D圖形規(guī)範(fàn)上一個(gè)極大的變革 而最人的改變之處 就是X3D結(jié)合了XML和VRML97 XML ExtensibleMarkupLanguage 可延伸式標(biāo)記語(yǔ)言是目前資訊界最熱門(mén)的一個(gè)話題 它最大的功用是在於電子資料交換 EDI ElectronicDataInterchange 的貢獻(xiàn) 前言 X3D將XML的標(biāo)記式語(yǔ)法定為3D圖形的標(biāo)準(zhǔn)語(yǔ)法 並且已經(jīng)完成了X3D的文件格式定義 DTD DocumnentTypeDefinition 相信在不久的將來(lái)X3D將會(huì)成為網(wǎng)路上撰寫(xiě)3D圖形的新寵 所以才會(huì)在本書(shū)的最後一章介紹X3D 目前世界上最新的網(wǎng)路3D圖形標(biāo)準(zhǔn) Extensible3D X3D X3D的定義 X3D全名是Extensible3D X3D早期的名稱(chēng)叫做VRML NG VRMLNextGeneration 它是下一代具擴(kuò)充性的3D圖形規(guī)範(fàn) 並且延伸了VRML97的功能 X3D名稱(chēng)的由來(lái)是整合了XML ExtensibleMarkupLanguage 和VRML VirtualRealityModelingLanguage Extensible3D X3D X3D的目標(biāo) 1 包含VRML97的功能 仍然可以使用X3D的技術(shù)瀏覽VRML的內(nèi)容 2 與XML整合 可以使用XML來(lái)展現(xiàn)VRML97的功能 3 元件化 封裝經(jīng)量級(jí)的核心 core 技術(shù) 使其能夠輕易地加入新的功能 4 擴(kuò)充性 使用元件去增加新的節(jié)點(diǎn) 並且符合核心技術(shù)的執(zhí)行碼 X3D採(cǎi)用XML作為語(yǔ)法的目的 語(yǔ)法的普遍性 VRML97對(duì)除了VRML社群以外的人是陌生的 就像VRML所使用 theOpenInventor 景緻圖形語(yǔ)法一樣地少為人知 可是XML則是目前世界上極佔(zhàn)優(yōu)勢(shì)和熱門(mén)的標(biāo)記式語(yǔ)法 網(wǎng)頁(yè)的整合 XML對(duì)於網(wǎng)頁(yè)的整合 使得網(wǎng)站系統(tǒng)的維護(hù)更加簡(jiǎn)單 以至於更多的人有能力可以去發(fā)展網(wǎng)頁(yè) 不管是充實(shí)網(wǎng)頁(yè)內(nèi)容或網(wǎng)頁(yè)的執(zhí)行 X3D採(cǎi)用XML作為語(yǔ)法的目的 全球資訊網(wǎng)的整合 W3C WorldWideWebConsortium 花了很多的心力去發(fā)展XML 可以預(yù)期地XML將被NetscapeCommunicator和MicroSoftIE瀏覽器所支援 所以X3D必須採(cǎi)用XML 使得X3D可以和下一代的網(wǎng)站技術(shù)更加緊密地結(jié)合 提供X3D標(biāo)準(zhǔn)的單位 Web3DConsortium下發(fā)展X3D的主要組織 http www x3d org Shout3D為發(fā)展3D圖形的商業(yè)公司 提供X3D標(biāo)準(zhǔn)的單位 這三個(gè)不同的網(wǎng)站 都有各自提出X3D的新標(biāo)準(zhǔn) 所以日後X3D的標(biāo)準(zhǔn)可能會(huì)依循這三個(gè)網(wǎng)站的標(biāo)準(zhǔn)來(lái)發(fā)展 本書(shū)主要是以Web3DConsortium為主要的參考依據(jù) 因?yàn)樗皇巧虡I(yè)公司 而是3D圖形界中的一個(gè)正式組織 X3D的架構(gòu) X3D的架構(gòu) VRML97Profile 表示位在 CoreX3D 之上 並且提供VRML97完整的一致性 X3DLevel2Extension 表示一個(gè)延伸 去提供VRML的功能 並且使用XML OperatingSystemLibraries 為一般的系統(tǒng)圖書(shū)庫(kù) 用來(lái)執(zhí)行核心技術(shù)和增加擴(kuò)張性 可延伸式標(biāo)記語(yǔ)言 XML的英文全名是ExtensibleMarkupLanguage 中文譯名為可延伸式標(biāo)記語(yǔ)言 它是一個(gè)由W3C WorldWideWebConsortium 所推廣的結(jié)構(gòu)化資訊交換標(biāo)準(zhǔn) 並且已經(jīng)廣泛地被使用 VRML採(cǎi)取XML作為編碼的主要原因是因?yàn)閄ML具備國(guó)際化的特性 結(jié)構(gòu)化的格式和模組化的物件等優(yōu)勢(shì) 藉由已經(jīng)被明確制定落實(shí)的XML規(guī)範(fàn) X3D以XML為語(yǔ)法是容易被實(shí)現(xiàn)的 而不需要龐大的反向工程 reverseengineering XML的格式 XML文件必須符合Well Formed或是Valid這兩種格式之一 Well Formed是一種比較簡(jiǎn)單的格式 中文可譯為 正確的格式 構(gòu)成Well Fomed格式的條件如下 必須有XML的宣告標(biāo)頭 即 包含資料的元素必須有起始和終止標(biāo)籤 不含資料 而且只含單一標(biāo)籤的元素必須以 來(lái)作結(jié)束 必須有著一個(gè)包含所有其他元素的元素 元素可以呈巢狀但不能交錯(cuò) 屬性值必須放置在引號(hào) 之內(nèi) 字元 僅能用在起始標(biāo)籤 而 XML的格式 Valid為另一種格式 中文可譯為 有法可考 這種格式的XML除了符合Well Formed之外 還必須包含文件格式定義 DocumentTypeDefinition DTD 個(gè)別的文件以文件格式定義 DTD 為標(biāo)準(zhǔn)來(lái)比較的過(guò)程稱(chēng)作valid 如果該文件能符合DTD的限制 那這份文件即可稱(chēng)為Valid 反之 則稱(chēng)之為Invalid 構(gòu)成的條件可以歸納如下 符合Well Formed格式的條件 文件包含DTD 可以是內(nèi)部DTD的宣告或外部DTD的宣告 且XML文件的資料結(jié)構(gòu)必須滿(mǎn)足DTD中的定義 文件格式定義 DTD DTD原文是documenttypedefinition 可譯為文件格式定義 文件格式定義提供了一連串的元素 屬性 表示法和文件中的各種實(shí)體以及彼此相互間的關(guān)係 DTD詳細(xì)地定義出一組文件結(jié)構(gòu)的格式 例如 DTD可能會(huì)指定一個(gè)BOOK元素只能有一個(gè)lSBN的子元素 也只能有一個(gè)TITLE的子元素 但是可以有一個(gè)或是一個(gè)以上的AUTHOR子元素和可有可無(wú)的SUBTITLE子元素 DTD以一連串對(duì)標(biāo)籤的定義 來(lái)達(dá)成這特有的元素 實(shí)體 屬性及表示法 文件格式定義 DTD DTD可以被引入到所描述的文件檔案中 也可以使用外界的URL來(lái)連結(jié) 其中以外部連結(jié)的DTD還可以讓網(wǎng)站上各個(gè)不同的文件共享 X3D的DTD也已經(jīng)被Web3DConsortium定義出來(lái) 其URL為http www vrml org TaskGroups x3d translation x3d compromise dtd 本書(shū)所附的光碟內(nèi)有X3d wmpromise dtd這個(gè)檔案 X3D和YRML97的範(fàn)例比較 在本節(jié)將以VRML97的語(yǔ)法先寫(xiě)出一個(gè)簡(jiǎn)單的範(fàn)例為範(fàn)例14 1 再以X3D的語(yǔ)法改寫(xiě)成範(fàn)例14 2 而範(fàn)例的內(nèi)容如下 執(zhí)行的結(jié)果如圖14 3 最後並針對(duì)這兩個(gè)範(fàn)例加以說(shuō)明比較 X3D和YRML97的範(fàn)例比較 X3D和YRML97的範(fàn)例比較 X3D和YRML97的範(fàn)例比較 X3D和YRML97的範(fàn)例比較 X3D和YRML97的範(fàn)例比較 X3D和YRML97的範(fàn)例比較 X3D和YRML97的範(fàn)例比較 X3D和YRML97的範(fàn)例比較 第四章到此結(jié)束- 1.請(qǐng)仔細(xì)閱讀文檔,確保文檔完整性,對(duì)于不預(yù)覽、不比對(duì)內(nèi)容而直接下載帶來(lái)的問(wèn)題本站不予受理。
- 2.下載的文檔,不會(huì)出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請(qǐng)點(diǎn)此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁(yè)顯示word圖標(biāo),表示該P(yáng)PT已包含配套word講稿。雙擊word圖標(biāo)可打開(kāi)word文檔。
- 特殊限制:
部分文檔作品中含有的國(guó)旗、國(guó)徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計(jì)者僅對(duì)作品中獨(dú)創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 虛擬現(xiàn)實(shí) VRML 第四 編程
鏈接地址:http://ioszen.com/p-6318558.html