W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
關(guān)鍵幀軌道(KeyframeTrack)是關(guān)鍵幀(keyframes)的定時(shí)序列, 它由時(shí)間和相關(guān)值的列表組成, 用來讓一個(gè)對(duì)象的某個(gè)特定屬性動(dòng)起來。
在使用手冊(cè)的“下一步”章節(jié)中,“動(dòng)畫系統(tǒng)”一文對(duì)three.js動(dòng)畫系統(tǒng)中的不同元素作出了概述
和JSON model format的動(dòng)畫層級(jí)相反, 關(guān)鍵幀軌道(KeyframeTrack)不會(huì)將單幀作為對(duì)象存儲(chǔ)在“key”數(shù)組(一個(gè)存有每一幀的時(shí)間和值的地方)中。
關(guān)鍵幀軌道(KeyframeTrack)中總是存在兩個(gè)數(shù)組:times數(shù)組按順序存儲(chǔ)該軌道的所有關(guān)鍵幀的時(shí)間值,而values數(shù)組包含動(dòng)畫屬性的相應(yīng)更改值。
值數(shù)組中的每一個(gè)成員,屬于某一特定時(shí)間點(diǎn),不僅可以是一個(gè)簡(jiǎn)單的數(shù)字,還可以是(比如)一個(gè)向量(如果是位置動(dòng)畫)或者是一個(gè)四元數(shù)(如果是旋轉(zhuǎn)動(dòng)畫)。 因此,值數(shù)組(也是一個(gè)平面陣列)的長(zhǎng)度可能是時(shí)間數(shù)組的三四倍。
與不同類型的動(dòng)畫值對(duì)應(yīng),存在若干關(guān)鍵幀軌道(KeyframeTrack)的子類,繼承了它大多數(shù)屬性和方法:
可以在AnimationClipCreator文件中找到用不同類型的關(guān)鍵幀軌道創(chuàng)建動(dòng)畫剪輯(AnimationClips)的示例。
由于顯式值僅針對(duì)存儲(chǔ)在時(shí)間數(shù)組中的離散時(shí)間點(diǎn)指定,因此必須在兩個(gè)時(shí)間點(diǎn)之間進(jìn)行插值
軌道的名稱對(duì)于這個(gè)軌道與動(dòng)畫節(jié)點(diǎn)的特定屬性的連接(由PropertyBinding完成)很重要。
name - 關(guān)鍵幀軌道(KeyframeTrack)的標(biāo)識(shí)符.times - 關(guān)鍵幀的時(shí)間數(shù)組, 被內(nèi)部轉(zhuǎn)化為 Float32Array.values - 與時(shí)間數(shù)組中的時(shí)間點(diǎn)相關(guān)的值組成的數(shù)組, 被內(nèi)部轉(zhuǎn)化為 Float32Array.interpolation - 使用的插值類型。 參見 Animation Constants for possible values. Default is InterpolateLinear.
軌道的名稱可以指動(dòng)畫對(duì)象中的變形目標(biāo)(morph targets)、骨骼(bones)或可能的其他值 查看PropertyBinding.parseTrackName可獲知哪些形式的字符串可以解析出綁定的屬性:
可以使用節(jié)點(diǎn)名稱或uuid(盡管它需要位于傳遞到混合器的場(chǎng)景圖節(jié)點(diǎn)的子樹中)引用到某節(jié)點(diǎn)?;蛘撸?如果軌道名稱的首字符是點(diǎn), 該軌道會(huì)應(yīng)用到傳入到混合器的根節(jié)點(diǎn)上。
通常,在該節(jié)點(diǎn)之后會(huì)直接指定一個(gè)屬性。 但是也可以再指定一個(gè)子屬性, 例如 如果只是想通過浮動(dòng)軌道使X組件旋轉(zhuǎn),可使用 .rotation[x]。
還可以使用對(duì)象名稱來指定骨骼或多材質(zhì),例如:.bones[R_hand].scale;再比如,材料數(shù)組中的第四個(gè)材料的漫反射顏色的紅通道可以通過 .materials[3].diffuse[r]訪問到。
屬性綁定也會(huì)解析變形目標(biāo)名稱, 例如: .morphTargetInfluences[run]
說明: 軌道名稱不一定得唯一。 多個(gè)軌道可驅(qū)動(dòng)統(tǒng)一屬性, 此時(shí)結(jié)果應(yīng)該基于多個(gè)軌道之間根據(jù)其各自動(dòng)作的權(quán)重的加權(quán)混合。
一個(gè)Float32Array類型的值,由傳入構(gòu)造器中時(shí)間數(shù)組參數(shù)轉(zhuǎn)化而來。
一個(gè)Float32Array類型的值, 由傳入構(gòu)造器中值數(shù)組參數(shù)轉(zhuǎn)化而來
默認(rèn)的參數(shù)插值類型: InterpolateLinear.
Float32Array, 內(nèi)部用于時(shí)間數(shù)組的緩沖區(qū)的類型
Float32Array, 內(nèi)部用于值數(shù)組的緩沖區(qū)的類型
根據(jù)傳入構(gòu)造器中的插值類型參數(shù),創(chuàng)建線性插值(LinearInterpolant),立方插值(CubicInterpolant)或離散插值 (DiscreteInterpolant)
返回插值類型
返回每個(gè)值的大小(即values數(shù)組的長(zhǎng)度除以times數(shù)組的長(zhǎng)度
根據(jù)時(shí)間(times)和值(values)創(chuàng)建一個(gè)新的離散插值(DiscreteInterpolant)。 可傳入一個(gè)Float32Array類型的變量來接收結(jié)果, 否則會(huì)自動(dòng)創(chuàng)建一個(gè)長(zhǎng)度適宜的新數(shù)組。
根據(jù)時(shí)間(times)和值(values)創(chuàng)建一個(gè)新的線性插值(LinearInterpolant)。 可傳入一個(gè)Float32Array類型的變量來接收結(jié)果, 否則會(huì)自動(dòng)創(chuàng)建一個(gè)長(zhǎng)度適宜的新數(shù)組。
根據(jù)時(shí)間(times)和值(values)創(chuàng)建一個(gè)新的立方插值(CubicInterpolant)。 可傳入一個(gè)Float32Array類型的變量來接收結(jié)果, 否則會(huì)自動(dòng)創(chuàng)建一個(gè)長(zhǎng)度適宜的新數(shù)組。
刪除等效的順序鍵,這些鍵在變形目標(biāo)序列中很常見。
縮放所有關(guān)鍵幀的時(shí)間。說明: 這個(gè)方法很有用,例如, 可用于轉(zhuǎn)化為某一特定幀率(正如animationClip.CreateFromMorphTargetSequence內(nèi)部所做的一樣)。
設(shè)置插值類型。 參閱Animation Constants以供選擇。
及時(shí)刪除之前或之后的所有關(guān)鍵幀。
刪除開始時(shí)間(startTime)之前以及結(jié)束時(shí)間(endTime)之后的關(guān)鍵幀,不改變[startTime, endTime]范圍內(nèi)的任何值。
在軌道上執(zhí)行最小驗(yàn)證,有效則返回true
如果出現(xiàn)以下情況,該方法會(huì)在控制臺(tái)輸出錯(cuò)誤日志: 軌道為空; value size值不可靠; times數(shù)組或values數(shù)組中的元素不是數(shù)字;times數(shù)組中的元素亂序。
將該軌道轉(zhuǎn)化為JSON
src/animation/KeyframeTrack.js
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: