虛擬現(xiàn)實(shí)技術(shù)課件之動(dòng)態(tài)感知虛擬現(xiàn)實(shí)節(jié)點(diǎn)1_第1頁(yè)
虛擬現(xiàn)實(shí)技術(shù)課件之動(dòng)態(tài)感知虛擬現(xiàn)實(shí)節(jié)點(diǎn)1_第2頁(yè)
虛擬現(xiàn)實(shí)技術(shù)課件之動(dòng)態(tài)感知虛擬現(xiàn)實(shí)節(jié)點(diǎn)1_第3頁(yè)
虛擬現(xiàn)實(shí)技術(shù)課件之動(dòng)態(tài)感知虛擬現(xiàn)實(shí)節(jié)點(diǎn)1_第4頁(yè)
虛擬現(xiàn)實(shí)技術(shù)課件之動(dòng)態(tài)感知虛擬現(xiàn)實(shí)節(jié)點(diǎn)1_第5頁(yè)
已閱讀5頁(yè),還剩121頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、6 動(dòng)態(tài)感知虛擬現(xiàn)實(shí)節(jié)點(diǎn)在VRML中,最具特色的“節(jié)點(diǎn)”就是具有動(dòng)態(tài)、交互和感知特性的節(jié)點(diǎn),其中包括TimeSensor時(shí)間傳感器節(jié)點(diǎn)動(dòng)畫(huà)插補(bǔ)器節(jié)點(diǎn)觸摸節(jié)點(diǎn)感知節(jié)點(diǎn)等。動(dòng)畫(huà)插補(bǔ)器節(jié)點(diǎn)在VRML中,動(dòng)畫(huà)插補(bǔ)器節(jié)點(diǎn)可以實(shí)現(xiàn)模擬大干世界萬(wàn)物的變化。包括的動(dòng)畫(huà)控制節(jié)點(diǎn)有:PositionInterpolator位置插補(bǔ)器OrientationInterpolator朝向插補(bǔ)器節(jié)ScalarInterpolator標(biāo)量插補(bǔ)器節(jié)點(diǎn)ColorInterpolator顏色插補(bǔ)器節(jié)CoordinateInterpolator坐標(biāo)插補(bǔ)器NormalInterpolator法線(xiàn)插補(bǔ)器節(jié)點(diǎn)觸摸節(jié)點(diǎn)VRML觸摸節(jié)點(diǎn)在路

2、由的作用下,動(dòng)畫(huà)插補(bǔ)器節(jié)點(diǎn)聯(lián)合使用可以產(chǎn)生更加生動(dòng)、逼真的動(dòng)態(tài)交互效果,使觀測(cè)者有身臨其境的感覺(jué)。觸摸節(jié)點(diǎn)有:由TouchSensor觸摸傳感器節(jié)點(diǎn)PlaneSensor平面檢測(cè)器節(jié)點(diǎn)CylinderSensor圓柱檢測(cè)器節(jié)點(diǎn)SphereSensor球面檢測(cè)器節(jié)點(diǎn)感知節(jié)點(diǎn)VRML感知節(jié)點(diǎn)已具有初級(jí)智能作用,是VRML最具代表性節(jié)點(diǎn), 也是非常重要的節(jié)點(diǎn)。感知節(jié)點(diǎn)包括:VisibilitySensor能見(jiàn)度傳感器節(jié)點(diǎn)ProximtitySensor親近度傳感器節(jié)點(diǎn)Collision碰撞傳感器節(jié)點(diǎn)6.1 時(shí)間傳感器節(jié)點(diǎn)在現(xiàn)實(shí)世界中,萬(wàn)物的變化往往是自動(dòng)的,而且是有一定規(guī)律的,即不是隨人的意志而改變

3、。這就需要在VRML虛擬世界中,創(chuàng)建出能自動(dòng)變化而不需要人為改變的造型。我們可以通過(guò)設(shè)定時(shí)間按某種規(guī)律變化來(lái)控制造型變化,而控制時(shí)間按某種規(guī)律變化最常見(jiàn)的就是時(shí)間傳感器。 TimeSenor時(shí)間傳感器節(jié)點(diǎn)的作用就是創(chuàng)建一個(gè)虛擬時(shí)鐘,并對(duì)其他節(jié)點(diǎn)發(fā)送時(shí)間值,控制VRML立體空間的動(dòng)態(tài)對(duì)象的開(kāi)始、變化和結(jié)果過(guò)程的時(shí)間,實(shí)現(xiàn)空間物體造型的移動(dòng)、變色、變形等自動(dòng)變化。TimeSensor時(shí)間傳感器又包含絕對(duì)時(shí)間(Absolute Time)和部分時(shí)間(Fractional Time)兩個(gè)概念。絕對(duì)時(shí)間是以秒為單位計(jì)算的。在絕對(duì)時(shí)間內(nèi),1秒發(fā)生在絕對(duì)日期的時(shí)間經(jīng)過(guò)1秒之后,如2003年6月16日08點(diǎn)5

4、8分59秒,經(jīng)過(guò)1秒鐘變?yōu)?003年6月16日08點(diǎn)59分。部分時(shí)間又稱(chēng)相對(duì)時(shí)間,是空間物體運(yùn)動(dòng)從某一時(shí)刻0.0開(kāi)始運(yùn)動(dòng)一直到1.0為止。從0.0時(shí)刻到1.0時(shí)刻稱(chēng)為相對(duì)時(shí)間,相對(duì)時(shí)間的差可以是絕對(duì)時(shí)間的30秒,10分鐘或1小時(shí)等,這段時(shí)間差也稱(chēng)為動(dòng)態(tài)對(duì)象的運(yùn)動(dòng)周期。 TimeSensor時(shí)間傳感器節(jié)點(diǎn)在VRML中并不產(chǎn)生任何造型和可視效果。其作用只是向各插補(bǔ)器節(jié)點(diǎn)輸出事件,以使插補(bǔ)器節(jié)點(diǎn)產(chǎn)生所需要的動(dòng)畫(huà)效果。該節(jié)點(diǎn)可以包含在任何組節(jié)點(diǎn)中作為子節(jié)點(diǎn),但獨(dú)立于所選用的坐標(biāo)系。 TimeSensor時(shí)間傳感器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)

5、各種插補(bǔ)器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)TimeSensor節(jié)點(diǎn)語(yǔ)法TimeSensor enable TRUE # exposedField SFBool startTime 0.0 # exposedField SFTime stopTime 0.0 # exposedField SFTime cycleInterval 1.0 # exposedField SFTime loop FALSE # exposedField SFBool isActive # eventOut SFTime Time # eventOut SFTime cycleTime # eventOut SF

6、Time fraction_changed # eventOut SFFloat 域名和域值詳解cycleInterval域的域值定義了一個(gè)時(shí)間長(zhǎng)度,用來(lái)說(shuō) 明這個(gè)時(shí)間傳感器從00時(shí)刻到10時(shí)刻之間的周期間隔,單位為秒。該域值必須大于0.0,其默認(rèn)值為1.0秒。 Enabaled 域的域值定義了時(shí)間傳感器的打開(kāi)或關(guān)閉。該域值為布爾量。若為T(mén)RUE,時(shí)間傳感器被打開(kāi);若為FALSE時(shí),時(shí)節(jié)傳感器被關(guān)閉。其默認(rèn)值為T(mén)RUE。 loop域的值定義了時(shí)間傳感器是否循環(huán)輸出。該域值為布爾量。如果為T(mén)RUE,則時(shí)間傳感器會(huì)自動(dòng)循環(huán),一直到停止時(shí)間為止;如果為FALSE,時(shí)間傳感器不循環(huán),只經(jīng)過(guò)一個(gè)周期后,

7、就會(huì)自動(dòng)停止。其默認(rèn)值為FALSE。(4) startTime域的值定義了時(shí)間傳感器開(kāi)始輸出事件的時(shí)間(絕對(duì)時(shí)間)。該域值的默認(rèn)值為00秒。(5) stopTime域的值定義了時(shí)間傳感器停止輸出事件的時(shí)間(絕對(duì)時(shí)間)。該域值的默認(rèn)值為00秒。上述startTime和stopTime, cycleInterval和loop域值共同控制著時(shí)間傳感器的事件輸出。當(dāng)這4個(gè)域同時(shí)使用時(shí),根據(jù)這4個(gè)域值之間的關(guān)系,決定時(shí)間傳感器的工作狀態(tài)。6.2 VRML動(dòng)畫(huà)控制節(jié)點(diǎn)在VRML中,動(dòng)畫(huà)控制節(jié)點(diǎn)是用來(lái)實(shí)現(xiàn)動(dòng)畫(huà)效果的,在現(xiàn)實(shí)世界中,萬(wàn)物都是在變化著的,如太陽(yáng)的升落,樹(shù)葉由綠變黃等,這些都是自然界中實(shí)現(xiàn)的動(dòng)畫(huà)效

8、果。在VRML中也可以實(shí)現(xiàn)同樣動(dòng)畫(huà)效果,使VRML世界更加生動(dòng)、真實(shí)。VRML提供了多個(gè)用來(lái)控制動(dòng)畫(huà)的插補(bǔ)器。 插補(bǔ)器(Interpolator)節(jié)點(diǎn)是為線(xiàn)性關(guān)鍵幀動(dòng)畫(huà)而設(shè)計(jì)的,其采用一組關(guān)鍵數(shù)值,且每個(gè)關(guān)鍵值對(duì)應(yīng)一種狀態(tài)。這個(gè)狀態(tài)允許以各種形式表示,如SFVec3f 或 SFColor, 瀏覽器會(huì)根據(jù)這些狀態(tài)生成連續(xù)的動(dòng)畫(huà)。一般來(lái)說(shuō),瀏覽器在兩個(gè)相鄰關(guān)鍵幀之間生成的連續(xù)幀是線(xiàn)性的。插補(bǔ)器節(jié)點(diǎn)可根據(jù)其所插值的類(lèi)型不同分為6種: 位置插補(bǔ)器(PositionInterpolator) 朝向插補(bǔ)器(OrientationInterpolator) 顏色插補(bǔ)器(ColorInterpolator)

9、標(biāo)量插補(bǔ)器(ScalarInterpolator)。 坐標(biāo)插補(bǔ)器(CoordinateInterpolator) 法線(xiàn)插補(bǔ)器(NormalInterpolator)6.2.1 PositionInterpolator位置插補(bǔ)器節(jié)點(diǎn)PositionInterpolator位置插補(bǔ)器節(jié)點(diǎn)是空間造型位置移動(dòng)節(jié)點(diǎn),用來(lái)描述一系列用于動(dòng)畫(huà)的關(guān)鍵值,使物體移動(dòng)形成動(dòng)畫(huà)。該節(jié)點(diǎn)不創(chuàng)建任何造型,在一組SFVec3f值之間進(jìn)行線(xiàn)性插值,適合于對(duì)于平移進(jìn)行插值PositionInterpolator位置插補(bǔ)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)如圖Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)Positi

10、onInterpolator位置插補(bǔ)器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)PositionInterpolator key # exposedField MFFloat keyValue # exposedField MFVec3f set_faction # eventIn SFFloat value_changed # eventOut SFVec3f域名和域值詳解(1) key域的值 定義了一張變化時(shí)刻關(guān)鍵值列表。每一個(gè)時(shí)間值都代表全部動(dòng)態(tài)時(shí)間中的一個(gè)相對(duì)時(shí)間,每個(gè)時(shí)刻值一般在0.0與1.0之間,并且由0依次到1。然而關(guān)鍵時(shí)刻值可以是任意大小的正值或負(fù)值,但必須以遞增的順序排列,其默認(rèn)

11、值是一張空列表。(2) keyValue域的值 定義了一組三維坐標(biāo)值列表。每一組坐標(biāo)值都對(duì)應(yīng)key域值中的一個(gè)相對(duì)時(shí)間段,其默認(rèn)值是一張空列表 。事件說(shuō)明 (1)set_fraction為入事件(eventIn),當(dāng)接收到一個(gè)時(shí)刻值時(shí),PositionInterpolator節(jié)點(diǎn)計(jì)算出基于關(guān)鍵位置表和相關(guān)的關(guān)鍵時(shí)刻的一個(gè)位置,并通過(guò)value_changed事件出口輸出新的位置列表。 (2) value_changed為出事件(eventOut),將信息傳送給目標(biāo)節(jié)點(diǎn),傳遞內(nèi)容為一組方位值。 為了更好的理解、掌握和控制動(dòng)畫(huà)的插補(bǔ)器實(shí)現(xiàn)動(dòng)畫(huà)過(guò)程,結(jié)合下面實(shí)例將動(dòng)畫(huà)所需時(shí)間傳感器相對(duì)時(shí)間的邏輯值和

12、空間坐標(biāo)的位置值對(duì)應(yīng)起來(lái),如圖6-3所示。再結(jié)合空間物體造型的立體空間坐標(biāo)示意圖,如圖6-4所示,可以更好的理解和掌握VRML具有動(dòng)態(tài) 交互的各個(gè)節(jié)點(diǎn)。相對(duì)時(shí)間的邏輯值 空間坐標(biāo)的位置對(duì)應(yīng)值 key 0.0keyValue(0 0 0)( 0 0 -200) keyValue( 8 5 -20) keyValue( 8 -5 -20 ) keyValue(- 8 -5 -20 ) keyValue(- 8 5 -20 ) keyValuekeyValue(0 0 -20)key 0.2圖6-4 立體空間物體造型移動(dòng)軌跡的立體空間坐標(biāo)示意圖 使用位置插補(bǔ)器節(jié)點(diǎn),引入VRML飛碟空間造型;在時(shí)間傳

13、感器與位置插補(bǔ)器共同作用下,使飛碟沿著指定路徑飛馳;從坐標(biāo)原點(diǎn)出發(fā),經(jīng)過(guò)曲折的路徑最后返回原點(diǎn),并循環(huán)往復(fù)運(yùn)行。實(shí)例 6-1路由把每一個(gè)節(jié)點(diǎn)聯(lián)系起來(lái),其中,fraction_changed為時(shí)間傳感器的出事件傳送給位置插補(bǔ)器節(jié)點(diǎn)的set_fraction入事件,然后再由位置插補(bǔ)器節(jié)點(diǎn)的value_changed出事件傳遞給立體空間造型飛碟中坐標(biāo)變換節(jié)點(diǎn)的暴露域set_translation入時(shí)間,從而實(shí)現(xiàn)飛碟的飛行。飛碟如何運(yùn)動(dòng)? 范例6-26.2.2 0rientationInterpolator朝向插補(bǔ)器節(jié)點(diǎn)0rientationInterpolator朝向插補(bǔ)器節(jié)點(diǎn)是方位變換節(jié)點(diǎn),用來(lái)描

14、述一系列在動(dòng)畫(huà)中使用的旋轉(zhuǎn)值。該節(jié)點(diǎn)不創(chuàng)建任何造型,可以在不同時(shí)刻旋轉(zhuǎn)到所對(duì)應(yīng)的方位(朝向)。通過(guò)使用該節(jié)點(diǎn),可以使造型旋轉(zhuǎn)。orientationInterpolator朝向插補(bǔ)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)0rientationInterpolator位置插補(bǔ)器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)OrientationInterpolator節(jié)點(diǎn)語(yǔ)法OrientationInterpolator key # exposedField MFFloat keyValue # exposedField MFVec3f set_fac

15、tion # eventIn SFFloat value_changed # eventOut SFVec3f 域名和域值詳解(1) key域的域值 定義了一組相對(duì)時(shí)間間隔的時(shí)間關(guān)鍵值。時(shí)間值一般在0.0和1.0之間,并且由0依次到1以遞增的順序排列。其默認(rèn)值是一張空列表 。(2) keyValue域的域值 定義了一個(gè)三維旋轉(zhuǎn)關(guān)鍵值的列表。每一個(gè)旋轉(zhuǎn)關(guān)鍵值是一個(gè)4個(gè)值的組,前3個(gè)值指定了一個(gè)旋轉(zhuǎn)軸的X、Y和Z分量,第4個(gè)值指定了旋轉(zhuǎn)軸的一個(gè)旋轉(zhuǎn)角度。其默認(rèn)值是一張空列表 。 (1) set_fraction 為入事件( eventIn ),當(dāng)接收到一個(gè)時(shí)刻值時(shí), OrientationInte

16、rpolator朝向插補(bǔ)器節(jié)點(diǎn)根據(jù)關(guān)鍵時(shí)刻列表和其對(duì)應(yīng)關(guān)鍵旋轉(zhuǎn)列表計(jì)算出一個(gè)關(guān)鍵旋轉(zhuǎn)子列表,并通過(guò)value_changed事件出口輸出新算出的旋轉(zhuǎn)列表。 (2) value_changed 為出事件(eventOut),把信息傳送給目標(biāo)節(jié)點(diǎn),傳遞內(nèi)容為一組方位值。在藍(lán)色背景下,使用時(shí)間傳感器節(jié)點(diǎn)、內(nèi)聯(lián)節(jié)點(diǎn)和朝向插補(bǔ)器節(jié)點(diǎn)使飛船沿Y軸旋轉(zhuǎn)180,且循環(huán)執(zhí)行。vrml 6-3.wrl6.2.3 ScalarInterpolator 標(biāo)量插補(bǔ)器節(jié)點(diǎn)ScalarInterpolator標(biāo)量插補(bǔ)器節(jié)點(diǎn)是強(qiáng)度變換動(dòng)態(tài)節(jié)點(diǎn),描述的是在動(dòng)畫(huà)中使用的一系列關(guān)鍵值。該節(jié)點(diǎn)不創(chuàng)建任何造型,在一組SFFloat值之

17、間進(jìn)行線(xiàn)性插值,這個(gè)插值適合于用簡(jiǎn)單的浮點(diǎn)值定義的任何參數(shù)。 使用ScalarInterpolator標(biāo)量插補(bǔ)器節(jié)點(diǎn)和TimeSensor時(shí)間傳感器節(jié)點(diǎn)來(lái)改變光線(xiàn)節(jié)點(diǎn)中的Intensity域的域值(光線(xiàn)強(qiáng)度),使光線(xiàn)強(qiáng)度隨時(shí)間的改變而變化,實(shí)現(xiàn)動(dòng)態(tài)效果。ScalarInterpolator標(biāo)量插補(bǔ)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)ScalarInterpolator標(biāo)量插補(bǔ)器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)DirectionalLight方向光源節(jié)點(diǎn)ScalarInterpolator節(jié)點(diǎn)語(yǔ)法ScalarInterpolator

18、key # exposedField MFFloat keyValue # exposedField MFVec3f set_faction # eventIn SFFloat value_changed # eventOut SFVec3f 域名和域值詳解(1) key域的域值 提供了一組時(shí)間關(guān)鍵值列表,每個(gè)時(shí)間值代表一個(gè)相對(duì)時(shí)間段的值,該時(shí)間值一般在0.0和1.0之間,但必須以遞增的順序排列。其默認(rèn)值是一張空列表 。 (2) keyValue域的值 指定了一系列三維坐標(biāo)值。每一組坐標(biāo)值都對(duì)應(yīng)key域的域值中的一個(gè)相對(duì)時(shí)間段的值。其默認(rèn)值為一個(gè)空的序列 。 (1)set_fraction 為

19、入事件(eventIn),當(dāng)收到一個(gè)時(shí)刻值時(shí), ScalarInterpolator節(jié)點(diǎn)根據(jù)關(guān)鍵值的序列和它們對(duì)應(yīng)的關(guān)鍵時(shí)刻值,計(jì)算一個(gè)浮點(diǎn)值,并通過(guò)value_changed事件出口輸出計(jì)算后的浮點(diǎn)值。 (2)value_changed 為出事件(ewntOut),它把信息傳送給目標(biāo)節(jié)點(diǎn),傳遞內(nèi)容為一組方位值。ScalarInterpolator節(jié)點(diǎn)還可以用來(lái)控制VRML造型的透明度,通過(guò)控制 Mateirial 節(jié)點(diǎn)的 transparency 域值,使造型的透明度改變vrml 6-4.wrl在立體空間背景下,利用方向光源節(jié)點(diǎn)、時(shí)間傳感器、內(nèi)聯(lián)節(jié)點(diǎn)和標(biāo)量插補(bǔ)器節(jié)點(diǎn),使平行光源的光照強(qiáng)度發(fā)生

