




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第十一章第十一章 交互與動畫效果的實現交互與動畫效果的實現 到目前為止,我們主要還停留在靜態的虛擬場到目前為止,我們主要還停留在靜態的虛擬場景的構建上,在現實世界中,萬物都是在變化著的,景的構建上,在現實世界中,萬物都是在變化著的,如太陽的升落,樹葉由綠變黃等等,這些都是動態如太陽的升落,樹葉由綠變黃等等,這些都是動態的,可以稱之為動畫。同樣,作為主體與虛擬世界的,可以稱之為動畫。同樣,作為主體與虛擬世界進行交互的人類化身,其在虛擬世界中的活動也必進行交互的人類化身,其在虛擬世界中的活動也必將帶來信息的交互和場景等的變化。因此,必要得將帶來信息的交互和場景等的變化。因此,必要得動畫措施和交互手
2、段也是虛擬世界的重要組成部分。動畫措施和交互手段也是虛擬世界的重要組成部分。本章將重點介紹本章將重點介紹VRML中這些效果的實現。中這些效果的實現。 11.1 動畫效果動畫效果 v VRML中提供了多個用來控制動畫的插補器,以及控制時間的時間傳感器。 v 11.1.1 TimeSensor節點節點時間傳感器時間傳感器 v 在現實世界中,世界萬物的變化往往是自動的,而且是有一定規律的,即不是隨人的改變而改變的,這就需要在VRML虛擬世界中,創建出能自動變化不需要認為改變的造型。可以通過設定時間規律變化來控制造型變化。而控制時間按規律變化最常見的就是時間傳感器。時間傳感器TimeSensor節點的
3、作用就是創建一個虛擬時鐘,并對其他節點發送時間值。 11.1 動畫效果動畫效果v 其節點語法定義如下: TimeSensorEventOutSFBoolisActiveEventOutSFTimetimeEvetnOutSFTimecycleTimeEventOutSFFloatfraction_changedExposedFieldSFTimecycleInterval1.0ExposedFieldSFBoolenabledTRUEExposedFieldSFTimestartTime0ExposedFieldSFTimestopTime0 ExposedFieldSFBoolloopFAL
4、SE 11.1 動畫效果動畫效果v cycleInterval域的值指定了一個時間長度,用來說明這個時間傳感器從0.0時刻到1.0時刻之間的周期間隔,單位為秒。該域值必須大于0.0,其缺省值為1.0秒。v Enabled域的值指定了時間傳感器的打開和關閉。如果該域值為TRUE,時間傳感器被打開;域值為FALSE時,時間傳感器被關閉。其缺省值為TRUE。v Loop域的值指定了時間傳感器是否循環輸出。如果該域值為TRUE,則時間傳感器將從0.0到1.0這段時間間隔內輸出浮點時刻。而在時間間隔的結尾,返回到0.0,開始新的循環。如果該域值為FALSE,時間傳感器不循環,只從0.0到1.0輸出一次。
5、 11.1 動畫效果動畫效果v StartTime域的值指定了時間傳感器開始輸出事件的絕對時間。該域值的缺省值為0.0秒。v StopTime域的值指定了時間傳感器停止輸出事件的絕對時間。該域值的缺省值為0.0秒。v 同AudioClip節點中的域一樣,startTime,stopTime,cycleInterval和loop域值共同控制著時間傳感器的事件輸出。當這4個域同時使用時,根據這4個域值之間的關系,決定時間傳感器的工作狀態。v 事件出口isActive在時間傳感器開始運行的同時向外輸出TRUE值,在時間傳感器停止運行時向外輸出FALSE值。 11.1 動畫效果動畫效果v 事件出口ti
6、me在時間傳感器運行時,不斷輸出一個絕對時間值。v 事件出口cycleTime在時間傳感器每次循環的開始時輸出一個當前的時間絕對值。v 事件出口fraction_changed在時間傳感器運行時,輸出0.0和1.0之間的浮點時刻。v TimeSensor節點在VRML中并不產生任何造型和可視效果。該節點可以包含在任何組節點中作為子節點,但獨立于所選用的坐標系。 11.1.2 控制動畫的插補器控制動畫的插補器v 插補器(Interpolator)節點是為線性關鍵幀動畫而設計的。其采用一組關鍵數值,且每個關鍵值對應一種狀態。這個狀態允許以各種形式表示,如SFVec3f或SFVecColor。瀏覽器
7、會根據這些關鍵狀態生成連續的動畫。一般來說,瀏覽器在兩個相鄰關鍵幀之間生成的連續幀是線性的。v 插補器節點根據其所插值的類型不同而分為6種:顏色插補器(ColorInterpolator)、坐標插補器(CoordinateInterpolator)、法線插補器(NorMalInterpolator)、朝向插補器(OrientationInterpolator)、位置插補器(PositionInterpolator)、標量插補器(ScalarInterpolator)。 11.1.2 控制動畫的插補器控制動畫的插補器v 11.1.2.1 ColorInterpolator節點節點v ColorI
8、nterpolator節點是用來表示顏色間插值的節點。該節點并不創建造型,在VRML場景中是看不見的,該節點可以作為任何編組節點的子節點,但又獨立于所使用的坐標系,即不受坐標系的限制。v 其節點語法定義如下:ColorInterpolatorExposedFieldMFFloatkeyExposedFieldMFColorkeyValueEventInSFFloatset_fractionEventOutSFColorvalue_changed 11.1.2 控制動畫的插補器控制動畫的插補器v key域的值表示一系列的關鍵的、浮點時刻值,與接收到的set_fraction對應。時刻值一般在0.
9、0至1.0區間內取值,關鍵時刻值可以是任何形式的正或負浮點值,但其值必須以非遞減的方式表示。其默認值為空格。v KeyValue域的域值表示一系列的關鍵RGB色彩值。當接收到set_fraction eventIn時,用它來插值value_change輸出。每個RGB色彩都是由在0.0至1.0區間內的三個浮點數所表示的,它們分別表示混合色中紅、綠、藍的數值。其默認值為一個空的列表。v 事件入口set_fraction收到一個時刻值時,ColorInterpolator節點就在關鍵色彩值和它們相應的關鍵時間值的基礎上計算出一個RGB色彩值,并通過value_changed事件出口輸出該RGB色彩
10、值。v 事件出口value_changed用來輸出計算后的RGB色彩值。 11.1.2 控制動畫的插補器控制動畫的插補器v 11.1.2.2 CoordinateInterpolator節點節點 v CoordinateInterpolator節點是表示坐標插值的節點,該節點在一組MFVec3f值之間進行線性插值,通過使用該節點,一個造型的組成坐標可以變化。同ColorInterpolator節點一樣,CoordinateInterpolator節點也不創建任何造型,在VRML場景中也是不可見的。v 其節點語法定義如下:CoordinateInterpolatorExposedFieldMFF
11、loatkeyExposedFieldMFVec3fkeyValueEventInSFFloatset_fractionEventOutMFVec3fvalue_changed 11.1.2 控制動畫的插補器控制動畫的插補器v key域提供了一張關鍵時間、時刻和浮點時間的列表,與接收到的set_fraction對應。時刻值在0.0和1.0之間取值,然而關鍵時刻值可以是任意大小的正值或負值,不過必須以遞增的順序排列,其默認值是一張空列表。v KeyValue域提供了一張關鍵三維坐標的列表。每一個坐標都包含三個浮點數值,分別為此向量的X、Y和Z分量。KeyValue域可提供兩個或更多的關鍵坐標點,
12、如果有N個時刻值和每個時刻值對應了的M個關鍵坐標點,那么該域就包含了NM個坐標點。其默認值為一張空列表。 11.1.2 控制動畫的插補器控制動畫的插補器v 當事件入口set_fraction接收到一個時刻值時,CoordinateInterpolator節點就根據關鍵時刻列表和它們相對應的關鍵坐標子列表計算出一張坐標的子列表,并通過value_changed事件出口輸出新的坐標列表。v 坐標插補器實現的是坐標點的移動動畫,通過CoordinateInterpolator節點,可使VRML中的物體造型上的各個坐標點有獨自的運動軌跡,即可使物體造型改變。 11.1.2 控制動畫的插補器控制動畫的插
13、補器v 11.1.2.3 NormalInterpolator節點節點 v NormalInterpolator節點是表示法向量的節點但不創建任何造型。該節點在Normal節點中的法向量矢量中進行插值,以產生動畫效果。v 其語法定義如下:NormalInterpolatorExposedFieldMFFloatkeyExposedFieldMFVec3fkeyValueEventInSFFloatset_fractionEventOutMFVec3fvalue_changed 11.1.2 控制動畫的插補器控制動畫的插補器v key域的值指定了一個關鍵浮點時刻列表。與接收到的set_fract
14、ion對應。該浮點值一般在0.0和1.0之間取值,其也可以是任意大小的正、負浮點數。關鍵時刻必須以非遞減的順序排列。其默認值為一張空列表。v KeyValue域的值指定了一個關鍵法向量矢量列表。每個法向量矢量都包含三個浮點數,分別為此向量的X、Y和Z分量。同CoordinateInterpolator節點中keyValue域一樣可提供兩個或更多的法向量矢量。其默認值為一空列表。v 當事件入口set_fraction接收到一個時刻值時,NormalInterpolator節點根據關鍵時刻列表和其對應的關鍵法向量矢量列表,計算出一個法向量矢量子列表,并通過value_changed事件出口輸出新算
15、出的法向量矢量列表。 11.1.2 控制動畫的插補器控制動畫的插補器v 11.1.2.4 PositionInterpolator節點節點 v PositionInterpolator節點用來描述一系列用于動畫的關鍵值。該節點不創建任何造型,在一組SFVec3f值之間進行線性插值。適合于對平移進行插值。v 其語法結構定義如下:PositionInterpolatorExposedFieldMFFloatkeyExposedFieldMFVec3fkeyValueEventInSFFloatset_fractionEventOutSFVec3fvalue_changed 11.1.2 控制動畫的
16、插補器控制動畫的插補器v key域的值指定了一張浮點時刻關鍵值列表,與接收到的set_fraction對應,時刻值一般在0.0和1.0之間取值,然而關鍵時刻值可以是任意大小的正值或負值,不過必須以遞增的順序排列,其默認值是一張空列表。v KeyValue域的值指定了一個關鍵位置的列表。每一個關鍵位置都是一組由X、Y和Z浮點值組成的三維坐標或平移距離。在一些運用中,關鍵值也可以是X、Y和Z的比例要素或其他三個浮點值的組。其默認值是一張空列表。v 當事件入口set_fraction接收到一個時刻值時,PositionInterpolator節點計算出基于關鍵位置表和相關的關鍵時刻的一個位置,并通過
17、value_changed事件出口輸出新的位置列表。 11.1.2 控制動畫的插補器控制動畫的插補器v 11.1.2.5 ScalarInterpolator節點節點v ScalarInterpolator節點描述的是在動畫中使用的一些列關鍵色彩值。該節點不創建任何造型,在一組SFFloat值之間進行線性插值,這個插值適合于用簡單的浮點值定義的任何參數。使用該節點,能夠動畫他的透明度。v 其語法定義如下:ScalarInterpolatorExposedFieldMFFloatkeyExposedFieldMFFloatkeyValueEventInSFFloatset_fractionEve
18、ntOutSFFloatvalue_changed 11.1.2 控制動畫的插補器控制動畫的插補器v key域的值提供了一張浮點時刻關鍵值列表,與接收到的set_fraction對應。時刻值一般在0.0和1.0之間取值,然而關鍵時刻值可以是任意大小的正值或負值,不過必須以遞增的順序排列,其默認值是一張空列表。v KeyValue域的值指定了一系列關鍵浮點值。其默認值為一個空的序列。v 當事件入口set_fraction接收到一個時刻值時,ScalarInterpolator節點根據關鍵值的序列和它們對應的關鍵時刻值,計算一個浮點值,并通過value_changed事件出口輸出計算后的浮點值。v
19、 ScalarInterpolator節點還可以用來控制VRML造型的透明度,通過控制Material節點的transparency域值,是造型的透明度改變。 11.1.2 控制動畫的插補器控制動畫的插補器v 11.1.2.6 OrientationInterpolator節點節點 v OrientationInterpolator節點用來描述一系列在動畫中使用的旋轉值。該節點不創建任何造型,在一組SFRotation值之間進行插值,通過使用該節點,可以使造型旋轉。v 其語法定義如下:OrientationInterpolatorExposedFieldMFFloatkeyExposedFie
20、ldMFVec3fkeyValueEventInSFFloatset_fractionEventOutMFVec3fvalue_changed 11.1.2 控制動畫的插補器控制動畫的插補器v key域的值指定了一張浮點時刻關鍵值列表,與接收到的set_fraction對應。時刻值一般在0.0和1.0之間取值,然而關鍵時刻值可以是任意大小的正值或負值,不過必須以遞增的順序排列。其默認值是一張空列表。v KeyValue域的值指定了一個旋轉關鍵值的列表。每一個旋轉關鍵值是一個4個值的組。前三個值指定了一個旋轉軸的X、Y和Z分量,第4個值指定了旋轉軸的一個旋轉角度。其默認值是一張空列表。v 當事件
21、入口set_fraction接收到一個時刻值時,OrientationInterpolator節點根據關鍵時刻列表和與其對應的關鍵旋轉值列表,計算出一個關鍵旋轉值子列表,并通過value_changed事件出口輸出新算出的旋轉列表。 11.2 交互功能交互功能 v 交互功能是VRML的一個重要特點,沒有交互功能的VRML場景是不能吸引人的,因為能使人有身臨其境的感覺的主要功能就是交互。雖然利用前面介紹的不同節點能創建出相當逼真的VRML場景,但這只是靜態的,即使是動畫也是固定的,即在該VRML文件一運行就已確定,瀏覽者無法進行任何選擇,更談不上身臨其境了。v 通過VRML特有的交互功能,瀏覽者
22、可以根據需要隨時改變VRML場景,比如搬動一個椅子等。 11.2.1 接觸檢測器接觸檢測器 v 在VRML中虛擬世界和用戶之間的交互是通過一系列檢測器來實現的,通過這些檢測器節點,使瀏覽器感知用戶的各種操作,比如開門等,這樣用戶就可以和VRML虛擬世界中的三維對象進行直接交互。觸動檢測器是用來檢測用戶的觸動動作的,其中包括TouchSensor節點,PlaneSensor節點,CylinderSensor節點和SphereSensor節點。 v 11.2.1.1 TouchSensor節點節點 v TouchSensor節點創建了一個檢測用戶動作并將其轉化后輸出,以觸發一個動畫的檢測器。它是用
23、來測試用戶觸摸事件的檢測器。該節點可以為任何成組節點的子節點,并感知用戶對該組節點的動作。 11.2.1 接觸檢測器接觸檢測器v 其節點語法定義如下:TouchSensorEventOutSFBoolisOverEventOutSFVec3fhitPoint_changedEventOutSFVec3fhitNormal_changedEventOutSFVec3fhitTexCoord_changedEventOutSFBoolisActiveEventOutSFTimetouchTimeExposedFieldSFBoolenabled TRUE 11.2.1 接觸檢測器接觸檢測器v is
24、Over事件出口是用來當用戶的鼠標位于被感應的三維對象上方時,將引發isOver事件,且該事件值為TRUE。反之,當用戶的鼠標不在被感應的三維對象上方時,該事件值為FALSE。 v HitPoint_changed事件出口用來當用戶在被感應的幾何圖形上點擊鼠標時發送該值。其值表示對象上點的坐標。v HitNormal_changed事件出口用來當用戶在被感應的幾何圖形上點擊鼠標時發送該值。其值表示對象上點的表面法向量。v Enabled域的值指定了是否激活該檢測器。當該域值為TRUE時,該檢測器允許被用戶激活,并產生輸出;而當該域值為FALSE時,用戶無法激活該檢測器。該域值的缺省值為TRUE
25、。 11.2.1 接觸檢測器接觸檢測器v HitTexCoord_changed事件出口用于當用戶位于被感應的幾何圖形上點擊鼠標時,發送該值。其值表示對象上點的紋理坐標。紋理坐標功能是VRML中很重要的一個功能。我們可以使用這一功能實現像HTML網頁一樣,在一幅貼圖上面劃分多個區域,然后將每個區域設置各自的交互。v IsActive事件出口用來當用戶點擊對象時,檢測器被激活,該域值由FALSE變為TRUE;反之當檢測器失效時,該域值將由TRUE變為FALSE。v TouchTime事件出口用來當isOver為TRUE,而isActive為FALSE時發送該事件,所發送的值時系統當前的時間。 1
26、1.2.1 接觸檢測器接觸檢測器v 11.2.1.2 PlaneSensor節點節點 v PlaneSensor節點創建了一個可將瀏覽者的動作轉換成適于造型的輸出的檢測器。該節點可以為任何成組節點的子節點,用以感知用戶對該組節點的動作,使造型按用戶的動作平移。v 其節點語法定義如下: PlaneSensorEventOutSFBoolisActiveEventOutSFVec3ftrackPoint_changedEventOutSFVec3ftranslation_changed 11.2.1 接觸檢測器接觸檢測器ExposedFieldenabledTRUEExposedFieldSFVe
27、c3foffset0 0 0ExposedFieldSFBoolautoOffsetTRUEExposedFieldSFVec2fmaxPosition-1 1ExposedFieldSFVec2fminPosition0 0v trackPoint_changed事件出口用來當檢測器被激活并且用戶單擊鼠標時,發送該值。其值代表的是虛擬平面上的當前單擊點。 11.2.1 接觸檢測器接觸檢測器v Translation_changed事件出口用來當檢測器被激活并且用戶單擊鼠標時發送該值。其值代表的是虛擬平面上的平移坐標值。v Offset域的值用于設置偏移量,即每一次輸出位置時的偏移量。當aut
28、oOffset字段的值為TRUE時,人為設置的偏移量被忽略。v AutoOffset域的值為TRUE時,VRML程序會根據用戶實際拖拉鼠標的情況,計算出每一次平移的偏移量。v MaxPosition域的值用來設置檢測器的最大位置值。v MinPosition域的值用來設置檢測器的最小位置值。 11.2.1 接觸檢測器接觸檢測器v 11.2.1.3 CylinderSensor節點節點 v CylinderSensor節點用來創建一個將用戶動作轉換成造型圍繞Y軸旋轉動畫的檢測器,該節點可作為任何組節點的子節點。v 其節點語法定義如下:CylinderSensorEventOutSFBoolisA
29、ctiveEventOutSFVec3ftrackPoint_changedEventOutSFRotationrotation_changed ExposedFieldSFBoolenabledTRUEExposedFieldSFFloatoffset0 11.2.1 接觸檢測器接觸檢測器ExposedFieldSFBoolautoOffsetTRUEExposedFieldSFFloatmaxAngle-1ExposedFieldSFFloatminAngle0ExposedFieldSFFloatdiskAngle0.262 v isActive事件出口用來當檢測器被激活時,設置該值為T
30、RUE,表示當前用戶正在進行拖拉操作。否則為FALSE。v TrackPoint_changed事件出口用于當前用戶激活檢測器并進行拖拉操作時,將引發該事件值。其值代表圓柱體表面的坐標。 11.2.1 接觸檢測器接觸檢測器v Rotation_changed事件出口用于當用戶激活檢測器并進行拖拉操作時,將引發該事件值。該值時虛擬的圓柱體的旋轉值。v Enable域的值為TRUE時,檢測器才允許被用戶激活。v Offset域的值指定了物體旋轉的偏移量,即每一次增加的角度值。當autoOffset字段的值為TRUE時,人為設置的偏移量將被忽略。v AutoOffset域的值為TRUE時,VRML程
31、序會根據用戶實際拖拉鼠標的情況,計算出每一次旋轉的偏移量。v MaxAngle域的值定義檢測器輸出的最大角度。v MinAngle域的值定義檢測器輸出的最小角度。v DiskAngle域的值定義檢測器在圓盤行為之間切換角度。 11.2.1 接觸檢測器接觸檢測器v 11.2.1.4 SphereSensor節點節點 v SphereSensor節點創建了一個將用戶動作轉換為造型繞某一點旋轉的動畫的檢測器,該節點可作為其他組節點的子節點。v 其節點語法定義如下:SphereSensorEventOuttrackPoint_changedEventOutrotation_changedExposed
32、FieldSFBoolenabledTRUEExposedFieldSFRotationoffset0 1 0 0ExposedFieldSFBoolautoOffsetTRUE 11.2.1 接觸檢測器接觸檢測器v trackPoint_changed事件出口用于當檢測器被激活并且用戶單擊鼠標時,發送該值。其值代表的是虛擬球體表面上的當前單擊點。v Rotation_changed事件出口用戶當檢測器被激活并且用戶單擊鼠標時,發送該值。其值代表的是虛擬球體的旋轉值。v Offset域的值指定了檢測器每一次輸出的旋轉量。當autoOffset字段設置為TRUE時,本字段的設置值將被忽略。v A
33、utoOffset域的值指定該旋轉值是否發生偏移。 11.2.2 感知檢測器感知檢測器 v 除了觸動檢測器外,能產生交互功能的節點還有感知檢測器。與觸動檢測器不同的是,感知檢測器是感知用戶與造型的接近程度。感知檢測器包括VisibilitySensor節點,ProximtitySensor節點和Collision節點。 v 11.2.2.1 VisibilitySensor節點節點 v VisibilitySensor節點用來從觀察者的方向和位置感知一個長方體區域在當前坐標系中何時才是可視的。該節點可作為任意組節點的子節點。 11.2.2 感知檢測器感知檢測器v 其語法定義如下:VisibilitySensorExposedFieldSFBoolenabledTRUEExposedFieldSFVec3fcenter0.0 0.0 0.0ExposedFieldSFVec3fsize0.0 0.0 0.0EventOutSFBoolisActiveEventOutSFTimeenterTimeEventOutSFTimeexitTime 11.2.2 感知檢測器感知檢測器v center域
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設備預知維修管理制度
- 設計研發中心管理制度
- 評估外聘專家管理制度
- 診所藥品供貨管理制度
- 2025年中國滑動窗行業市場全景分析及前景機遇研判報告
- 調度系統設備管理制度
- 財務風險預警管理制度
- 貨代公司人員管理制度
- 貨架物品擺放管理制度
- 貨車油路直供管理制度
- 24春國家開放大學《家畜環境衛生與設施》形考作業2參考答案
- ETC委托書:ETC卡掛失和補辦申請
- 臺球館火災危險性分析報告
- 《互聯網銷售高級課件》
- JCT890-2017 蒸壓加氣混凝土墻體專用砂漿
- 汽車吊、隨車吊起重吊裝施工方案
- 民國時期服飾簡論
- 商業模式畫布模板
- 教學設備投標方案(完整技術標)
- 壓力管道設計收費標準
- 鋼結構質量通病與防治課件
評論
0/150
提交評論