骨骼動畫公式

2021-06-17 20:10:41 字數 1409 閱讀 5389

本節你將回顧一些骨骼動畫用到的概念和數學公式。乙個骨骼動畫是由許多關鍵幀組成的,每個關鍵幀儲存了乙個bone的配置(朝向和位置)和bone對應的時間。在每個時間間隔,你使用乙個或多個關鍵幀改變bone的配置。

圖11-7展示了一張如圖11-3中的骨骼的動畫,當left shoulder bone的朝向變動時也會影響到其他bone。

注意所有的後代(descendant)bone的配置都改變了。

要實現如圖11-7的結果,只需對left shoulder bone儲存乙個關鍵幀動畫。雖然所有的 left shoulder children的配置都改變了,它們與left shoulder的關係還是不變的。換句話說,你不需要儲存left shoulder children的新配置,因為你是基於新left shoulder配置計算children的配置的。這樣,當你需要更新模型時,你需要計算每個bone的絕對配置,然後使用這些bone變換頂點。接下來我們會學習一些變換頂點用到的公式,你將使用這些公式更新並繪製模型。為了更好的利用gpu,你將在動畫模型effect中實現這些公式。

模型的每個頂點包含了哪個bone影響它的位置和bone作用在頂點上的影響的資訊。你可以計算頂點的最後位置,而這個位置只被乙個bone影響,下面是公式:

pf=p0′[bone•w]

在這個公式中,pf是頂點的最後位置,p0′是頂點的初始位置,bone是包含影響頂點的bone的絕對配置的矩陣,w是影響的權重。因為頂點只被乙個bone影響,所以這個權重是1(即100%)。這個公式顯示了如何計算頂點的最後位置:用包含bone的絕對配置的矩陣變換頂點的初始位置。

頂點的初始位置必須和bone使用相同的座標系統,這個座標包含在bind pose中。當頂點連線到bone時,所有的bone是在bind pose位置中找到的,而且所有的bone動畫是應用到骨骼的初始bind pose的。你可以通過將頂點位置乘以反bone矩陣將頂點的初始位置轉換到bone的bind pose座標系統中,由以下公式決定:

p0′=p0[bone-1

bindpose]

在這個公式中,p0′是頂點在bind pose座標中的初始位置,p0是頂點在模型空間中的初始位置,而bone-1

bindpose是bone絕對配置的反矩陣。要將頂點座標轉換到bone座標系統,你只需將頂點座標乘以bone的反矩陣。使用這兩個公式,你可以讓所有的頂點都動起來。

第乙個公式不允許乙個以上的bone影響乙個頂點,但在很多情況中往往是幾個bone共同影響乙個頂點。要計算幾個bone共同影響乙個頂點的最終位置,你需要計算施加影響的每個bone的頂點位置。然後你就能通過對頂點最終位置求和計算最終位置。下面的公式表示有幾個bone共同影響乙個頂點的計算公式:

注意用來變換頂點的權重的和必須是1。最後,下面的公式表示變換頂點的完整方程:

注意在前面的方程中你首先計算矩陣的和,然後一次性的變換頂點。

骨骼動畫換裝

之前看過好多有關骨骼動畫換裝的文章,雖然給予很大幫助,然而自己也是費了很大勁,最終也是自己解決了問題,我把自己的解決方式分享出來,希望對你有所幫助 void changearmaturebone cocostudio armature armature const char bonename coc...

LAYA 骨骼動畫

建立骨骼動畫 private var sk skeleton private function showski void private function onloaded t templet void if sk null sk.url t.url sk t.buildarmature 0 sk....

骨骼蒙皮動畫

一 基本原理 骨骼動畫的基本原理就是首先控制各個骨骼和關節,再使附在上面的蒙皮 mesh 與其相匹配。乙個角色由作為 的單一網格模型和按照一定層次組織起來的骨骼組成。骨骼層次描述了角色的結構 相鄰的骨骼通過關節連線,並且可以做出相對的運動。這裡要注意的是,骨骼間是具有 父子 關係的,比如,右前臂是右...