20、變化,創(chuàng)建動(dòng)態(tài)視覺(jué)效果vrml 6-5.wrl讓空間球體的透明度發(fā)生變化,從而使啞鈴的可見(jiàn)度也發(fā)生變化6.2.4 ColorInterpolator顏色插補(bǔ)器節(jié)點(diǎn)ColorInterpolator顏色插補(bǔ)器節(jié)點(diǎn)是用來(lái)表示顏色間插值的節(jié)點(diǎn),使立體空間場(chǎng)景與造型顏色發(fā)生變化。該節(jié)點(diǎn)并不創(chuàng)建造型,在VRML場(chǎng)景中是看不見(jiàn)的。該節(jié)點(diǎn)可以作為任何編組節(jié)點(diǎn)的子節(jié)點(diǎn),但又獨(dú)立于所使用的坐標(biāo)系,即不受坐標(biāo)系的限制。ColorInterpolator顏色插補(bǔ)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)ColorInterpolator顏色插補(bǔ)器節(jié)點(diǎn)ROUTE路由I

21、nline內(nèi)聯(lián)節(jié)點(diǎn)DirectionalLight方向光源節(jié)點(diǎn)ColorInterpolator節(jié)點(diǎn)語(yǔ)法ColorInterpolator key # exposedField MFFloat keyValue # exposedField MFVec3f set_faction # eventIn SFFloat value_changed # eventOut SFVec3f 域名和域值詳解(1) key域的域值 提供了一組時(shí)間關(guān)鍵值列表,每個(gè)時(shí)間值代表一個(gè)相對(duì)時(shí)間段的值,該時(shí)間值一般在0.0至1.0之間,但必須以遞增的順序排列。其默認(rèn)值是一張空列表 。 (2) keyValue域的值 指

22、定了一系列三維坐標(biāo)的關(guān)鍵RGB色彩值。每個(gè)RGB色彩都是由在0.0至1.0區(qū)間內(nèi)的3個(gè)浮點(diǎn)數(shù)所表示的,它們分別表示混合色中紅、綠、藍(lán)的數(shù)值。每一組坐標(biāo)值都對(duì)應(yīng)key域的域值中的一個(gè)相對(duì)時(shí)間段的值。其默認(rèn)值為一張空列表 。 (1) set_fraction 為入事件(eventIn),當(dāng)收到一個(gè)時(shí)刻值時(shí),ColorInterpolator顏色插補(bǔ)器節(jié)點(diǎn)就在關(guān)鍵色彩值和它們相應(yīng)的關(guān)鍵時(shí)間值的基礎(chǔ)上計(jì)算出一個(gè)RGB色彩值,并通過(guò)value_changed出事件輸出該RGB色彩值。(2) value_changed 為出事件(eventOut),用來(lái)輸出計(jì)算后的RGB色彩值。實(shí)例6-6 利用方向光源節(jié)

23、點(diǎn)、時(shí)間傳感器節(jié)點(diǎn)、內(nèi)聯(lián)節(jié)點(diǎn)及顏色插補(bǔ)器節(jié)點(diǎn)來(lái)改變顏色,實(shí)現(xiàn)動(dòng)態(tài)控制顏色的變化的效果,并在場(chǎng)景中利用路由控制和傳遞信息vrml 6-6.wrlvrml 6-7.wrl6.2.5 CoordinateInterpolator坐標(biāo)插補(bǔ)器節(jié)點(diǎn)CoordinateInterpolator坐標(biāo)插補(bǔ)器節(jié)點(diǎn)是表示坐標(biāo)插值的節(jié)點(diǎn),該節(jié)點(diǎn)在一組MFVec3f值之間進(jìn)行線(xiàn)性插值。通過(guò)使用該節(jié)點(diǎn),可以使一個(gè)造型的組成坐標(biāo)發(fā)生變化。同ColorInterpolator節(jié)點(diǎn)一樣, CoordinateInterpolator節(jié)點(diǎn)也不創(chuàng)建任何造型,在VRML場(chǎng)景中也是不可見(jiàn)的。坐標(biāo)插補(bǔ)器的作用是利用坐標(biāo)點(diǎn)的移動(dòng)實(shí)現(xiàn)動(dòng)畫(huà)。

24、通過(guò)使用CoordinateInterpolator節(jié)點(diǎn),可使VRML中的物體造型上的各個(gè)坐標(biāo)點(diǎn)形成獨(dú)自的運(yùn)動(dòng)軌跡,可以使物體造型改變運(yùn)動(dòng)方向。 CoordinateInterpolator坐標(biāo)插補(bǔ)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)CoordinateInterpolator顏色插補(bǔ)器節(jié)點(diǎn)ROUTE路由Shape模型節(jié)點(diǎn)CoordinateInterpolator 坐標(biāo)插補(bǔ)器節(jié)點(diǎn)語(yǔ)法CoordinateInterpolator key # exposedField MFFloat keyValue # exposedField MFVec3f set_

25、faction # eventIn SFFloat value_changed # eventOut SFVec3f 域名和域值詳解(1) key域的域值 提供了一組時(shí)間關(guān)鍵值列表,每個(gè)時(shí)間值代表一個(gè)相對(duì)時(shí)間段的值。該時(shí)間值一般在00至10之間,但必須以遞增的順序排列。其默認(rèn)值是一張空列表1)。(2) keyValue域的值 指定了一系列三維坐標(biāo)的列表。每一個(gè)坐標(biāo)都包含3個(gè)浮點(diǎn)數(shù)值,分別為向量的X、Y和Z分量。每一組坐標(biāo)值都對(duì)應(yīng)key域的域值中的一個(gè)相對(duì)時(shí)間段的值。其默認(rèn)值為一張空的列表 。(1) set_fraction 為入事件(eventIn),當(dāng)收到一個(gè)時(shí)刻值時(shí),CoordinateI

26、nterpolator節(jié)點(diǎn)就依據(jù)關(guān)鍵時(shí)刻列表和它們相對(duì)應(yīng)的關(guān)鍵坐標(biāo)子列表計(jì)算出一張坐標(biāo)的子列表,并通過(guò)value_changed出事件輸出新的坐標(biāo)列表。 (2) value_changed 為出事件(eventOut),用來(lái)輸出計(jì)算后的新的坐標(biāo)列表值。實(shí)例6-8 使用坐標(biāo)插補(bǔ)器節(jié)點(diǎn)和時(shí)間傳感器節(jié)點(diǎn),并利用面節(jié)點(diǎn)控制面的尺寸大小,從而使立體空間造型產(chǎn)生循環(huán)運(yùn)動(dòng)的動(dòng)畫(huà)效果,也可以使造型畸形變化。vrml 6-8.wrlvrml 6-9.wrl6.2.6 NormalInterpolator 法線(xiàn)插補(bǔ)器節(jié)點(diǎn)NormalInterpolator 法線(xiàn)插補(bǔ)器節(jié)點(diǎn)可以改變法向量Normal節(jié)點(diǎn)中vecto

