想一想如果制作動畫,如果沒有關鍵幀這種技術會是多么恐怖,如果動畫幀率為25,即每秒要播放25張畫面,假設現在要制作1秒的動畫,那么就需要手動制作25張畫面,關鍵幀的出現使得我們只需要畫2張畫面,中間的23張畫面自動計算完成,極大的提升開發效率。
在享受科技的同時不免會思考它的實現原理。
在動畫中,動 無非有三種 平移 縮放 旋轉。
平移 縮放 旋轉 在數學中 我們稱它為什么? 變化
在數學中用什么表示? 矩陣啊。
以下是我自己的理解,不一定對
假設有一張50*50像素的圖片,把這張圖片的中心點放在直角坐標系的原點那么每個像素點都有了對應的坐標,有了坐標就可以把一張圖片表達成向量的形式了,因為坐標和向量是一一對應的,我們把這些向量放在一個矩陣中,於是一張圖片或者一個圖形就用一個矩陣表達出來了。想想一下,你現在在ps中把這張圖片向右移動了10個單位,那么就需要對這個矩陣左乘一個矩陣,乘了之后的結果就是圖片最后的狀態。這個過程已經隱含了動畫關鍵幀了。
再回想一下,關鍵幀動畫需要一個首幀和末幀,中間是自動計算的,這個怎么計算的,其實想來也比較簡單,制作動畫我們會先定下來共需要多少幀,還是剛才那個向右移動的那個動畫,假設需要20幀完成這個動畫。
那么平均每一個幀需要向右移動0.5個單位,這就意味着第二幀的計算方法是圖片矩陣左乘一個矩陣,這個矩陣意思是向右移動0.5個單位。依次就計算出每一幀的狀態了。
如果不僅向右移動而且向右移動的過程中還旋轉了,那么再左乘一個旋轉矩陣即可。
以后看到動畫就不再是動畫了 而是一個一個矩陣的相乘。
比如一個戰士揮動手中的刀,刀在底層是用一個矩陣表示的,這個動畫過程計算過程是先左乘一個移動矩陣再左乘一個旋轉矩陣,假設這個過程是0.5秒完成的,幀率也是知道的,那么就可以計算出每一幀的結果,然后
調用引擎展示出每一幀的結果 最后就看到整體結果了。
寫到這里 突然想到GPU內部幀緩沖的概念了,既然每個動畫的每個幀的數據都是先計算好了 再調用引擎展示出來 那么先計算好的這些幀數據保存在哪里呢? 就保存在幀緩存里面。
以上全是自己的理解。