VRML基礎(chǔ)教程資料_第1頁
VRML基礎(chǔ)教程資料_第2頁
VRML基礎(chǔ)教程資料_第3頁
VRML基礎(chǔ)教程資料_第4頁
VRML基礎(chǔ)教程資料_第5頁
已閱讀5頁,還剩48頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

VRML基礎(chǔ)教程資料第一個虛擬境界#VRMLV2.0utf8這是VRML文件的標(biāo)志,所有2.0版本的VRML文件都以這行文字開頭,VRML97是由VRML2.0版修訂而成的,符合VRML97規(guī)范的VRML文件也以這行文字開頭。其中“#”表示這是一個注釋。而utf8表示此文件采用的是utf8編碼方案,這在VRML標(biāo)準(zhǔn)中有詳細(xì)說明。1第一個虛擬境界Group節(jié)點(diǎn)加入一個Group節(jié)點(diǎn)(組節(jié)點(diǎn)):Group{組節(jié)點(diǎn)花括號之內(nèi)的所有內(nèi)容視為一個整體,利用組節(jié)點(diǎn)可以把虛擬場景組織成條理清晰的樹形分支結(jié)構(gòu)。下面定義組節(jié)點(diǎn)的children域(孩子域):children[在children后的方括號內(nèi)定義Group節(jié)點(diǎn)的所有孩子對象,第一個孩子是一個Shape節(jié)點(diǎn)(形態(tài)節(jié)點(diǎn)),它描述一個幾何形狀及其顏色等特征:Shape{在Shape節(jié)點(diǎn)內(nèi)定義一個幾何體Box(方盒節(jié)點(diǎn)):geometryBox{}注意,我們沒有為Box定義任何域,這意味著它的尺寸和坐標(biāo)位置等特性取缺省值(單位立方體)。隨后補(bǔ)齊每個右括號:}]}2第一個虛擬境界():#VRMLV2.0utf8Group{children[Shape{geometryBox{}}]}3第一個虛擬境界下面定義立方體的外觀,這只需改變Shape節(jié)點(diǎn)的appearance域(外觀),appearance域是一個Appearance節(jié)點(diǎn),此Appearance節(jié)點(diǎn)的material域(材質(zhì))定義為一個Material節(jié)點(diǎn):4第一個虛擬境界下面定義立方體的外觀,這只需改變Shape節(jié)點(diǎn)的appearance域(外觀),appearance域是一個Appearance節(jié)點(diǎn),此Appearance節(jié)點(diǎn)的material域(材質(zhì))定義為一個Material節(jié)點(diǎn):5第一個虛擬境界Shape{appearanceAppearance{materialMaterial{}}geometryBox{}}6第一個虛擬境界diffuseColor域(漫反射顏色)VRML的顏色說明采用RGB顏色模型,所以要定義紅色的立方體,漫反射顏色應(yīng)該是{100},三個數(shù)字依次表示紅色、綠色和藍(lán)色,取值范圍都是0到1:materialMaterial{diffuseColor100}7第一個虛擬境界():#VRMLV2.0utf8Group{children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}}]}8第一個虛擬境界():#VRMLV2.0utf8Group{children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}}]}9第一個虛擬境界紅色的立方體位于屏幕的中心,它的中心坐標(biāo)為{000}。移動位置可以外套一個Transform(變換節(jié)點(diǎn))來實(shí)現(xiàn):Transform{translation500children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}}]}10第一個虛擬境界在VRML中,Transform節(jié)點(diǎn)除了可以引進(jìn)平移、旋轉(zhuǎn)和縮放變換以外,其作用和Group節(jié)點(diǎn)的作用一樣。把Transform節(jié)點(diǎn)的translation域(平移)設(shè)置為500,意味著Transform節(jié)點(diǎn)所在的坐標(biāo)系相對于其上層坐標(biāo)系向右平移(即x軸方向)5個單位,在其它兩個方向不移動,VRML的距離單位是米,5個單位相當(dāng)于5米11第一個虛擬境界():#VRMLV2.0utf8Group{children[Transform{translation500children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}}]}]}12第一個虛擬境界接下來我們把方塊所在的Transform節(jié)點(diǎn)復(fù)制三份,并把各自包含的幾何形狀依次定義為方塊、球體和圓錐13第一個虛擬境界():#VRMLV2.0utf8Group{children[Transform{translation500children[Shape{geometryBox{}}]}Transform{translation000children[Shape{geometrySphere{}}]}Transform{translation-500children[Shape{geometryCone{}}]}]#endofGroupchildren}14第一個虛擬境界VRML文件中有許多括號(花括號“{}”和方括“[]”),請注意括號的配對,建議采用本教程的縮進(jìn)風(fēng)格。上述VRML文件中三個Transform節(jié)點(diǎn)的平移量是不同的,因而三個幾何體的位置也就不同。另外,還可以修改三個幾何體的顏色:球面Sphere為綠色(010),圓錐為藍(lán)色(010)。15第一個虛擬境界為了以后引用方便,分別給這三個Transform節(jié)點(diǎn)指定一個名稱:DEFboxTransform{...}DEFsphereTransform{...}DEFconeTransform{...}16第一個虛擬境界():#VRMLV2.0utf8Group{children[DEFboxTransform{translation500children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}}]}DEFsphereTransform{translation000children[Shape{appearanceAppearance{materialMaterial{diffuseColor010}}geometrySphere{}}]}DEFconeTransform{translation-500children[Shape{appearanceAppearance{materialMaterial{diffuseColor001}}geometryCone{}}]}]#endofGroupchildren}17增加交互能力上一節(jié)我們學(xué)習(xí)了用幾何體建立虛擬境界以及為幾何體賦予色彩和材質(zhì)的方法,這樣建立的虛擬境界是靜態(tài)的。這一節(jié)我們將使一個幾何體(為了更具一般性,下面我們稱之為對象)能夠根據(jù)用戶動作做出反應(yīng),即交互能力,這是VRML2.0最突出的特征。18增加交互能力1、檢測器在VRML中,檢測器(Sensor)節(jié)點(diǎn)是交互能力的基礎(chǔ)。檢測器節(jié)點(diǎn)共九種。在場景圖中,檢測器節(jié)點(diǎn)一般是以其它節(jié)點(diǎn)的子節(jié)點(diǎn)的身份而存在的,它的父節(jié)點(diǎn)稱為可觸發(fā)節(jié)點(diǎn),觸發(fā)條件和時機(jī)由檢測器節(jié)點(diǎn)類型確定。19增加交互能力接觸檢測器(TouchSensor)是最常用的檢測器之一最典型的應(yīng)用例子是開關(guān)。其它檢測器將在后續(xù)章節(jié)中陸續(xù)介紹。這里我們定義一個開關(guān)節(jié)點(diǎn)lightSwitch(這是一個組節(jié)點(diǎn)),并定義一個接觸檢測器作為它的子節(jié)點(diǎn):DEFlightSwitchGroup{children[各幾何造型子節(jié)點(diǎn)...DEFtouchSensorTouchSensor{}]}20增加交互能力這樣開關(guān)節(jié)點(diǎn)lightSwitch就是一個可觸發(fā)節(jié)點(diǎn)。當(dāng)然,檢測器存在的理由是它被觸發(fā)時能夠引起某種變化,所以在更深入討論開關(guān)節(jié)點(diǎn)之前,我們先討論一下場景的變化。21增加交互能力2、視點(diǎn)最常見的變化是視點(diǎn)的變化,在我們的第一個境界中你可能已經(jīng)體驗(yàn)到視點(diǎn)變化:當(dāng)你拖動鼠標(biāo)或按動箭頭鍵時(按照VRML術(shù)語,稱為航行),虛擬境界就會旋轉(zhuǎn)或縮放,這實(shí)際上是在調(diào)整你的視點(diǎn)位置或視角。在虛擬場景的重要位置可以定義視點(diǎn)節(jié)點(diǎn)(ViewPoint),它們是境界作者給用戶推薦的最佳觀賞方位,在CosmoPlayer瀏覽器中,用戶就可以通過鼠標(biāo)右鍵選擇作者推薦的各個視點(diǎn)。這里我們定義兩個視點(diǎn)節(jié)點(diǎn):22增加交互能力這里我們定義兩個視點(diǎn)節(jié)點(diǎn):DEFview1Viewpoint{position0020description"View1"}DEFview2Viewpoint{position5020description"view2"}23增加交互能力我們的目的是使用戶可以通過觸發(fā)開關(guān)節(jié)點(diǎn)來切換視點(diǎn)?,F(xiàn)在先研究一下這兩個視點(diǎn)節(jié)點(diǎn),其中的坐標(biāo)表示視點(diǎn)在場景中的位置,坐標(biāo)的單位是米,這在前面已經(jīng)提到過,視點(diǎn)的名稱將會在瀏覽器菜單中提示出來供用戶選擇。把上述視點(diǎn)說明加入helloworld5.wrl中(放在Group節(jié)點(diǎn)之前),并把其中的方塊節(jié)點(diǎn)修改成可觸發(fā)節(jié)點(diǎn):24增加交互能力DEFboxTransform{children[Shape{....Box...}DEFtouchBoxTouchSensor{}]}把修改過的文件另存為“”。25增加交互能力3、事件傳遞把觸發(fā)(用鼠標(biāo)箭頭按動方塊)和場景變化(視點(diǎn)切換)這兩件事情聯(lián)系起來,在場景圖中,除節(jié)點(diǎn)構(gòu)成的層次體系外,還有一個“事件體系”,事件體系由相互通訊的節(jié)點(diǎn)組成。能夠接收事件的節(jié)點(diǎn)都應(yīng)具有事件入口(eventIn),如果它要接收多種類型的事件(稱為入事件),它就應(yīng)該具有多個事件入口,也就是說,事件入口象節(jié)點(diǎn)的域一樣是有類型的。同樣,發(fā)送事件的節(jié)點(diǎn)應(yīng)有事件出口(eventOut),事件出口也是有類型的。例如ViewPoint節(jié)點(diǎn)就有一個事件入口set_bind,當(dāng)向此事件送入一個值“TRUE”(即所謂的入事件)時,該viewpoint節(jié)點(diǎn)成為當(dāng)前視點(diǎn)。又如,接觸檢測器TouchSensor有一個事件出口isActive,當(dāng)受到用戶觸發(fā)后它就從此出口送出一個“TRUE”(即所謂的出事件),在下一個事件發(fā)送之前,此事件一直保存在事件出口中(作為記錄)。26增加交互能力3、事件傳遞事件出口和事件入口通過路徑相連,這就是VRML文件中除節(jié)點(diǎn)以外的另一基本組成部分:ROUTE語句。ROUTE語句把事件出口和事件入口聯(lián)系在一起,從而構(gòu)成事件體系。在這里,我們把接觸檢測器touchBox的事件出口isActive連接到視點(diǎn)節(jié)點(diǎn)view2的事件入口set_bind:ROUTE好了!現(xiàn)在我們得到的VRML文件是():27增加交互能力#VRMLV2.0utf8DEFview1Viewpoint{position0020description"view1"}DEFview2Viewpoint{position5020description"view2"}Group{children[DEFboxTransform{translation500children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}}DEFtouchBoxTouchSensor{}]}DEFsphereTransform{translation000children[Shape{appearanceAppearance{materialMaterial{diffuseColor010}}geometrySphere{}}]}DEFconeTransform{translation-500children[Shape{appearanceAppearance{materialMaterial{diffuseColor001}}geometryCone{}}]}]#endofGroupchildren}ROUTE28增加交互能力把文件調(diào)入瀏覽器,然后把鼠標(biāo)指向方塊并按下左鈕,可以看到視點(diǎn)已經(jīng)變?yōu)関iew2,內(nèi)部的機(jī)制我們已經(jīng)很清楚:左鈕按下時方塊節(jié)點(diǎn)的接觸檢測器被觸發(fā),接著接觸檢測器從事件出口isActive送出一個事件“TRUE”,這個事件通過路由進(jìn)入視點(diǎn)節(jié)點(diǎn)view2的事件入口set_bind,view2收到“TRUE”后成為當(dāng)前視點(diǎn),所以在我們眼前的場景發(fā)生了變化。29增加交互能力現(xiàn)在松開左鈕,可以看到場景恢復(fù)到原來方位,這種功能稱為視點(diǎn)回跳,其原因是松開左鈕后接觸檢測器向view2發(fā)送了一個“FASLE”事件,這樣view2的當(dāng)前視點(diǎn)地位被解除,原來的視點(diǎn)成為即當(dāng)前視點(diǎn),詳細(xì)說明可參考VRML標(biāo)準(zhǔn)中對視點(diǎn)節(jié)點(diǎn)的專門論述。如果我們不想視點(diǎn)回跳,就想停留在view2視點(diǎn),那該怎么辦呢?這種非系統(tǒng)缺省功能要自己來定義。30利用腳本編寫自定義行為在VRML中,利用Script節(jié)點(diǎn)(腳本節(jié)點(diǎn))定義用戶自定義行為,所謂定義就是用腳本描述語言(ScriptingLanguage)編寫腳本的過程。VRML97支持的腳本描述語言目前有兩種:Java和EMCAScript(這是JavaScript標(biāo)準(zhǔn)化后的名稱),關(guān)于這兩種語言本身,請參考相應(yīng)的參考資料,VRML97標(biāo)準(zhǔn)中定義了它們和VRML的接口方法。應(yīng)該注意的是:VRML是基于節(jié)點(diǎn)的語言,所以腳本也是封裝在Script這個特殊節(jié)點(diǎn)中的。這里我們不能過多地討論腳本描述語言的細(xì)節(jié),主要討論把腳本集成到VRML文件中的方法。31利用腳本編寫自定義行為我們曾把接觸檢測器touchBox和視點(diǎn)view2直接通過路徑連接起來,現(xiàn)在要定義我們指定的行為,就需要在二者之間插入一個腳本節(jié)點(diǎn),也就是讓路徑繞個彎:ROUTETO32利用腳本編寫自定義行為其中的腳本節(jié)點(diǎn)touchScript有一個事件人口touchBoxIsActive和一個事件出口bind_View2,前者接收來自接觸檢測器touchBox的事件,然后經(jīng)自己的腳本處理后,把結(jié)果發(fā)送給視點(diǎn)節(jié)點(diǎn)view2:DEFtouchScriptScript{eventInSFBooltouchBoxIsActiveeventOutSFBoolbindView2url"javescript:functiontouchBoxIsActive(active){bindView2=TRUE;}"}33利用腳本編寫自定義行為關(guān)于這個Script節(jié)點(diǎn),請注意以下幾點(diǎn):(1)它的事件入口touchBoxIsActive和事件出口bindView2是自定義的,而其它VRML節(jié)點(diǎn)的域和事件都是固定的。(2)事件入口touchBoxIsActive和事件出口bindView2的類型都是SFBool(單值布爾型),touchBox的事件出口isActive和view2的事件入口set_bind的類型也是相同的。(3)“url”是腳本節(jié)點(diǎn)的一個域,可以直接包含腳本,也可以包含一個或多個用URL地址指示的腳本,若有多個地址,則按照先后次序獲取第一個可得到的腳本。(4)腳本是以函數(shù)(function)的形式給出的,函數(shù)名touchBoxIsActive與事件入口的名稱相同,這是和ECMAScript語言的接口約定,表示相應(yīng)事件入口接收到事件后應(yīng)調(diào)用此函數(shù)進(jìn)行處理。34事件流程下面我們整理一下事件流程:(1)用戶在方塊上按下鼠標(biāo)左鍵。(2)接觸檢測器發(fā)出一個“TRUE”事件。(3)此事件進(jìn)入腳本節(jié)點(diǎn)touchScript的事件入口touchBoxIsActive.(4)調(diào)用腳本函數(shù)touchBoxIsActive(注意,腳本函數(shù)并沒有判斷入事件的值)。(5)函數(shù)向touchScript的事件出口bindView2發(fā)送一個“TRUE”事件(還可以進(jìn)行其它判斷或執(zhí)行其它事件)。(6)view2節(jié)點(diǎn)收到“TRUE”事件,成為當(dāng)前視點(diǎn)。按照VRML約定,“認(rèn)為”上述事件是同時發(fā)生的,也就是這些事件的時間戳相同。(7)若用戶松開鼠標(biāo)左鍵,則接觸檢測器發(fā)出一個“FALSE”事件,此事件同樣引起腳本函數(shù)調(diào)用并發(fā)送“TRUE”事件,所以view2仍然保持為當(dāng)前視點(diǎn)。本節(jié)的完整代碼是()35事件流程#VRMLV2.0utf8DEFview1Viewpoint{position0020description"view1"}DEFview2Viewpoint{position5020description"view2"}Group{children[DEFboxTransform{translation500children[Shape{appearanceAppearance{materialMaterial{diffuseColor100}}geometryBox{}}DEFtouchBoxTouchSensor{}]}DEFsphereTransform{translation000children[Shape{appearanceAppearance{materialMaterial{diffuseColor010}}geometrySphere{}}]}DEFconeTransform{translation-500children[Shape{appearanceAppearance{materialMaterial{diffuseColor001}}geometryCone{}}]}]#endofGroupchildren}DEFtouchScriptScript{eventInSFBooltouchBoxIsActiveeventOutSFBoolbindView2url"javascript:functiontouchBoxIsActive(active){bindView2=TRUE;}"}ROUTETO36MAYA導(dǎo)入VRML