27、r域的域值。 vector域的域值定義了一個(gè)法向量列表(X Y Z),法向量Normal節(jié)點(diǎn)是面節(jié)點(diǎn)和海拔柵格節(jié)點(diǎn)中的一個(gè)節(jié)點(diǎn)。NormalInterpolator法線(xiàn)插補(bǔ)器節(jié)點(diǎn)在時(shí)間傳感器的配合下,產(chǎn)生虛擬世界的各種逼真的動(dòng)感效果。NormalInterpolator法線(xiàn)插補(bǔ)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)NormalInterpolator顏色插補(bǔ)器節(jié)點(diǎn)ROUTE路由Shape模型節(jié)點(diǎn)NormalInterpolator法線(xiàn)插補(bǔ)器節(jié)點(diǎn)語(yǔ)法NormalInterpolator key # exposedField MFFloat keyValue

28、# exposedField MFVec3f set_faction # eventIn SFFloat value_changed # eventOut SFVec3f 域名和域值詳解(1) key域的域值 提供了一組時(shí)間關(guān)鍵值列表,每個(gè)時(shí)間值代表一個(gè)相對(duì)時(shí)間段的值。該時(shí)間值一般在0.0至1.0之間,但必須以遞增的順序排列。其默認(rèn)值是一張空列表 。(2) keyValue域的值 指定了一系列法向量列表。每一個(gè)坐標(biāo)都包含3個(gè)浮點(diǎn)數(shù)值,分別為向量的X、Y和Z分量。每一組坐標(biāo)值都對(duì)應(yīng)key域的域值中的一個(gè)相對(duì)時(shí)間段的值。其默認(rèn)值為一個(gè)空的列表 。 (1)set_fraction為入事件(event

29、In),當(dāng)收到一個(gè)時(shí)刻值時(shí),NormalInterpolator法線(xiàn)插補(bǔ)器節(jié)點(diǎn)就依據(jù)關(guān)鍵時(shí)刻列表和它們相對(duì)應(yīng)的關(guān)鍵法向量列表計(jì)算出一個(gè)法向量子列表,通過(guò)如e changed出事件輸出新的法向量列表。 (2)value_changed為出事件(eventOut),用來(lái)輸出計(jì)算后的新法向量列表值。實(shí)例6-10 在藍(lán)色立體空間背景下,利用模型節(jié)點(diǎn)、面節(jié)點(diǎn)、時(shí)間傳感器節(jié)點(diǎn)及法線(xiàn)插補(bǔ)器節(jié)點(diǎn)使立體空間造型的兩個(gè)垂直面在法向量的控制下產(chǎn)生變化的效果vrml 6-10.wrl6.3 VRML觸摸檢測(cè)器節(jié)點(diǎn)實(shí)現(xiàn)VRML的交互功能,需要設(shè)計(jì)觸動(dòng)檢測(cè)器或傳感器。在VRML虛擬世界中,用戶(hù)與虛擬現(xiàn)實(shí)世界之間的交互是通

30、過(guò)一系列檢測(cè)器節(jié)點(diǎn)來(lái)實(shí)現(xiàn)的,通過(guò)使用這些檢測(cè)器節(jié)點(diǎn),使瀏覽器感知用戶(hù)的各種操作,比如開(kāi)門(mén)、旋轉(zhuǎn)、移動(dòng)和飛行等。這樣用戶(hù)就可以和VRML虛擬世界中的三維對(duì)象直接進(jìn)行交互。觸動(dòng)檢測(cè)器是用來(lái)檢測(cè)用戶(hù)的觸動(dòng)動(dòng)作的,其中包括TouchSensor節(jié)點(diǎn)Planesensor節(jié)點(diǎn)CylinderSensorr節(jié)點(diǎn)SphereSensor節(jié)點(diǎn)等6.3.1 TouchSensor 觸摸傳感器節(jié)點(diǎn)TouchSensor觸摸傳感器節(jié)點(diǎn)是瀏覽者與虛擬對(duì)象之間相接觸型傳感器節(jié)點(diǎn)。TouchSensor觸摸傳感器節(jié)點(diǎn)創(chuàng)建了一個(gè)檢測(cè)用戶(hù)動(dòng)作并將其轉(zhuǎn)化后輸出,以觸發(fā)一個(gè)動(dòng)畫(huà)的檢測(cè)器。它用來(lái)測(cè)試用戶(hù)觸摸事件的檢測(cè)器。該節(jié)點(diǎn)可以

31、為任何成組節(jié)點(diǎn)的子節(jié)點(diǎn),并感知用戶(hù)對(duì)該組節(jié)點(diǎn)的動(dòng)作。TouchSensor觸摸傳感器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)各種插補(bǔ)檢測(cè)器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)TouchSensor觸摸傳感器節(jié)點(diǎn)TouchSensor節(jié)點(diǎn)語(yǔ)法(觸摸傳感器節(jié)點(diǎn))TouchSensor enable TRUE # exposedField SFBool isActive # eventOut SFBool isOver # eventOut SFBool touchTime # eventOut SFVec3f hitPoint_changed #

32、 eventOut SFVec3f hitNormal_changed # eventOut SFVec3f hitTexcood_changed # eventOut SFVec3f域名和域值詳解enabled域的域值定義了一個(gè)開(kāi)關(guān),即是否激活觸摸傳感檢測(cè)器。當(dāng)該域值為T(mén)RUE時(shí),該檢測(cè)器允許被用戶(hù)激活,并產(chǎn)生輸出;當(dāng)該域值為FALSE時(shí),用戶(hù)無(wú)法激活該檢測(cè)器。該域值的默認(rèn)值為T(mén)RUE。事件說(shuō)明(1) isOver 為出事件,當(dāng)用戶(hù)的鼠標(biāo)位于被感應(yīng)的三維對(duì)象上方時(shí),將引發(fā)isOver事件,且該事件為T(mén)RUE。反之,當(dāng)用戶(hù)的鼠標(biāo)不在被感應(yīng)的三維對(duì)象上方時(shí),該事件值為FALSE。(2) hitP

