版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、VRML編程實(shí)驗(yàn)指導(dǎo)2010年3月入門篇 VRML簡(jiǎn)介在本次實(shí)驗(yàn)中,我們來(lái)學(xué)習(xí)使用VRML編程。一、VRML的歷史和現(xiàn)狀VRML(Virtual Reality Modeling Language),意為虛擬現(xiàn)實(shí)建模語(yǔ)言。簡(jiǎn)單點(diǎn)說(shuō),VRML是一種用于描述三維造型與交互環(huán)境的簡(jiǎn)單的文本語(yǔ)言;復(fù)雜點(diǎn)說(shuō),VRML是在Internet上建立3D多媒體和共享虛擬世界的一個(gè)開(kāi)放標(biāo)準(zhǔn)。VRML的基本目標(biāo)是建立因特網(wǎng)上的交互式三維多媒體,基本特征包括分布式、三維、交互性、多媒體集成、境界逼真性等。VRML開(kāi)始于20世紀(jì)90年代初期。1994年3月在日內(nèi)瓦召開(kāi)的第一屆WWW大會(huì)上,首次正式提出了VRML這個(gè)名字
2、。1994年10月在芝加哥召開(kāi)的第二屆WWW大會(huì)上公布了規(guī)范的VRML1.0草案。1996年8月在新奧爾良召開(kāi)的3D圖形技術(shù)會(huì)議Siggraph96上公布通過(guò)了規(guī)范的VRML2.0第一版。比VRML1.0增加了近30個(gè)節(jié)點(diǎn),增強(qiáng)了靜態(tài)世界,增加了交互性、動(dòng)畫(huà)功能、編程功能、原形定義功能。1997年12月VRML作為國(guó)際標(biāo)準(zhǔn)正式發(fā)布,1998年1月正式獲得國(guó)際標(biāo)準(zhǔn)化組織ISO批準(zhǔn)(國(guó)際標(biāo)準(zhǔn)號(hào)ISO/IEC14772-1:1997)。簡(jiǎn)稱VRML97。VRML97只是在VRML2.0基礎(chǔ)上進(jìn)行了少量的修正。1999年底,VRML的又一種編碼方案X3D草案發(fā)布。X3D整合正在發(fā)展的XML、JAVA等
3、先進(jìn)技術(shù),包括了更強(qiáng)大、更高效的3D計(jì)算能力、渲染質(zhì)量和傳輸速度。 2000年6月世界web3D協(xié)會(huì)發(fā)布了VRML2000國(guó)際標(biāo)準(zhǔn)(草案),2000年9月又發(fā)布了VRML2000國(guó)際標(biāo)準(zhǔn)(草案修訂版)。VRML從此又進(jìn)入了一個(gè)嶄新的發(fā)展時(shí)代。二、VRML的功能和工作原理VRML包含3D動(dòng)畫(huà)、音效、傳感器觸發(fā)、事件輸入輸出、行為控制、支持多種腳本與多重使用者等功能,真正在Web上實(shí)現(xiàn)了動(dòng)態(tài)頁(yè)面,并加強(qiáng)了互動(dòng)功能,達(dá)到真正虛擬的效果。VRML的訪問(wèn)方式是基于客戶服務(wù)器模式,其中服務(wù)器提供VRML文件(后綴為WRL)及支持資源客戶通過(guò)網(wǎng)絡(luò)下載希望訪問(wèn)的文件,并通過(guò)本地平臺(tái)上的VRML瀏覽器(Brow
4、se)交互式訪問(wèn)該文件描述的虛擬境界(Virtual World),因?yàn)闉g覽器是本地平臺(tái)提供的,從而實(shí)現(xiàn)了和硬件平臺(tái)的無(wú)關(guān)性。VRML象HTML一樣,是一種ASCII碼描述語(yǔ)言,它是一套告訴瀏覽器如何創(chuàng)建一個(gè)三維世界并在其中航行(Navigation)的指令,這些指令由繪制器(Render)解釋執(zhí)行,繪制器是一個(gè)內(nèi)置于瀏覽器中或外部的程序。三、VRML的核心體系VRML文件描述的基于時(shí)間的三維空間稱為虛擬境界(Virtual World),它由對(duì)象構(gòu)成,而對(duì)象及其屬性用節(jié)點(diǎn)描述,節(jié)點(diǎn)(Node)是VRML的基本單元。每個(gè)節(jié)點(diǎn)由類型、域(Field)、事件(Event)、實(shí)現(xiàn)、名字組成,節(jié)點(diǎn)按一
5、定規(guī)則構(gòu)成場(chǎng)景圖(Scene graph),場(chǎng)景圖中分兩類節(jié)點(diǎn),第一類節(jié)點(diǎn)用于視覺(jué)、聽(tīng)覺(jué)角度表現(xiàn)對(duì)象,它們按層次體系組織,反映境界的空間結(jié)構(gòu),提供顏色、燈光、超鏈接、材質(zhì)、化身、重力、碰撞、地形隨動(dòng)、飛行等功能,支持局部坐標(biāo)系;第二類節(jié)點(diǎn)參與事件產(chǎn)生和路由(Route)機(jī)制,形成路由圖,確定境界隨時(shí)間推移如何動(dòng)態(tài)變化。環(huán)境變化、用戶交互、時(shí)間推移產(chǎn)生事件,傳感器(Sensor)檢測(cè)并發(fā)出初始事件,實(shí)踐產(chǎn)生其他事件或修改場(chǎng)景圖結(jié)構(gòu),從而提供動(dòng)態(tài)特性。插補(bǔ)器(Interpolator)是特殊事件處理器,利用它可以設(shè)計(jì)動(dòng)畫(huà)。對(duì)于復(fù)雜行為處理則須利用腳本節(jié)點(diǎn)(Script node),它包含一組腳本描
6、述語(yǔ)言編寫(xiě)的函數(shù),Script節(jié)點(diǎn)收到事件后,將執(zhí)行相應(yīng)的函數(shù),該函數(shù)可以通過(guò)常規(guī)的事件路由機(jī)制發(fā)送事件或直接向Script節(jié)點(diǎn)指定節(jié)點(diǎn)發(fā)送事件,腳本也能動(dòng)態(tài)增、刪路由。四、VRML的使用與開(kāi)發(fā)條件VRML的瀏覽環(huán)境:IE+VRML瀏覽插件(如Cosmo Player、Cortona等)VRML的開(kāi)發(fā)工具:Windows記事本或?qū)I(yè)VRML開(kāi)發(fā)工具(如VRMLPad)五、VRML編程的一些基本概念1.虛擬世界中的坐標(biāo)系:在VR世界中,X軸指向屏幕的右側(cè),Y軸指向屏幕的上方向,Z軸指向觀察者,原點(diǎn)位于屏幕表面的中心,空間中的任何一點(diǎn)都可以用坐標(biāo)(X,Y,Z)的形式表示。2.VRML程序的構(gòu)成:所
7、有的VRML文件都是以擴(kuò)展名WRL結(jié)尾的文本文件或以WRZ(壓縮格式)結(jié)尾的二進(jìn)制文件,它一般包含如下4個(gè)部分:(1)文件頭:位于VRML文件的首行,給瀏覽器提供文件的版本信息。對(duì)于VRML 2.0,它是:VRML V2.0 utf8。(2注釋:以號(hào)開(kāi)始的一段文字。(3)節(jié)點(diǎn):場(chǎng)景信息的單位??梢杂盟鼇?lái)描述場(chǎng)景中的造型、燈光及聲音等,如:Cylinder . 描述的就是場(chǎng)景中的一個(gè)圓柱形節(jié)點(diǎn)。(4)域值:域用于描述及改變節(jié)點(diǎn)的屬性,值反應(yīng)了域的大小。如: Cylinder height 2.0 radius 1.5 其中的height與radius就是域,而2.0和1.5就是值。域是可選的且順
8、序不限,如果一個(gè)節(jié)點(diǎn)中沒(méi)有任何域,則域取內(nèi)定的缺省值。 掌握了以上這些知識(shí),我們就可以著手進(jìn)行VRML簡(jiǎn)單編程的學(xué)習(xí)了!基礎(chǔ)篇 VRML簡(jiǎn)單編程準(zhǔn)備工作1.安裝VRML的IE插件Cortona(可從服務(wù)器上下載,cortvrml.exe)2.打開(kāi)Windows附件中的“記事本”程序,作為文本編輯器,也可以使用Vrmlpad編輯器(可從服務(wù)器下載)。第一節(jié) Hello World一、實(shí)驗(yàn)?zāi)康恼莆帐褂脦缀误w構(gòu)建境界及設(shè)定幾何體的顏色與材質(zhì)的方法二、實(shí)驗(yàn)內(nèi)容創(chuàng)建一個(gè)由立方體、圓錐和球體組成的場(chǎng)景三、實(shí)驗(yàn)步驟1.創(chuàng)建立方體在文本編輯器中輸入的第一行文字是: #VRML V2.0 utf8 這是VRML
9、文件的標(biāo)志,所有2.0版本的VRML文件都以這行文字打頭,VRML97是由VRML2.0版修訂而成的,符合VRML97規(guī)范的VRML文件也以這行文字打頭。其中“#”表示這是一個(gè)注釋。而utf8表示此文件采用的是utf8編碼方案,這在標(biāo)準(zhǔn)中有詳細(xì)說(shuō)明。 先加入一個(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è)幾何形狀及其顏色等
10、特征: Shape 在Shape 節(jié)點(diǎn)內(nèi)定義一個(gè)幾何體Box(方盒節(jié)點(diǎn)):geometry Box 注意我們沒(méi)有為Box定義任何域,這意味著它的尺寸和坐標(biāo)位置等特性取缺省值(單位立方體)。隨后補(bǔ)齊各右括號(hào): 至此,我們已經(jīng)成功地制作了第一個(gè)虛擬境界,把它保存為“01_白色立方體.wrl”,下面是完整的代碼:#VRML V2.0 utf8Group children Shape geometry Box 用瀏覽器打開(kāi)這個(gè)文件,你會(huì)看到一個(gè)白色的立方體,如圖1.1所示。盡管不太好看,但你還是可以通過(guò)改變視點(diǎn)位置從不同方位觀察它,初步體驗(yàn)“三維交互”的感覺(jué)。圖1.12.定義立方體的外觀 下面定義立方
11、體的外觀,這只需改變Shape節(jié)點(diǎn)的appearance域(外觀),appearance 域是一個(gè)Appearance 節(jié)點(diǎn),此Appearance節(jié)點(diǎn)的material域(材質(zhì))定義為一個(gè)Material 節(jié)點(diǎn): appearance Appearance material Material 這樣,上面的Shape節(jié)點(diǎn)變成了: Shape appearance Appearance material Material geometry Box 這是定義幾何造型的基本格式。現(xiàn)在立方體還是白色的,這是因?yàn)槠渲械腗aterial節(jié)點(diǎn)采用的還是缺省值,下面修改它的diffuseColor域(漫射色)
12、,VRML的顏色說(shuō)明采用的是RGB顏色模型,所以要定義紅色的立方體,漫射色應(yīng)該是1 0 0,三個(gè)數(shù)字依次表示紅色、綠色和藍(lán)色,取值范圍都是0到1: material Material diffuseColor 1 0 0 現(xiàn)在我們生成了第二個(gè)場(chǎng)景,完整的代碼是:#VRML V2.0 utf8Group children Shape appearance Appearance material Material diffuseColor 1 0 0 geometry Box 將其保存為“01_紅色立方體.wrl”。在這個(gè)場(chǎng)景中,紅色的立方體位于屏幕的中心,它的中心坐標(biāo)為0 0 0 ,如圖1.2所
13、示。圖1.23.移動(dòng)立方體若想把這個(gè)立方體移動(dòng)一個(gè)位置,可以通過(guò)為它外套一個(gè)Transform(變換節(jié)點(diǎn))來(lái)實(shí)現(xiàn):Transform translation 5 0 0 children Shape appearance Appearance material Material geometry Box 在VRML中,Transform節(jié)點(diǎn)除了可以引進(jìn)平移、旋轉(zhuǎn)和縮放變換以外,其作用和Group節(jié)點(diǎn)的作用一樣。把Transform 節(jié)點(diǎn)的translation域(平移)設(shè)置為5 0 0,意味著Transform節(jié)點(diǎn)所在的坐標(biāo)系相對(duì)于其上層坐標(biāo)系向右平移(即x軸方向)5個(gè)單位,在其它兩個(gè)方向不移
14、動(dòng),VRML的距離單位是米,5個(gè)單位相當(dāng)于5米。第三個(gè)場(chǎng)景的完整代碼是:#VRML V2.0 utf8Group children Transform translation 5 0 0 children Shape appearance Appearance material Material diffuseColor 1 0 0 geometry Box 將其保存為“01_平移.wrl”。在這個(gè)場(chǎng)景中,紅色立方體向右平移了5個(gè)單位,如圖1.3所示。圖1.34.創(chuàng)建完整場(chǎng)景 接下來(lái)我們把立方體所在的Transform節(jié)點(diǎn)復(fù)制三份,并把各自包含的幾何形狀依次定義為立方體、球體和圓錐:Group
15、 children Transform translation 5 0 0 children Shape . geometry Box Transform translation 0 0 0 children Shape . geometry Sphere Transform translation -5 0 0 children Shape . geometry Cone #end of Group children 由于VRML文件中有許多括號(hào)(花括號(hào)“”和方括號(hào)“”),所以務(wù)請(qǐng)注意括號(hào)的配對(duì),建議采用本教程的縮進(jìn)風(fēng)格。注意上面的VRML文件中三個(gè)Transform節(jié)點(diǎn)的平移量是不同的,因
16、而三個(gè)幾何體的位置也就不同。另外,還可以修改三個(gè)幾何體的顏色:球面Sphere為綠色(0 1 0),圓錐為藍(lán)色( 0 0 1 )。最后,為了以后引用方便,分別給這三個(gè)Transform 節(jié)點(diǎn)指定一個(gè)名稱:DEF box Transform .DEF sphere Transform .DEF cone Transform .這個(gè)VRML場(chǎng)景的完整代碼是:#VRML V2.0 utf8Group children DEF box Transform translation 5 0 0 children Shape appearance Appearance material Material d
17、iffuseColor 1 0 0 geometry Box DEF sphere Transform translation 0 0 0 children Shape appearance Appearance material Material diffuseColor 0 1 0 geometry Sphere DEF cone Transform translation -5 0 0 children Shape appearance Appearance material Material diffuseColor 0 0 1 geometry Cone # end of Group
18、 children 把此文件保存為“01_HelloWorld.wrl”,用IE瀏覽器打開(kāi)這個(gè)文件,在Comso Player中,通過(guò)調(diào)整視點(diǎn)從多個(gè)方位瀏覽自己的作品。小結(jié):在個(gè)實(shí)驗(yàn)中,我們創(chuàng)建了第一個(gè)虛擬境界,涉及到如何用幾何體構(gòu)建境界,以及如何設(shè)定幾何體的顏色與材質(zhì)。盡管這個(gè)由立方體、圓錐和球體組成的場(chǎng)景圖比較簡(jiǎn)單,但已經(jīng)反映了VRML的基本功能。當(dāng)然,除了可用鼠標(biāo)改變視點(diǎn)外,這還只是一個(gè)靜態(tài)世界,在下一個(gè)實(shí)驗(yàn)中,我們將引進(jìn)VRML的動(dòng)態(tài)特征。四、練習(xí)1.嘗試改變幾何體的位置;2.嘗試改變幾何體的顏色。五、作業(yè):根據(jù)以下圖片調(diào)整幾何體的位置和顏色,將結(jié)果保存為work_1.wrl。第二節(jié)
19、增加交互能力一、實(shí)驗(yàn)?zāi)康恼莆找朁c(diǎn)觸發(fā)和自定義腳本的編寫(xiě)方法二、實(shí)驗(yàn)內(nèi)容創(chuàng)建一個(gè)場(chǎng)景,使場(chǎng)景中的對(duì)象能夠根據(jù)用戶動(dòng)作做出反應(yīng)三、實(shí)驗(yàn)步驟在實(shí)驗(yàn)一中我們學(xué)習(xí)了用幾何體建立虛擬境界以及為幾何體賦予色彩和材質(zhì)的方法,這樣建立的虛擬境界是靜態(tài)的?,F(xiàn)在我們將使一個(gè)幾何體(為了更具一般性,下面我們稱之為對(duì)象)能夠根據(jù)用戶動(dòng)作做出反應(yīng),即交互能力,這是VRML2.0最突出的特征。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)類型確定。 接觸檢測(cè)器(Touc
20、hSensor)是最常用的檢測(cè)器之一,最典型的應(yīng)用例子是開(kāi)關(guān)。其它檢測(cè)器將在后續(xù)教程中陸續(xù)介紹。這里我們定義一個(gè)開(kāi)關(guān)節(jié)點(diǎn)lightSwitch(這是一個(gè)組節(jié)點(diǎn)),并定義一個(gè)接觸檢測(cè)器作為它的子節(jié)點(diǎn):DEF lightSwitch Group children 各幾何造型子節(jié)點(diǎn).DEF touchSensor TouchSensor 這樣開(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)景變化。2.視點(diǎn)最常見(jiàn)的變化是視點(diǎn)的變化,在我們的第一個(gè)場(chǎng)境中你可能已經(jīng)體驗(yàn)到視點(diǎn)變化:當(dāng)你拖動(dòng)鼠標(biāo)或按動(dòng)箭頭鍵時(shí)
21、(按照VRML術(shù)語(yǔ),稱為航行),虛擬場(chǎng)境就會(huì)旋轉(zhuǎn)或縮放,這實(shí)際上是在調(diào)整你的視點(diǎn)位置或視角。在虛擬場(chǎng)景的重要位置可以定義視點(diǎn)節(jié)點(diǎn)(ViewPoint),它們是場(chǎng)境作者給用戶推薦的觀賞方位,在Cosmo Player瀏覽器中,用戶就可以通過(guò)鼠標(biāo)右鍵選擇作者推薦的各個(gè)視點(diǎn)。這里我們定義兩個(gè)視點(diǎn)節(jié)點(diǎn):DEF view1 Viewpoint position 0 0 20description View1 DEF view2 Viewpoint position 5 0 20description view2我們的潛在目的是使用戶可以通過(guò)觸發(fā)開(kāi)關(guān)節(jié)點(diǎn)來(lái)切換視點(diǎn)?,F(xiàn)在先研究一下這兩個(gè)視點(diǎn)節(jié)點(diǎn),其中的坐標(biāo)
22、表示視點(diǎn)在場(chǎng)景中的位置,坐標(biāo)的單位是米,這在前面已經(jīng)提到過(guò),視點(diǎn)的名稱將會(huì)在瀏覽器菜單中提示出來(lái)供用戶選擇。把上述視點(diǎn)說(shuō)明加入01_HelloWorld.wrl中(放在Group節(jié)點(diǎn)之前),并把其中的立方體節(jié)點(diǎn)修改成可觸發(fā)節(jié)點(diǎn):DEF box Tranform children Shape . Box .DEF touchBox TouchSensor 把修改過(guò)的文件另存為“touchme.wrl”。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)組成。能夠接收事件的
23、節(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”(即所謂的出事件),補(bǔ)充一句,在下一個(gè)事件發(fā)送之前,此事件一直保存在事件出口中(作為記錄)。 事件出口
24、和事件入口通過(guò)路徑相連,這就是VRML文件中除節(jié)點(diǎn)以外的另一基本組成部分:ROUTE 語(yǔ)句。ROUTE語(yǔ)句把事件出口和事件入口聯(lián)系在一起,從而構(gòu)成事件體系。在這里,我們是把接觸檢測(cè)器touchBox的事件出口isActive連接到視點(diǎn)節(jié)點(diǎn)view2的事件入口set_bind:ROTUE touchBox.isActive TO view2.set_bind 好了!現(xiàn)在我們得到的VRML文件是:#VRML V2.0 utf8DEF view1 Viewpoint position 0 0 20description view1 DEF view2 Viewpoint position 5 0 2
25、0description view2 Group children DEF box Transform translation 5 0 0 children Shape appearance Appearance material Material diffuseColor 1 0 0 geometry Box DEF touchBox TouchSensor DEF sphere Transform translation 0 0 0children Shape appearance Appearance material Material diffuseColor 0 1 0 geomet
26、ry Sphere DEF cone Transform translation -5 0 0children Shape appearance Appearance material Material diffuseColor 0 0 1 geometry Cone #end of Group children ROUTE touchBox.isActive TO view2.set_bind把這個(gè)文件保存為“02_視點(diǎn)觸發(fā).wrl”,將其調(diào)入瀏覽器,可以看到初始的視點(diǎn)為view1。首先把鼠標(biāo)指向立方體,鼠標(biāo)指針將變?yōu)閳D2.1所示的形狀。然后按下鼠標(biāo)左鍵(先別松開(kāi)?。梢钥吹揭朁c(diǎn)已經(jīng)變?yōu)関
27、iew2,如圖2.2所示。內(nèi)部的機(jī)制是這樣:左鍵按下時(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ā)生了變化。圖2.1圖2.2現(xiàn)在松開(kāi)左鍵,可以看到場(chǎng)景恢復(fù)到原來(lái)方位,這種功能稱為視點(diǎn)回跳,其原因是松開(kāi)左鍵后接觸檢測(cè)器向view2發(fā)送了一個(gè)“FASLE”事件,這樣view2當(dāng)前的地位被解除,原來(lái)的視點(diǎn)成為系統(tǒng)視點(diǎn)棧的棧頂節(jié)點(diǎn)(即當(dāng)前視點(diǎn))。4.利用腳本編寫(xiě)自定義行為如果我們不想視點(diǎn)回跳,就想停留在view2視點(diǎn),那該
28、怎么辦呢?這種非系統(tǒng)缺省功能要自己來(lái)定義。在VRML中,利用Script節(jié)點(diǎn)(腳本節(jié)點(diǎn))定義用戶自定義行為,所謂定義即用腳本描述語(yǔ)言(Scripting Language)編寫(xiě)腳本的過(guò)程。VRML97支持的腳本描述語(yǔ)言目前有兩種:Java和EMCAScript(這是JavaScript標(biāo)準(zhǔn)化后的名稱),關(guān)于這兩種語(yǔ)言本身,請(qǐng)參考相應(yīng)參考書(shū),VRML97標(biāo)準(zhǔn)中定義了它們和VRML的接口方法。應(yīng)提請(qǐng)注意的是:VRML是基于節(jié)點(diǎn)的語(yǔ)言,所以腳本也是封裝在Script這個(gè)特殊節(jié)點(diǎn)中的。這里我們不過(guò)多討論腳本描述語(yǔ)言的細(xì)節(jié),主要討論把腳本集成到VRML文件中的方法。上面我們?cè)呀佑|檢測(cè)器touchBox
29、 和視點(diǎn)view2直接通過(guò)路徑連接起來(lái),現(xiàn)在要定義我們指定的行為,就需要在二者之間插入一個(gè)腳本節(jié)點(diǎn),也就是讓路徑繞個(gè)彎:ROUTE touchBox.isActive TO touchScript.touchBoxIsActive ROUTE touchScript.bindView2 TO view2.set_bind 其中的腳本節(jié)點(diǎn)touchScript有一個(gè)事件入口touchBoxIsActive和一個(gè)事件出口bind_View2,前者接收來(lái)自接觸檢測(cè)器touchBox的事件,然后經(jīng)自己的腳本處理后,把結(jié)果發(fā)送給視點(diǎn)節(jié)點(diǎn)view2:DEF touchScript Script event
30、In SFBool touchBoxIsActive eventOut SFBool bindView2 urljavescript: function touchBoxIsActive(active) bindView2= TRUE; 關(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的
31、事件入口set_bind的類型也是相同的。(3)“url”是腳本節(jié)點(diǎn)的一個(gè)域,可以直接包含腳本,也可以包含一個(gè)或多個(gè)用URL地址指示的腳本,若有多個(gè)地址,則按照先后次序獲取第一個(gè)可得到的腳本。(4)腳本是以函數(shù)(function)的形式給出的,函數(shù)名touchBoxIsActive 與事件入口的名稱相同,這是和ECMAScript語(yǔ)言的接口約定,表示相應(yīng)事件入口收到事件后調(diào)用此函數(shù)進(jìn)行處理。5.事件流程與小結(jié) 下面我們整理一下事件流程:(1)用戶在立方體上按下鼠標(biāo)左鍵。(2)接觸檢測(cè)器發(fā)出一個(gè)“TRUE”事件。(3)此事件進(jìn)入腳本節(jié)點(diǎn)touchScript的事件入口touchBoxIsActi
32、ve。(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)。本例的完整代碼是:#VRML V2.0 utf8DEF view1 Viewpoint position 0 0 20description view1DEF view2 Viewpoint position 5 0 20description view2Group children DEF box Transform translati
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 防火防電安全課件
- 隊(duì)組安全培訓(xùn)心得課件
- 《汽車美容》課件-10 項(xiàng)目十 汽車太陽(yáng)膜
- 臨床生化檢測(cè)科普
- 小學(xué)搞笑造句課件
- 核醫(yī)學(xué)科甲狀腺掃描操作指南
- 行車安全教育核心要點(diǎn)
- 連結(jié)員標(biāo)準(zhǔn)化作業(yè)培訓(xùn)
- 冬季茶會(huì)策劃活動(dòng)方案(3篇)
- 南京會(huì)議策劃活動(dòng)方案(3篇)
- 生蠔課件教學(xué)課件
- 2025年及未來(lái)5年市場(chǎng)數(shù)據(jù)中國(guó)機(jī)電安裝工程市場(chǎng)調(diào)查研究及行業(yè)投資潛力預(yù)測(cè)報(bào)告
- 2025年湖南省公務(wù)員錄用考試《申論》真題(縣鄉(xiāng)卷)及答案解析
- kv高壓線防護(hù)施工方案
- 住建局執(zhí)法證考試題庫(kù)及答案2025
- 主管護(hù)師聘任述職報(bào)告
- AI搜索時(shí)代:從GEO到AIBE的品牌新藍(lán)圖
- 產(chǎn)品知識(shí)培訓(xùn)會(huì)議總結(jié)
- 四川省成都市樹(shù)德實(shí)驗(yàn)中學(xué)2026屆九年級(jí)數(shù)學(xué)第一學(xué)期期末監(jiān)測(cè)試題含解析
- 與業(yè)主溝通技巧培訓(xùn)
- 專題11 圓(安徽專用)5年(2021-2025)中考1年模擬《數(shù)學(xué)》真題分類匯編
評(píng)論
0/150
提交評(píng)論