VRML(Virtual Reality Modeling Language)虛擬現實建模語言

文章來源:http://www.douban.com/group/topic/1121838/

1.VRML發展的簡史
VRML最初出現在1994年的瑞士日內瓦的W3會議上,Tim Berners-Lee,也就是Web的奠基人,對Mark Pesce的編程工作產生了濃厚的興趣並邀請他給出名爲”Cyberspace”的論文。這篇論文解釋了一個名爲Labyrinth的VRML 瀏覽器原型,這是Mark和Tony Parisi在1994年1月完成的一個程序。衝動來源於William Gibson的一部名爲Neuromancer的小說。
因爲是第一次在Web上呈現出三維的界面,所以在W3會議上Labyrinth受到了特別的關注。
VRML是這樣一個縮寫詞,它的英文全稱是Virtual Reality Modeling Language。在最初的時候,M代表Markup,後來爲了和HTML相區別,在W3會議之後的幾個月內就把名稱改爲了Modeling了。
Mark的那篇論文獲得了巨大的成功,所以就舉辦了名爲www-vrml的mailing list(http://vag.vrml.org/www-vrml/)以進行更爲深入的討論。Mark的身份是這個mailing list的協調員。
這個郵件列表代表了VRML在學術上的發展。Gavin Bell,SGI公司的一名編程人員,在VRML團體中享有很高的聲譽,採用Open Inventor作爲VRML文件的官方格式。一些人覺得應該爲這項新技術創建一個全新的格式,而另一部分人包括Mark本人則認爲如果VRML文件格式符合現存的所有圖象文件格式,那麼它必將獲得巨大的成功。理想的結構應該是創建一個和HTML相類似而又符合專業三維設計師的需求。最終Open Inventor被採納了,Gavin Bell在VRML 1.0標準的制訂過程中做了大量的文檔工作。
在OI被大衆所接受之後,它被調整到我們現在所見到的VRML 1.0格式。很明顯VRML是作爲一個獨立語言出現的,而不僅僅是作爲一個HTML的擴展而出現的。VRML對於網絡的要求比HTML更加嚴格並且在使用時要求更多數量的服務器。VRML 1.0標準中給出了超鏈接錨點(WWWAnchor)平行於HTML中的HREF,另一個語言上的特徵是LOD(細節節點),它依據物體在場景中的位置和瀏覽器的渲染性能來爲物體分配正確的瀏覽數據。
VRML 1.0和它的後繼者不太一樣,它是完全面向ASCII字符集的,被限制在處理127個字符的能力上。這個限制對於處理非羅馬語言的字符就會產生問題。VRML 1.0標準不能處理avatar也是一個很大的失誤。
1994年的11月第二界WWW會議召開,在這次會議上提出了VRML 1.0標準。在這次會議之後,Parisi建立了自己的公司Intervista並創建了第一個VRML瀏覽器WorldView。SGI公司也在1995年的四月給出了它的第一個Web瀏覽器WebSpace。在當年的夏天Netscape、NEC、DEC和Spyglass宣佈對VRML進行支持。同年的八月,VAG(VRML工程組)成立。95年的十月,VAG成員決定把工作重心放在引導方向,VRML 2.0由此產生。
VRML和Java團體的第一次會晤是在1996年的第三次的W3會議上。
目前最新的標準是1997年制訂的VRML 97。在VRML的整個發展歷程中,出現了幾個變種的標準:VRML+和VRML 1.1。VRML +是IBM對VRML的一種擴展標準,出現在1995年的八月。IBM公司準備以這項技術對VRML服務提供大範圍的支持。VRML +準備在場景中提供一個象avatar一樣的數字演員並提供象VRML 2.0一樣功能的交互支持。
VRML 1.1是VRML 1.0的一套擴展集,它試圖擴展最初版本的功能。這個標準後來被集成進了VRML 2.0當中。

2 VRML的基本工作原理及其基本特性

用文本信息描述三維場景,在Internet網上傳輸,在本地機上由VRML的瀏覽器解釋生成三維場景,解釋生成的標準規範即是VRML規範。正是基於VRML的這種工作機制,才使其可能在網絡應用中有很快的發展。當初VRML的設計者們考慮的也正是--文本描述的信息在網絡上的傳輸比圖形文件迅速,所以他們避開在網絡上直接傳輸圖形文件而改用傳輸圖形文件的文本描述信息,把複雜的處理任務交給本地機從而減輕了網路的負荷。
統分結合模式:VRML的訪問方式基於C/S模式,其中服務器提供VRML文件,客戶通過網絡下載希望訪問的文件,並通過本地平臺的瀏覽器(Viewer)對該文件描述的VR世界進行訪問;即VRML文件包含了VR世界的邏輯結構信息,瀏覽器根據這些信息實現許多VR功能。這種由服務器提供統一的描述信息,客戶機各自建立VR世界的訪問方式被稱爲統分結合模式,也是VRML的基本概念。由於瀏覽器是本地平臺提供的,從而實現了VR的平臺無關性。
基於ASCII碼的低帶寬可行性:VRML像HTML一樣,用ASCII文本格式來描述世界和鏈接,保證在各種平臺上通用,同時也降低了數據量,從而在低帶寬的網絡上也可以實現。
實時3D着色引擎:傳統的VR中使用的實時3D着色引擎在VRML中得到了更好的體現。這一特性把VR的建模與實時訪問更明確的隔離開來,也是VR不同於三維建模和動畫的地方。後者預先着色,因而不能提供交互性。VRML提供了6+1個自由度,即三個方向的移動和旋轉,以及和其他3D空間的超鏈接(Anchor)。
可擴充性:VRML作爲一種標準,不可能滿足所有應用的需要。有的應用希望交互性更強,有的希望畫面質量更高,有的希望VR世界更復雜。這些要求往往是相互制約的,同時又受到用戶平臺硬件性能的制約,因而VRML是可擴充的,即可以根據需要定義自己的對象及其屬性,並通過Java語言等方式使瀏覽器可以解釋這種對象及其行爲。

3 VRML文件格式及MIME類型

VRML文件可以包括下列四個主要成份:VRML文件頭、原型、造型和腳本、路由。並不是所有的文件都包括這些要素,唯一必須的是VRML文件頭。
VRML 2.0標準的文件頭爲#VRML V2.0 utf8。這不同於1.0標準中的文件頭,1.0標準中文件只支持ASCII字符集,所以文本頭爲#VRMLV1.0ASCII。爲了向下兼容,VRML 2.0文件格式兼容1.0文件格式。這個文件頭有三個含義:第一、表明這個文件是一個VRML文件;第二,符合VRML 2.0版本;第三,文件使用的是utf8字符集(這是多種語言中鍵入字符的一種標準方式,包括英語,也支持朝鮮語、日語和阿拉伯語的字符)。
VRML註釋允許在不影響VRML空間外觀情況下,在VRML中包括其他信息。可以加入對文件內容、文件繪製的不同部分的註釋。註釋以一個#符號開始,結束於該行的最後。
VRML中包含描述空間中造型及其屬性的節點。這些是VRML的構件。單個節點描述造型、顏色、光照、視點、以及造型、動畫定時器、傳感器、內插器等的定位和朝向等等。節點一般包括:
節點的類型(必需)。
一對括號(必需)。
括號中的一定數目描述節點屬性的域(可選)和域值。
括號將節點的域信息組織在一起。組織在括號中的域是屬於節點的。由節點及其相關域定義的造型或屬性在空間中被視爲一個整體。
所有的域類型,要麼是單值類型,要麼是多值類型。單值類型是單一的值,如一種顏色和一個數字,該類型命名以“SF”開始。多值類型可以很有值,比如顏色和數字的列表,命名以“MF”開始。當指定多值類型時,使用括號將值的列表擴起來。
VRML文件以擴展名.wrl或.wrz結尾,表示這是一個包含VRML空間的文件。
MIME是英文Multipurpose Internet Mail Extensions—多用途Internet郵件擴展的縮寫。它用來定義Internet上傳送的文件內容類型的軟件標準,所有的Web瀏覽器都能夠理解MIME所定義的文件類型,並使用它們在瀏覽器上自動決定顯示的信息內容。例如:如果一個MIME類型顯示一個文件中包含VRML文本,那麼瀏覽器將格式化VRML文本使其顯示在瀏覽器的窗口中。一個MIME內容類型由用斜槓分開的兩部分指定。第一部分說明內容的一般類型,象文本、音頻、視頻類型。第二部分說明內容的子類型,用於指定內容使用的確切格式。
MIME內容類型由Internet協會標準化,臨時的或最新的MIME內容類型都以x-開始(x表示擴展)。VRML非常新,以至於它現在使用下列擴展的MIME內容類型:x-world/x-vrml。將來,VRML的內容類型將融合進正式的MIME標準,併成爲下列MIME內容類型:model/vrml。

4 VRML中的節點分類

VRML中的節點有以下幾種類型:
·造型尺寸、外觀節點:Shape、Appearance、Material
·原始幾何造型節點:Box、Cone、Cylinder、Sphere
·造型編組節點:Group、Switch、Billboard
·文本造型節點:Text、FrontStyle
·造型定位、旋轉、縮放節點:Transform
·內插器節點:TimeSensor、PositionInterpolater、OrientationInterpolater、ColorInterpolator、 ScalarInterpolator、CoordinateInterpolator
·感知節點:TouchSensor、CylinderSensor、PlaneSensor、SphereSensor、VisibilitySensor、ProximitySensor、Collision
·點、線、面集節點:PointSet、IndexedLineSet、IndexedFaceSet、Coordinate
·海拔節點:ElevationGrid
·擠出節點:Extrusion
·顏色、紋理、明暗節點:Color、ImageTexture、PixelTexture、MovieTexture、Normal
·控制光源的節點:PointLight、DirectionalLight、SpotLight
·背景節點:Background
·聲音節點:AudioClip、MovieTexture、Sound
·細節控制節點:LOD
·霧節點:Fog
·空間信息節點:WorldInfo
·錨點節點:Anchor
·腳本節點:Script
·控制視點的節點:Viewpoint、NavigationInfo
·用於創建新節點類型的節點:PROTO、EXTERNPROTO、IS

二、VRML中較爲深入的幾個概念
1.構建VRML文件的幾種方法
構建VRML文件一般有三種方法:
使用文本編輯器直接進行VRML文件的書寫。這樣做的不足之處是隻能創建比較簡單的物體和場景。創建複雜場景的時候,幾乎不可能使用文本編輯器來直接編寫。第一是因爲場景之間相互關係和位置確定比較複雜,第二是對於複雜物體的建模顯得無能爲力(精確到小數位兩位已經是計算的一個極限了),第三對數學能力要求較高。
一般的方法是使用可視化編輯器來建模。使用可視化編輯器避免了直接使用文本建模時的一些問題,例如不能生成複雜場景等。這些工具的一個突出的優點就是使用起來相當方便,它不需要手工地輸入大量的命令而只需要輕輕拖動鼠標即可實現大量程序纔可能完成的功能。
常見的幾個可視化編輯器有:Cosmo World 2.0、Paragraph’s Virtual Home Space Builder、Home Space、Caligari’s Pioneer、Virtus WalkThrough Pro和3-D Website Builder等。
第三種方法就是使用其它常見的圖形格式進行轉換。在Web網上,存在着大量的各種各樣的三維文件格式,轉換工具的作用就是在這些文件格式之間進行轉換。需要注意的是,所有的轉換程序都有侷限性,例如在轉換特定文件中的光照和紋理貼圖時就會失敗。
InterChange是Syndesis公司(http://www.threedee.com)的一項產品,它可以執行大約五十種文件格式之間的轉換,VRML就是這五十種文件格式中的一種。
Extreme 3-D是Macromedia公司(http://www.macromedia.com)的一項功能非常強大的產品,它對於VRML文件的轉換功能在多媒體創作人員當中是深受歡迎的。使用Extreme 3-D,你就可以通過點擊鼠標來把二維模型轉換成三維模型。
DoomToVrml2使你可以在網上發佈你自己的Doom文件,它使得你可以把Doom層次的多邊形和紋理信息轉換成爲VRML 2.0格式的文件(http://vrml.sig.com/tools/ doomtovrml2 /index.html)。
VRML1to2可以將符合VRML 1.0格式的文件轉換成爲符合VRML 2.0格式的文件,Sony公司(http://vrml.sgi.com/cgi-bin/vrmlToVrml2.cgi)在這個領域開了先河。
VRML1toVRML2來自SGI公司,它執行的功能和上面的轉換器一樣。
2.瀏覽VRML的方法及幾種常見的VRML插件
瀏覽VRML的一般方法是使用VRML瀏覽器,也可以在IE等通用瀏覽器上通過VRML瀏覽器插件對VRML文件進行瀏覽。
3.VRML中的動畫效果
要理解VRML中動畫的概念,必需首先理解路由和事件。爲了使虛擬空間具有動感,構造指令可以包含綁定指令,綁定指令描述如何將節點綁定在一起。VRML綁定包括:綁定在一起的節點和在節點之間綁定的路由或者叫做路徑。綁定兩個節點之後,第一個節點通過這樣的路徑傳送給第二個節點的信息叫作事件。事件包含一個值。當一個節點接收到一個事件時,它將根據節點的特徵開始動畫或者其它事情。通過綁定多個節點,用戶可以創建許多路由,從而使空間更加具有動感。
大多數VRML節點都可以綁定在線路之上,每個節點都有輸入、輸出插座。一些節點同時具有輸入、輸出插座,而另外的一些節點僅有其中的一種。節點的輸入插座稱爲eventIn,輸出插座稱爲eventOut。當鏈接一個路由時,eventIn接受輸入,eventOut將事件輸出。
節點的每個輸入輸出路由也有類型,例如一個SFFloat類型的eventOut,當它綁定一個路由時,輸出浮點數。SFFloat類型的eventIn,能夠接收浮點值。創建路由之後,線路路由將處於睡眠狀態,直到有一個事件從發送節點發送到接收節點。接收節點接收事件之後將作出反應,反應類型依賴於:
·接收事件節點的類型
·路由所綁定的節點輸入插座
·事件所包含的數值
·當 前節點的活動狀態
VRML中的動畫產生是由於變動了任何一個座標系的位置、方向和形體比例,從而使物體按你所想的方式飛行、平移、旋轉或按比例縮放。
TimeSensor節點的作用象一個時鐘,它可以被用來執行開始,停止或者其他控制動畫的動作。隨着時間的流逝,這個傳感器就會產生事件來表示時間的變化。通過將這些事件人TimeSensor節點的eventOut路由到其他節點,當TimeSensor節點的時鐘計時時,你可以使這些節點發生相應的變化。如果要使一個座標系平移、旋轉和按比例縮放的話,你可以將TimeSensor節點事件路由至PositionInerpolator和OrientationInterpolator節點。這些節點中的每一個產生新的位置和旋轉值,並通過他們的eventOut傳送這些值。按順序將這些值路由到Tranform節點,就可以使節點的座標系隨動畫過程的發展而發生平移、旋轉和按比例縮放。
4.VRML中的自身交互可以做到什麼程度
如果要使你的空間具有交互性,你可以給一個造型附帶一個傳感器,該傳感器使用一個定點設備來感知觀察者的動作。當觀察者點擊到一個附帶有傳感器的造型時,傳感器就輸出一個事件,這個事件就被路由到其它的節點來開始一個動畫。
TouchSensor是一種用來檢測觀察者的接觸和將事件輸出的傳感器。這些輸出描述了在何時、何地,觀察者接觸到了可感知的造型。CylinderSensor、PlaneSensor和SphereSensor節點也可用來檢測何時觀察者接觸到一個可感知的造型,並且提供了用來改變造型位置和方向的輸出。
在VRML中,你可以將一個傳感器附在一個造型上,用它來檢測觀察者的移動、點擊和拖動。當觀察者與一個可感知的造型相互作用時,你就可以把傳感器的輸出連入一個線路中,從而引起造型的移動和動畫的播放。
感知觀察者接近常使用三種方法:感知觀察者的可視性、感知觀察者的接近性和通過碰撞檢測。
可見傳感器從觀察者的位置和方向來感知在空間中的一個長方體區域是否可視。你可以通過這些傳感器來啓動和停止動畫或者控制其他的動作,這些動作僅當一個可感知的區域可見時是必要的。通過給出中心和尺寸,你可以指定一個由VisibilitySensor節點感測的空間區域。
碰撞檢測是檢測空間中觀察者與造型接近和碰撞的時間。碰撞節點在檢測觀察者的碰撞時做兩件事:
通過CollideTime eventOut事件輸出當前的絕對時間。
提示瀏覽器。
以上就是VRML場景中的幾種交互,使用這些交互我們可以做到類似電燈開啓,自動滑動門等效果。但是更爲複雜的交互使用它本身所提供的傳感器就顯得無能爲力了,這就需要利用Script和Proto節點等對其進行功能上的擴展,最好是利用Java技術完成這些擴展工作,因爲Sun公司對VRML技術也非常看好。

發佈了120 篇原創文章 · 獲贊 31 · 訪問量 48萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章