33、oint_changed 為出事件,當(dāng)用戶(hù)在被感應(yīng)的幾何圖形(由isOver指定)上單擊鼠標(biāo)時(shí),發(fā)送該值。其值表示對(duì)象上點(diǎn)的坐標(biāo)。(3) hitNormal_changed 為出事件,當(dāng)用戶(hù)在被感應(yīng)的幾何圖形(由isOver指定)上單擊鼠標(biāo)時(shí),發(fā)送該值。其值表示對(duì)象上點(diǎn)的表面法向量。(4) hitTexCoord_changed 為出事件,當(dāng)用戶(hù)在被感應(yīng)的幾何圖形(由isOver指定)上單擊鼠標(biāo)時(shí),發(fā)送該值。其值表示對(duì)象上點(diǎn)的紋理坐標(biāo)。紋理坐標(biāo)功能是VRML中很重要的一個(gè)功能。我們使用這一功能可以像HTML網(wǎng)頁(yè)一樣實(shí)現(xiàn)在一幅貼圖上面劃分多個(gè)區(qū)域,然后將每個(gè)區(qū)域設(shè)置各自的交互。(5) isAct

34、ive 為出事件,當(dāng)用戶(hù)單擊對(duì)象時(shí),檢測(cè)器被激活,該域值由FALSE變?yōu)門(mén)RUE;反之當(dāng)檢測(cè)器失效時(shí),該域值將由TRUE變?yōu)镕ALSE。(6) touchTime 為出事件,當(dāng)isOver為T(mén)RUE,而isActive為FALSE時(shí)發(fā)送該事件,所發(fā)送的值是系統(tǒng)當(dāng)前的時(shí)間。實(shí)例6-11 在藍(lán)色立體空間背景下,首先將光標(biāo)移到飛碟立體空間造型上,當(dāng)出現(xiàn)觸摸圖標(biāo)時(shí),一直按住鼠標(biāo)左鍵不放開(kāi),這時(shí)在屏幕上會(huì)看見(jiàn)一個(gè)在觸摸節(jié)點(diǎn)觸發(fā)下飛行的飛碟第一個(gè)路由是把(Touch.isActive)觸摸傳感器節(jié)點(diǎn)鼠標(biāo)按下時(shí)間的”TRUE”傳送給(Time.enabled)時(shí)間傳感器節(jié)點(diǎn)的控制開(kāi)關(guān)“enabled”,使e

35、nabled由“FALSE”變成“TRUE”第二個(gè)路由是把( Touch.touchTime )觸摸傳感器節(jié)點(diǎn)的單擊事件的發(fā)生時(shí)間傳送給(Time.startTime)時(shí)間傳感器的開(kāi)始時(shí)間第三個(gè)路由是把(Time.fraction_changed)時(shí)間傳感器的執(zhí)行一段時(shí)間值傳送給(flyinter.set_fraction)移動(dòng)位置節(jié)點(diǎn)的一個(gè)時(shí)間片。第四個(gè)路由是把(flyinter.value_changed)移動(dòng)位置節(jié)點(diǎn)的一組值傳送給目標(biāo)節(jié)點(diǎn)(flyinter.set_translation)使飛碟沿著設(shè)定的路徑飛行。6.3.2 PlaneSensor平面檢測(cè)器節(jié)點(diǎn)PlaneSensor平面

36、檢測(cè)器節(jié)點(diǎn)是使虛擬對(duì)象在X-Y平面移動(dòng)型傳感器節(jié)點(diǎn)。PlaneSensor 平面檢測(cè)器節(jié)點(diǎn)能感應(yīng)到觀察者的拖動(dòng)行為,進(jìn)而改變虛擬現(xiàn)實(shí)對(duì)象的位置但是不能改變方位,而且只限定于X-Y平面。當(dāng)觀察者拖動(dòng)虛擬造型時(shí),光標(biāo)會(huì)在虛擬造型上變?yōu)橐粋€(gè)收裝的光標(biāo)。 該節(jié)點(diǎn)創(chuàng)建了一個(gè)可將瀏覽者的動(dòng)作轉(zhuǎn)換成適于操作造型的輸出的檢測(cè)器。該節(jié)點(diǎn)可以為任何成組節(jié)點(diǎn)的子節(jié)點(diǎn),用以感知用戶(hù)對(duì)該組節(jié)點(diǎn)的動(dòng)作,使造型按用戶(hù)的動(dòng)作而平移。 PlaneSensor 平面檢測(cè)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)PlaneSensor平面檢測(cè)器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)PlaneSensor平面檢測(cè)器節(jié)

37、點(diǎn)語(yǔ)法PlaneSensor enable TRUE # exposedField SFBool autoOffset TRUE # exposedField SFBool offset 0.0 0.0 0.0 # exposedField SFVec3f maxPosition -1.0 -1.0 # exposedField SFVec2f minPosition 1.0 1.0 # exposedField SFVec2f isActive # eventOut SFBool translation_changed # eventOut SFVec3f tracPoint_changed

38、 # eventOut SFVec3f域名和域值詳解(1) enabled域的域值 是布爾量,定義了一個(gè)開(kāi)關(guān),即是否激活平面移動(dòng)傳感檢測(cè)器,當(dāng)該域值為T(mén)RUE時(shí),該檢測(cè)器允許被用戶(hù)激活,并產(chǎn)生輸出;當(dāng)該域值為FALSE時(shí),用戶(hù)無(wú)法激活該檢測(cè)器。其默認(rèn)值為T(mén)RUE。 (2) autoOffset域的域值 是一個(gè)布爾量。如果為T(mén)RI正時(shí),(L億程序會(huì)根據(jù)用戶(hù)實(shí)際拖拉鼠標(biāo)的情況,計(jì)算出每一次平移的偏移量;如果為F虬SE時(shí),表示每當(dāng)用戶(hù)進(jìn)行一次新的拖曳后,就會(huì)自動(dòng)重新回到默認(rèn)值。其默認(rèn)值為T(mén)R(正。(3) maxPosition域的域值 用來(lái)設(shè)置檢測(cè)器的最大位置值,其功能是限制移動(dòng)對(duì)象的范圍只能在XY

39、平面的某一點(diǎn)的下方和此點(diǎn)的左半部。其默認(rèn)值為( 1 1 )。 (4) minPosition域的域值 用來(lái)設(shè)置檢測(cè)器的最小位置值,其功能是限制移動(dòng)對(duì)象的范圍只能在XY平面的某一點(diǎn)的上方和此點(diǎn)的右半部。其默認(rèn)值為( 0 0 )。(5) offset域的域值 用于設(shè)置偏移量,即每一次輸出位置時(shí)的偏移量。當(dāng)autoOffset域的域值為T(mén)RUE時(shí),人為設(shè)置的偏移量將被忽略。其功能是每當(dāng)用戶(hù)進(jìn)行一次新的拖曳時(shí),能夠從默認(rèn)位置被移動(dòng)到的最遠(yuǎn)距離。其默認(rèn)值為( 0 0 0 )。 事件說(shuō)明 (1) isActive 為出事件(eventOut),若該事件為T(mén)RUE時(shí),表示鼠標(biāo)是被按下的狀態(tài),若為FALSE時(shí)

