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

下載本文檔

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

文檔簡(jiǎn)介

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

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

2、“rotation”用于轉(zhuǎn)動(dòng)物體。它的前三個(gè)參數(shù)定下一點(diǎn),從原點(diǎn)到該點(diǎn)形成一個(gè)轉(zhuǎn)動(dòng)軸,第四個(gè)參數(shù)表示沿該軸轉(zhuǎn)動(dòng)的弧度數(shù)。此例表示把物體沿z軸轉(zhuǎn)動(dòng)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. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論