| 2006-06-13 06:41:10 來(lái)自: onling 1.VRML發(fā)展的簡(jiǎn)史 VRML最初出現(xiàn)在1994年的瑞士日內(nèi)瓦的W3會(huì)議上,Tim Berners-Lee,也就是Web的奠基人,對(duì)Mark Pesce的編程工作產(chǎn)生了濃厚的興趣并邀請(qǐng)他給出名為”Cyberspace”的論文。這篇論文解釋了一個(gè)名為L(zhǎng)abyrinth的VRML 瀏覽器原型,這是Mark和Tony Parisi在1994年1月完成的一個(gè)程序。沖動(dòng)來(lái)源于William Gibson的一部名為Neuromancer的小說(shuō)。 因?yàn)槭堑谝淮卧赪eb上呈現(xiàn)出三維的界面,所以在W3會(huì)議上Labyrinth受到了特別的關(guān)注。 VRML是這樣一個(gè)縮寫詞,它的英文全稱是Virtual Reality Modeling Language。在最初的時(shí)候,M代表Markup,后來(lái)為了和HTML相區(qū)別,在W3會(huì)議之后的幾個(gè)月內(nèi)就把名稱改為了Modeling了。 Mark的那篇論文獲得了巨大的成功,所以就舉辦了名為www-vrml的mailing list(http://vag.vrml.org/www-vrml/)以進(jìn)行更為深入的討論。Mark的身份是這個(gè)mailing list的協(xié)調(diào)員。 這個(gè)郵件列表代表了VRML在學(xué)術(shù)上的發(fā)展。Gavin Bell,SGI公司的一名編程人員,在VRML團(tuán)體中享有很高的聲譽(yù),采用Open Inventor作為VRML文件的官方格式。一些人覺(jué)得應(yīng)該為這項(xiàng)新技術(shù)創(chuàng)建一個(gè)全新的格式,而另一部分人包括Mark本人則認(rèn)為如果VRML文件格式符合現(xiàn)存的所有圖象文件格式,那么它必將獲得巨大的成功。理想的結(jié)構(gòu)應(yīng)該是創(chuàng)建一個(gè)和HTML相類似而又符合專業(yè)三維設(shè)計(jì)師的需求。最終Open Inventor被采納了,Gavin Bell在VRML 1.0標(biāo)準(zhǔn)的制訂過(guò)程中做了大量的文檔工作。 在OI被大眾所接受之后,它被調(diào)整到我們現(xiàn)在所見到的VRML 1.0格式。很明顯VRML是作為一個(gè)獨(dú)立語(yǔ)言出現(xiàn)的,而不僅僅是作為一個(gè)HTML的擴(kuò)展而出現(xiàn)的。VRML對(duì)于網(wǎng)絡(luò)的要求比HTML更加嚴(yán)格并且在使用時(shí)要求更多數(shù)量的服務(wù)器。VRML 1.0標(biāo)準(zhǔn)中給出了超鏈接錨點(diǎn)(WWWAnchor)平行于HTML中的HREF,另一個(gè)語(yǔ)言上的特征是LOD(細(xì)節(jié)節(jié)點(diǎn)),它依據(jù)物體在場(chǎng)景中的位置和瀏覽器的渲染性能來(lái)為物體分配正確的瀏覽數(shù)據(jù)。 VRML 1.0和它的后繼者不太一樣,它是完全面向ASCII字符集的,被限制在處理127個(gè)字符的能力上。這個(gè)限制對(duì)于處理非羅馬語(yǔ)言的字符就會(huì)產(chǎn)生問(wèn)題。VRML 1.0標(biāo)準(zhǔn)不能處理avatar也是一個(gè)很大的失誤。 1994年的11月第二界WWW會(huì)議召開,在這次會(huì)議上提出了VRML 1.0標(biāo)準(zhǔn)。在這次會(huì)議之后,Parisi建立了自己的公司Intervista并創(chuàng)建了第一個(gè)VRML瀏覽器WorldView。SGI公司也在1995年的四月給出了它的第一個(gè)Web瀏覽器WebSpace。在當(dāng)年的夏天Netscape、NEC、DEC和Spyglass宣布對(duì)VRML進(jìn)行支持。同年的八月,VAG(VRML工程組)成立。95年的十月,VAG成員決定把工作重心放在引導(dǎo)方向,VRML 2.0由此產(chǎn)生。 VRML和Java團(tuán)體的第一次會(huì)晤是在1996年的第三次的W3會(huì)議上。 目前最新的標(biāo)準(zhǔn)是1997年制訂的VRML 97。在VRML的整個(gè)發(fā)展歷程中,出現(xiàn)了幾個(gè)變種的標(biāo)準(zhǔn):VRML+和VRML 1.1。VRML +是IBM對(duì)VRML的一種擴(kuò)展標(biāo)準(zhǔn),出現(xiàn)在1995年的八月。IBM公司準(zhǔn)備以這項(xiàng)技術(shù)對(duì)VRML服務(wù)提供大范圍的支持。VRML +準(zhǔn)備在場(chǎng)景中提供一個(gè)象avatar一樣的數(shù)字演員并提供象VRML 2.0一樣功能的交互支持。 VRML 1.1是VRML 1.0的一套擴(kuò)展集,它試圖擴(kuò)展最初版本的功能。這個(gè)標(biāo)準(zhǔn)后來(lái)被集成進(jìn)了VRML 2.0當(dāng)中。 2 VRML的基本工作原理及其基本特性 用文本信息描述三維場(chǎng)景,在Internet網(wǎng)上傳輸,在本地機(jī)上由VRML的瀏覽器解釋生成三維場(chǎng)景,解釋生成的標(biāo)準(zhǔn)規(guī)范即是VRML規(guī)范。正是基于VRML的這種工作機(jī)制,才使其可能在網(wǎng)絡(luò)應(yīng)用中有很快的發(fā)展。當(dāng)初VRML的設(shè)計(jì)者們考慮的也正是--文本描述的信息在網(wǎng)絡(luò)上的傳輸比圖形文件迅速,所以他們避開在網(wǎng)絡(luò)上直接傳輸圖形文件而改用傳輸圖形文件的文本描述信息,把復(fù)雜的處理任務(wù)交給本地機(jī)從而減輕了網(wǎng)路的負(fù)荷。 統(tǒng)分結(jié)合模式:VRML的訪問(wèn)方式基于C/S模式,其中服務(wù)器提供VRML文件,客戶通過(guò)網(wǎng)絡(luò)下載希望訪問(wèn)的文件,并通過(guò)本地平臺(tái)的瀏覽器(Viewer)對(duì)該文件描述的VR世界進(jìn)行訪問(wèn);即VRML文件包含了VR世界的邏輯結(jié)構(gòu)信息,瀏覽器根據(jù)這些信息實(shí)現(xiàn)許多VR功能。這種由服務(wù)器提供統(tǒng)一的描述信息,客戶機(jī)各自建立VR世界的訪問(wèn)方式被稱為統(tǒng)分結(jié)合模式,也是VRML的基本概念。由于瀏覽器是本地平臺(tái)提供的,從而實(shí)現(xiàn)了VR的平臺(tái)無(wú)關(guān)性。 基于ASCII碼的低帶寬可行性:VRML像HTML一樣,用ASCII文本格式來(lái)描述世界和鏈接,保證在各種平臺(tái)上通用,同時(shí)也降低了數(shù)據(jù)量,從而在低帶寬的網(wǎng)絡(luò)上也可以實(shí)現(xiàn)。 實(shí)時(shí)3D著色引擎:傳統(tǒng)的VR中使用的實(shí)時(shí)3D著色引擎在VRML中得到了更好的體現(xiàn)。這一特性把VR的建模與實(shí)時(shí)訪問(wèn)更明確的隔離開來(lái),也是VR不同于三維建模和動(dòng)畫的地方。后者預(yù)先著色,因而不能提供交互性。VRML提供了6+1個(gè)自由度,即三個(gè)方向的移動(dòng)和旋轉(zhuǎn),以及和其他3D空間的超鏈接(Anchor)。 可擴(kuò)充性:VRML作為一種標(biāo)準(zhǔn),不可能滿足所有應(yīng)用的需要。有的應(yīng)用希望交互性更強(qiáng),有的希望畫面質(zhì)量更高,有的希望VR世界更復(fù)雜。這些要求往往是相互制約的,同時(shí)又受到用戶平臺(tái)硬件性能的制約,因而VRML是可擴(kuò)充的,即可以根據(jù)需要定義自己的對(duì)象及其屬性,并通過(guò)Java語(yǔ)言等方式使瀏覽器可以解釋這種對(duì)象及其行為。 3 VRML文件格式及MIME類型 VRML文件可以包括下列四個(gè)主要成份:VRML文件頭、原型、造型和腳本、路由。并不是所有的文件都包括這些要素,唯一必須的是VRML文件頭。 VRML 2.0標(biāo)準(zhǔn)的文件頭為#VRML V2.0 utf8。這不同于1.0標(biāo)準(zhǔn)中的文件頭,1.0標(biāo)準(zhǔn)中文件只支持ASCII字符集,所以文本頭為#VRMLV1.0ASCII。為了向下兼容,VRML 2.0文件格式兼容1.0文件格式。這個(gè)文件頭有三個(gè)含義:第一、表明這個(gè)文件是一個(gè)VRML文件;第二,符合VRML 2.0版本;第三,文件使用的是utf8字符集(這是多種語(yǔ)言中鍵入字符的一種標(biāo)準(zhǔn)方式,包括英語(yǔ),也支持朝鮮語(yǔ)、日語(yǔ)和阿拉伯語(yǔ)的字符)。 VRML注釋允許在不影響VRML空間外觀情況下,在VRML中包括其他信息。可以加入對(duì)文件內(nèi)容、文件繪制的不同部分的注釋。注釋以一個(gè)#符號(hào)開始,結(jié)束于該行的最后。 VRML中包含描述空間中造型及其屬性的節(jié)點(diǎn)。這些是VRML的構(gòu)件。單個(gè)節(jié)點(diǎn)描述造型、顏色、光照、視點(diǎn)、以及造型、動(dòng)畫定時(shí)器、傳感器、內(nèi)插器等的定位和朝向等等。節(jié)點(diǎn)一般包括: 節(jié)點(diǎn)的類型(必需)。 一對(duì)括號(hào)(必需)。 括號(hào)中的一定數(shù)目描述節(jié)點(diǎn)屬性的域(可選)和域值。 括號(hào)將節(jié)點(diǎn)的域信息組織在一起。組織在括號(hào)中的域是屬于節(jié)點(diǎn)的。由節(jié)點(diǎn)及其相關(guān)域定義的造型或?qū)傩栽诳臻g中被視為一個(gè)整體。 所有的域類型,要么是單值類型,要么是多值類型。單值類型是單一的值,如一種顏色和一個(gè)數(shù)字,該類型命名以“SF”開始。多值類型可以很有值,比如顏色和數(shù)字的列表,命名以“MF”開始。當(dāng)指定多值類型時(shí),使用括號(hào)將值的列表擴(kuò)起來(lái)。 VRML文件以擴(kuò)展名.wrl或.wrz結(jié)尾,表示這是一個(gè)包含VRML空間的文件。 MIME是英文Multipurpose Internet Mail Extensions—多用途Internet郵件擴(kuò)展的縮寫。它用來(lái)定義Internet上傳送的文件內(nèi)容類型的軟件標(biāo)準(zhǔn),所有的Web瀏覽器都能夠理解MIME所定義的文件類型,并使用它們?cè)跒g覽器上自動(dòng)決定顯示的信息內(nèi)容。例如:如果一個(gè)MIME類型顯示一個(gè)文件中包含VRML文本,那么瀏覽器將格式化VRML文本使其顯示在瀏覽器的窗口中。一個(gè)MIME內(nèi)容類型由用斜杠分開的兩部分指定。第一部分說(shuō)明內(nèi)容的一般類型,象文本、音頻、視頻類型。第二部分說(shuō)明內(nèi)容的子類型,用于指定內(nèi)容使用的確切格式。 MIME內(nèi)容類型由Internet協(xié)會(huì)標(biāo)準(zhǔn)化,臨時(shí)的或最新的MIME內(nèi)容類型都以x-開始(x表示擴(kuò)展)。VRML非常新,以至于它現(xiàn)在使用下列擴(kuò)展的MIME內(nèi)容類型:x-world/x-vrml。將來(lái),VRML的內(nèi)容類型將融合進(jìn)正式的MIME標(biāo)準(zhǔn),并成為下列MIME內(nèi)容類型:model/vrml。 4 VRML中的節(jié)點(diǎn)分類 VRML中的節(jié)點(diǎn)有以下幾種類型: ·造型尺寸、外觀節(jié)點(diǎn):Shape、Appearance、Material ·原始幾何造型節(jié)點(diǎn):Box、Cone、Cylinder、Sphere ·造型編組節(jié)點(diǎn):Group、Switch、Billboard ·文本造型節(jié)點(diǎn):Text、FrontStyle ·造型定位、旋轉(zhuǎn)、縮放節(jié)點(diǎn):Transform ·內(nèi)插器節(jié)點(diǎn):TimeSensor、PositionInterpolater、OrientationInterpolater、ColorInterpolator、 ScalarInterpolator、CoordinateInterpolator ·感知節(jié)點(diǎn):TouchSensor、CylinderSensor、PlaneSensor、SphereSensor、VisibilitySensor、ProximitySensor、Collision ·點(diǎn)、線、面集節(jié)點(diǎn):PointSet、IndexedLineSet、IndexedFaceSet、Coordinate ·海拔節(jié)點(diǎn):ElevationGrid ·擠出節(jié)點(diǎn):Extrusion ·顏色、紋理、明暗節(jié)點(diǎn):Color、ImageTexture、PixelTexture、MovieTexture、Normal ·控制光源的節(jié)點(diǎn):PointLight、DirectionalLight、SpotLight ·背景節(jié)點(diǎn):Background ·聲音節(jié)點(diǎn):AudioClip、MovieTexture、Sound ·細(xì)節(jié)控制節(jié)點(diǎn):LOD ·霧節(jié)點(diǎn):Fog ·空間信息節(jié)點(diǎn):WorldInfo ·錨點(diǎn)節(jié)點(diǎn):Anchor ·腳本節(jié)點(diǎn):Script ·控制視點(diǎn)的節(jié)點(diǎn):Viewpoint、NavigationInfo ·用于創(chuàng)建新節(jié)點(diǎn)類型的節(jié)點(diǎn):PROTO、EXTERNPROTO、IS 二、VRML中較為深入的幾個(gè)概念 1.構(gòu)建VRML文件的幾種方法 構(gòu)建VRML文件一般有三種方法: 使用文本編輯器直接進(jìn)行VRML文件的書寫。這樣做的不足之處是只能創(chuàng)建比較簡(jiǎn)單的物體和場(chǎng)景。創(chuàng)建復(fù)雜場(chǎng)景的時(shí)候,幾乎不可能使用文本編輯器來(lái)直接編寫。第一是因?yàn)閳?chǎng)景之間相互關(guān)系和位置確定比較復(fù)雜,第二是對(duì)于復(fù)雜物體的建模顯得無(wú)能為力(精確到小數(shù)位兩位已經(jīng)是計(jì)算的一個(gè)極限了),第三對(duì)數(shù)學(xué)能力要求較高。 一般的方法是使用可視化編輯器來(lái)建模。使用可視化編輯器避免了直接使用文本建模時(shí)的一些問(wèn)題,例如不能生成復(fù)雜場(chǎng)景等。這些工具的一個(gè)突出的優(yōu)點(diǎn)就是使用起來(lái)相當(dāng)方便,它不需要手工地輸入大量的命令而只需要輕輕拖動(dòng)鼠標(biāo)即可實(shí)現(xiàn)大量程序才可能完成的功能。 常見的幾個(gè)可視化編輯器有:Cosmo World 2.0、Paragraph’s Virtual Home Space Builder、Home Space、Caligari’s Pioneer、Virtus WalkThrough Pro和3-D Website Builder等。 第三種方法就是使用其它常見的圖形格式進(jìn)行轉(zhuǎn)換。在Web網(wǎng)上,存在著大量的各種各樣的三維文件格式,轉(zhuǎn)換工具的作用就是在這些文件格式之間進(jìn)行轉(zhuǎn)換。需要注意的是,所有的轉(zhuǎn)換程序都有局限性,例如在轉(zhuǎn)換特定文件中的光照和紋理貼圖時(shí)就會(huì)失敗。 InterChange是Syndesis公司(http://www.threedee.com)的一項(xiàng)產(chǎn)品,它可以執(zhí)行大約五十種文件格式之間的轉(zhuǎn)換,VRML就是這五十種文件格式中的一種。 Extreme 3-D是Macromedia公司(http://www.macromedia.com)的一項(xiàng)功能非常強(qiáng)大的產(chǎn)品,它對(duì)于VRML文件的轉(zhuǎn)換功能在多媒體創(chuàng)作人員當(dāng)中是深受歡迎的。使用Extreme 3-D,你就可以通過(guò)點(diǎn)擊鼠標(biāo)來(lái)把二維模型轉(zhuǎn)換成三維模型。 DoomToVrml2使你可以在網(wǎng)上發(fā)布你自己的Doom文件,它使得你可以把Doom層次的多邊形和紋理信息轉(zhuǎn)換成為VRML 2.0格式的文件(http://vrml.sig.com/tools/ doomtovrml2 /index.html)。 VRML1to2可以將符合VRML 1.0格式的文件轉(zhuǎn)換成為符合VRML 2.0格式的文件,Sony公司(http://vrml.sgi.com/cgi-bin/vrmlToVrml2.cgi)在這個(gè)領(lǐng)域開了先河。 VRML1toVRML2來(lái)自SGI公司,它執(zhí)行的功能和上面的轉(zhuǎn)換器一樣。 2.瀏覽VRML的方法及幾種常見的VRML插件 瀏覽VRML的一般方法是使用VRML瀏覽器,也可以在IE等通用瀏覽器上通過(guò)VRML瀏覽器插件對(duì)VRML文件進(jìn)行瀏覽。 3.VRML中的動(dòng)畫效果 要理解VRML中動(dòng)畫的概念,必需首先理解路由和事件。為了使虛擬空間具有動(dòng)感,構(gòu)造指令可以包含綁定指令,綁定指令描述如何將節(jié)點(diǎn)綁定在一起。VRML綁定包括:綁定在一起的節(jié)點(diǎn)和在節(jié)點(diǎn)之間綁定的路由或者叫做路徑。綁定兩個(gè)節(jié)點(diǎn)之后,第一個(gè)節(jié)點(diǎn)通過(guò)這樣的路徑傳送給第二個(gè)節(jié)點(diǎn)的信息叫作事件。事件包含一個(gè)值。當(dāng)一個(gè)節(jié)點(diǎn)接收到一個(gè)事件時(shí),它將根據(jù)節(jié)點(diǎn)的特征開始動(dòng)畫或者其它事情。通過(guò)綁定多個(gè)節(jié)點(diǎn),用戶可以創(chuàng)建許多路由,從而使空間更加具有動(dòng)感。 大多數(shù)VRML節(jié)點(diǎn)都可以綁定在線路之上,每個(gè)節(jié)點(diǎn)都有輸入、輸出插座。一些節(jié)點(diǎn)同時(shí)具有輸入、輸出插座,而另外的一些節(jié)點(diǎn)僅有其中的一種。節(jié)點(diǎn)的輸入插座稱為eventIn,輸出插座稱為eventOut。當(dāng)鏈接一個(gè)路由時(shí),eventIn接受輸入,eventOut將事件輸出。 節(jié)點(diǎn)的每個(gè)輸入輸出路由也有類型,例如一個(gè)SFFloat類型的eventOut,當(dāng)它綁定一個(gè)路由時(shí),輸出浮點(diǎn)數(shù)。SFFloat類型的eventIn,能夠接收浮點(diǎn)值。創(chuàng)建路由之后,線路路由將處于睡眠狀態(tài),直到有一個(gè)事件從發(fā)送節(jié)點(diǎn)發(fā)送到接收節(jié)點(diǎn)。接收節(jié)點(diǎn)接收事件之后將作出反應(yīng),反應(yīng)類型依賴于: ·接收事件節(jié)點(diǎn)的類型 ·路由所綁定的節(jié)點(diǎn)輸入插座 ·事件所包含的數(shù)值 ·當(dāng) 前節(jié)點(diǎn)的活動(dòng)狀態(tài) VRML中的動(dòng)畫產(chǎn)生是由于變動(dòng)了任何一個(gè)坐標(biāo)系的位置、方向和形體比例,從而使物體按你所想的方式飛行、平移、旋轉(zhuǎn)或按比例縮放。 TimeSensor節(jié)點(diǎn)的作用象一個(gè)時(shí)鐘,它可以被用來(lái)執(zhí)行開始,停止或者其他控制動(dòng)畫的動(dòng)作。隨著時(shí)間的流逝,這個(gè)傳感器就會(huì)產(chǎn)生事件來(lái)表示時(shí)間的變化。通過(guò)將這些事件人TimeSensor節(jié)點(diǎn)的eventOut路由到其他節(jié)點(diǎn),當(dāng)TimeSensor節(jié)點(diǎn)的時(shí)鐘計(jì)時(shí)時(shí),你可以使這些節(jié)點(diǎn)發(fā)生相應(yīng)的變化。如果要使一個(gè)坐標(biāo)系平移、旋轉(zhuǎn)和按比例縮放的話,你可以將TimeSensor節(jié)點(diǎn)事件路由至PositionInerpolator和OrientationInterpolator節(jié)點(diǎn)。這些節(jié)點(diǎn)中的每一個(gè)產(chǎn)生新的位置和旋轉(zhuǎn)值,并通過(guò)他們的eventOut傳送這些值。按順序?qū)⑦@些值路由到Tranform節(jié)點(diǎn),就可以使節(jié)點(diǎn)的坐標(biāo)系隨動(dòng)畫過(guò)程的發(fā)展而發(fā)生平移、旋轉(zhuǎn)和按比例縮放。 4.VRML中的自身交互可以做到什么程度 如果要使你的空間具有交互性,你可以給一個(gè)造型附帶一個(gè)傳感器,該傳感器使用一個(gè)定點(diǎn)設(shè)備來(lái)感知觀察者的動(dòng)作。當(dāng)觀察者點(diǎn)擊到一個(gè)附帶有傳感器的造型時(shí),傳感器就輸出一個(gè)事件,這個(gè)事件就被路由到其它的節(jié)點(diǎn)來(lái)開始一個(gè)動(dòng)畫。 TouchSensor是一種用來(lái)檢測(cè)觀察者的接觸和將事件輸出的傳感器。這些輸出描述了在何時(shí)、何地,觀察者接觸到了可感知的造型。CylinderSensor、PlaneSensor和SphereSensor節(jié)點(diǎn)也可用來(lái)檢測(cè)何時(shí)觀察者接觸到一個(gè)可感知的造型,并且提供了用來(lái)改變?cè)煨臀恢煤头较虻妮敵觥? 在VRML中,你可以將一個(gè)傳感器附在一個(gè)造型上,用它來(lái)檢測(cè)觀察者的移動(dòng)、點(diǎn)擊和拖動(dòng)。當(dāng)觀察者與一個(gè)可感知的造型相互作用時(shí),你就可以把傳感器的輸出連入一個(gè)線路中,從而引起造型的移動(dòng)和動(dòng)畫的播放。 感知觀察者接近常使用三種方法:感知觀察者的可視性、感知觀察者的接近性和通過(guò)碰撞檢測(cè)。 可見傳感器從觀察者的位置和方向來(lái)感知在空間中的一個(gè)長(zhǎng)方體區(qū)域是否可視。你可以通過(guò)這些傳感器來(lái)啟動(dòng)和停止動(dòng)畫或者控制其他的動(dòng)作,這些動(dòng)作僅當(dāng)一個(gè)可感知的區(qū)域可見時(shí)是必要的。通過(guò)給出中心和尺寸,你可以指定一個(gè)由VisibilitySensor節(jié)點(diǎn)感測(cè)的空間區(qū)域。 碰撞檢測(cè)是檢測(cè)空間中觀察者與造型接近和碰撞的時(shí)間。碰撞節(jié)點(diǎn)在檢測(cè)觀察者的碰撞時(shí)做兩件事: 通過(guò)CollideTime eventOut事件輸出當(dāng)前的絕對(duì)時(shí)間。 提示瀏覽器。 以上就是VRML場(chǎng)景中的幾種交互,使用這些交互我們可以做到類似電燈開啟,自動(dòng)滑動(dòng)門等效果。但是更為復(fù)雜的交互使用它本身所提供的傳感器就顯得無(wú)能為力了,這就需要利用Script和Proto節(jié)點(diǎn)等對(duì)其進(jìn)行功能上的擴(kuò)展,最好是利用Java技術(shù)完成這些擴(kuò)展工作,因?yàn)镾un公司對(duì)VRML技術(shù)也非??春?。 |