40、,則反之。該事件只會(huì)送出鼠標(biāo)鍵是否被按下,但不是處于拖曳狀態(tài)。 (2) trackPoint_changed 為出事件,表示進(jìn)行拖曳后,用戶(hù)的鼠標(biāo)在XY平面上的確切位置。當(dāng)檢測(cè)器被激活且用戶(hù)單擊鼠標(biāo)時(shí),該出事件發(fā)送該值。其值代表的是虛擬平面上的當(dāng)前單擊點(diǎn)。 (3) translation_changed 為出事件,表示在進(jìn)行拖曳的任意時(shí)刻,用戶(hù)的鼠標(biāo)在XY平面上的暫時(shí)位置。當(dāng)檢測(cè)器被激活且用戶(hù)單擊鼠標(biāo)時(shí),該出事件發(fā)送該值。其值代表虛擬平面上的平移坐標(biāo)值。 實(shí)例6-12 使用平面檢測(cè)器節(jié)點(diǎn),能使帆船在VRML立體空間行駛;當(dāng)用戶(hù)單擊帆船造型后,帆船會(huì)按指定路徑左移到指定位置vrml 6-12.w

41、rl6.3.2 CylinderSensor圓柱檢測(cè)器節(jié)點(diǎn)CylinderSensor圓柱檢測(cè)器節(jié)點(diǎn)是虛擬造型按圓柱體的中心軸旋轉(zhuǎn)型傳感器。CylinderSensor圓柱檢測(cè)器節(jié)點(diǎn)用來(lái)創(chuàng)建一個(gè)將用戶(hù)動(dòng)作轉(zhuǎn)換成造型圍繞Y軸旋轉(zhuǎn)的檢測(cè)器。該節(jié)點(diǎn)可以作為任何組節(jié)點(diǎn)的子節(jié)點(diǎn)。此節(jié)點(diǎn)能夠感應(yīng)到用戶(hù)的拖動(dòng)動(dòng)作,讓被拖動(dòng)的虛擬對(duì)象沿著Y軸旋轉(zhuǎn),虛擬對(duì)象就繞著圓柱體的中心軸被拖動(dòng)旋轉(zhuǎn)。CylinderSensor圓柱檢測(cè)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)CylinderSensor平面檢測(cè)器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)CylinderSensor圓柱檢測(cè)器節(jié)點(diǎn)語(yǔ)法Cylin

42、derSensor enable TRUE # exposedField SFBool diskAngle 0.262 # exposedField SFFloat autoOffset TRUE # exposedField SFBool offset 0 # exposedField SFVec3f maxAngle -1.0 # exposedField SFFloat minAngle 0.0 # exposedField SFFloat isActive # eventOut SFBool rotation_changed # eventOut SFVec3f tracPoint_c

43、hanged # eventOut SFVec3f域名和域值詳解(1) enabled域值 是布爾量。若為T(mén)RUE時(shí),表示檢測(cè)器允許被用戶(hù)激活;若為FALSE時(shí),檢測(cè)器未被用戶(hù)激活。其默認(rèn)值為T(mén)RUE。(2)autoOffset域的值也是布爾量。若該域值為T(mén)RUE時(shí),VRML程序會(huì)根據(jù)用戶(hù)實(shí)際拖拉鼠標(biāo)的情況,計(jì)算出每一次旋轉(zhuǎn)的偏移量;若為FALSE時(shí),表示每當(dāng)用戶(hù)重新拖拉一次鼠標(biāo)后,就會(huì)自動(dòng)回到默認(rèn)值。其默認(rèn)值為T(mén)RUE。 (3) offset域的值 指定了物體旋轉(zhuǎn)的偏移量,即虛擬對(duì)象能夠從默認(rèn)位置被旋轉(zhuǎn)多少弧度。其默認(rèn)值為0。當(dāng)autoOffset字段的值為T(mén)RUE時(shí),人為設(shè)置的偏移量將被忽

44、略。 (4) maxAngle域的值定義了檢測(cè)器輸出的最大旋轉(zhuǎn)角度。 (5) minAngle 域的值定義了檢測(cè)器輸出的最小旋轉(zhuǎn)角度。 (6) diskAngle域的值定義了檢測(cè)器在圓盤(pán)行為和圓柱行為之間 切換角度。默認(rèn)值為 0262弧度。事件說(shuō)明 (1) isActive為出事件,當(dāng)檢測(cè)器被激活時(shí),若該值為T(mén)RUE, 表示當(dāng)前用戶(hù)正在進(jìn)行拖拉操作,若為FALSE則反之。 (2)trackPoint_changed為出事件,當(dāng)用戶(hù)激活檢測(cè)器并進(jìn)行拖拉操作時(shí),將引發(fā)該事件值。其值代表圓柱體表面點(diǎn)的坐標(biāo)。 (3)rotation_changed為出事件,當(dāng)用戶(hù)激活檢測(cè)器并進(jìn)行拖拉操作時(shí),將引發(fā)該事

45、件值。該值是虛擬的圓柱體的旋轉(zhuǎn)值。實(shí)例6-13 在藍(lán)色立體空間背景下,使用圓柱檢測(cè)器節(jié)點(diǎn),打開(kāi)一扇門(mén);當(dāng)用戶(hù)單擊門(mén)造型時(shí),此門(mén)旋轉(zhuǎn)90度打開(kāi) vrml 6-13.wrl vrml 6-14.wrl 6.3.4 SphereSensor球面檢測(cè)器節(jié)點(diǎn)SphereSensor球面檢測(cè)器節(jié)點(diǎn)是使虛擬對(duì)象按任意軸方向旋轉(zhuǎn)型傳感器。SphereSens球面檢測(cè)器節(jié)點(diǎn)創(chuàng)建了一個(gè)將用戶(hù)動(dòng)作轉(zhuǎn)換成造型繞某一點(diǎn)旋轉(zhuǎn)的檢測(cè)器。該節(jié)點(diǎn)可作為其他組節(jié)點(diǎn)的子節(jié)點(diǎn)。它能感受到用戶(hù)使用鼠標(biāo)的拖動(dòng)行為,使造型在沒(méi)有固定旋轉(zhuǎn)軸的情況下,被任意拖動(dòng)地旋轉(zhuǎn),也可以改變方位,但不能移動(dòng)位置。空間造型可在一個(gè)以球體為中心的任意旋轉(zhuǎn)軸上