37MAYA導(dǎo)入VRML

38MAYA導(dǎo)入VRML

39MAYA導(dǎo)入VRML

40MAYA導(dǎo)入VRML打開VRMLPAD,打開導(dǎo)入的模型。41MAYA導(dǎo)入VRML打開VRMLPAD,打開導(dǎo)入的模型。手動進(jìn)行調(diào)節(jié)模型42MAYA導(dǎo)入VRMLtranslation-5000

rotation0011.571、“translation”用于位置移動,此例中我們把物體沿-x軸方向移動50個單位。

2、“rotation”用于轉(zhuǎn)動物體。它的前三個參數(shù)定下一點(diǎn),從原點(diǎn)到該點(diǎn)形成一個轉(zhuǎn)動軸,第四個參數(shù)表示沿該軸轉(zhuǎn)動的弧度數(shù)。此例表示把物體沿z軸轉(zhuǎn)動90度.43MAYA導(dǎo)入帶材質(zhì)VRMLFortextures,bydefault,Mayauseabsolutepath(url"D:/Mesdocuments/")Forthemoment,Webseedonlyreadsrelativepath(url"./").OnesolutiontosolvetheproblemistoeditthepathinVrmlfile.IfVrmlandTexturesareatsamelevel,theurlis:url"./“IfVrmlisatrootandtexturesinafolder,theurlis:url"./Folder/“IfVrmlandtexturesareinindividualfoldersatsameleveltheurlis:url"../Folder/"44MAYA導(dǎo)入帶材質(zhì)VRML實(shí)例中的草地圖片45Text節(jié)點(diǎn)T

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論