46、旋轉(zhuǎn)。SphereSensor球面檢測(cè)器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)SphereSensor平面檢測(cè)器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)SphereSensor球面監(jiān)測(cè)器節(jié)點(diǎn)語(yǔ)法SphereSensor enable TRUE # exposedField SFBool autoOffset TRUE # exposedField SFBool offset 0.0 1.0 0.0 0.0 # exposedField SFVec3f isActive # eventOut SFBool rotation_changed # eventOut SFVec3f t

47、racPoint_changed # eventOut SFVec3f域名和域值詳解(1) enabled域值 是布爾量。若為T(mén)RUE時(shí),表示檢測(cè)器允許被用戶(hù)激活;若為FALSE,檢測(cè)器未被用戶(hù)激活。其默認(rèn)值為T(mén)RUE。 (2) autoOffset域的值 是布爾量。若為T(mén)RUE,表示物體拖拉前后所移動(dòng)的軌跡,且停在拖拉后的位置;若為FALSE,則表示每當(dāng)用戶(hù)進(jìn)行一次新的拖拉后,就會(huì)自動(dòng)重新回到默認(rèn)值。其默認(rèn)值為T(mén)RUE。該域值作用是指定該旋轉(zhuǎn)值是否發(fā)生偏移。 (3) offse真域的域值 指定了檢測(cè)器每一次輸出的旋轉(zhuǎn)量。作用是每當(dāng)用戶(hù)執(zhí)行一次新的拖拉時(shí),虛擬對(duì)象能夠從默認(rèn)方位被旋轉(zhuǎn)一定的角度

48、。其默認(rèn)值為(0 1 0 0)。當(dāng)autoOffset域值設(shè)置為T(mén)RUE時(shí),本字段的設(shè)置將被忽略。vrml 6-15.wrl飛船會(huì)按要求旋轉(zhuǎn),當(dāng)用戶(hù)單擊飛船時(shí),可使飛船在以球體為中心的任意軸上旋轉(zhuǎn)6.4 VRML感知檢測(cè)器節(jié)點(diǎn)運(yùn)用VRML感知檢測(cè)器可以感知用戶(hù)與造型的接近程度。感知檢測(cè)器包括VisibilitySensor能見(jiàn)度傳感器節(jié)點(diǎn)、ProximtitySensor親近度傳感器節(jié)點(diǎn)Collision碰撞傳感器節(jié)點(diǎn)6.4.1 VisibilitySensor能見(jiàn)度傳感器節(jié)點(diǎn)VisibilitySensor能見(jiàn)度傳感器節(jié)點(diǎn)也稱(chēng)為可見(jiàn)性感知檢測(cè)器節(jié)點(diǎn)。 VisibilitySensor能見(jiàn)度傳

49、感器節(jié)點(diǎn)用來(lái)從觀察者的方向和位置感知一個(gè)長(zhǎng)方體區(qū)域在當(dāng)前的坐標(biāo)系中何時(shí)才是可視的。該節(jié)點(diǎn)可作為任意組節(jié)點(diǎn)的子節(jié)點(diǎn)。VisibilitySensor能見(jiàn)度傳感器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)VisibilitySensor能見(jiàn)度傳感器節(jié)點(diǎn)ROUTE路由Inline內(nèi)聯(lián)節(jié)點(diǎn)PositionInterpolator 位置插補(bǔ)器節(jié)點(diǎn)VisibilitySensor能見(jiàn)度傳感器節(jié)點(diǎn)語(yǔ)法VisibilitySensor enabled TRUE # exposedField SFBool center 0.0 0.0 0.0 # exposedF

50、ield SFVec3f size 0.0 0.0 0.0 # exposedField SFVec3f isActive # eventOut SFBool enterTime # eventOut SFTime exitTime # eventOut SFTime 域名和域值詳解(1) enabled域的域值 是一個(gè)布爾量。若為T(mén)RUE,表示能見(jiàn)度傳感器節(jié)點(diǎn)可以感受到能見(jiàn)度的改變;若為FALSE,則反之。(2) center域的域值 定義了一個(gè)箱型區(qū)域中的一個(gè)可感知區(qū)域的幾何中心點(diǎn)的三維坐標(biāo)。若在這個(gè)限制的箱型區(qū)域內(nèi),表示能見(jiàn)度識(shí)別最大,傳感器可以啟動(dòng)一些動(dòng)態(tài)行為;若在這個(gè)限制箱型區(qū)域外,

51、則表示能見(jiàn)度識(shí)別較差,傳感器將停止一些動(dòng)態(tài)行為。該域值的默認(rèn)值為坐標(biāo)原點(diǎn)( 0 0 0 )。 (3) size域的域值 指定了一個(gè)能見(jiàn)度傳感器節(jié)點(diǎn)箱型長(zhǎng)方體區(qū)域的尺寸(X Y Z),該域值的3個(gè)數(shù)值分別表示長(zhǎng)方體區(qū)域的寬度、高度和深度。該域值的默認(rèn)值是在原點(diǎn)的一個(gè)點(diǎn)區(qū)域( 0 0 0 )。 實(shí)例6-16 在立體空間背景下,利用能見(jiàn)度傳感器節(jié)點(diǎn)使飛碟與帆船在可見(jiàn)性感知檢測(cè)器節(jié)點(diǎn)控制下產(chǎn)生動(dòng)態(tài)運(yùn)動(dòng)行為vrml 6-16.wrl6.4.2 ProximitySensor親近度傳感器節(jié)點(diǎn)ProximitySensor親近度傳感器節(jié)點(diǎn)也稱(chēng)為接近感知器節(jié)點(diǎn),用來(lái)感知用戶(hù)何時(shí)進(jìn)入、退出和移動(dòng)于坐標(biāo)系內(nèi)的一個(gè)長(zhǎng)方體區(qū)域。該節(jié)點(diǎn)能夠感應(yīng)觀測(cè)者進(jìn)入和移動(dòng)VRA4L虛擬現(xiàn)實(shí)場(chǎng)景中的長(zhǎng)方體感知區(qū)域。當(dāng)觀測(cè)者穿越這個(gè)長(zhǎng)方體感知區(qū)域時(shí),可以使親近度傳感器啟動(dòng)某個(gè)動(dòng)態(tài)對(duì)象;當(dāng)觀測(cè)者離開(kāi)這個(gè)長(zhǎng)方體感知區(qū)域,將停止某個(gè)動(dòng)態(tài)對(duì)象。例如,親近度傳感器節(jié)點(diǎn)控制一個(gè)自動(dòng)門(mén),當(dāng)觀測(cè)者通過(guò)自動(dòng)門(mén)時(shí),門(mén)被打開(kāi),然后自動(dòng)關(guān)閉。ProximitySensor親近度傳感器節(jié)點(diǎn)語(yǔ)法結(jié)構(gòu)Group組節(jié)點(diǎn)Background背景節(jié)點(diǎn)TimeSensor時(shí)間傳感器節(jié)點(diǎn)ProximitySenso

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論